集群
集群(cluster)也稱為群集,表示一群的意思,在服務器領域表示大量的服務器的集合體。
將各個主機組成集群,形成一個系統協調工作,其可擴展性、可用性、容量、性能都會有大規模的提升。
1.)企業級集群分類:LB HA HP 負載均衡實現方式和集群工作層次划分
1)負載均衡集群(LB,Load Balance)並發訪問量
2)高可用集群(HA,High Availability)什么地方都可用,在任何時候都可以
3)高性能集群(HP,High Performance)把很多機器集合在一起, 性能增強
1、負載均衡集群(LB)
以提高應用系統的響應能力、盡可能處理更多的訪問請求、減少延遲為目標,獲得高並發、高負載(LB)的整體能力。LB負載分配依賴於主節點的算法,將來自客戶機的訪問請求分擔給多個服務器節點。
2、高可用集群(HA)
以提高應用系統的可靠性、盡可能減少終端宕機時間為目標,確保服務的連續性,達到高可用(HA)的容錯效果,例“故障切換”“雙擊熱備”“多機熱備”等都屬於高可用群集技術。HA工作方式包括雙工和主從兩種模式。雙工即所有節點同時在線;主從則只有主節點在線,但當出現故障時從才切換為主節點。
3、高性能集群(HP)
以提高應用系統的CPU運算速度、擴展硬件資源和分析能力為目標,獲得相當於大型、超級計算機的高性能運算(HPC,High performance computing)能力。如“雲計算”“網格計算”。高性能群集依賴於“分布式運算”、並行計算:通過專用硬件和軟件將多個服務器的CPU、內存等資源整合在一起,實現大型、大型、超級計算機才具備的計算能力。
負載均衡集群實現方式
1)硬件方式:F5、A10、Citrix、NetScaler、array、梭子魚、綠盟
2)軟件方式:LVS、haproxy、nginx
負載均衡集群工作的層次划分
傳輸層:LVS,haproxy
應用層:haproxy、nginx、ats
2.)LVS集群
LVS(Linux Virtual Server)即Linux虛擬服務器,是由章文嵩博士主導的開源負載均衡項目,已經被集成到Linux內核模塊中。該項目在Linux內核中實現了基於IP的數據請求負載均衡調度方案,其體系結構如下圖1所示,互聯網用戶從外部訪問公司的外部負載均衡服務器,用戶的Web請求會發送給LVS調度器,調度器根據預設的算法決定將該請求發送給后端的某台Web服務器。根據LVS工作模式的不同,真實服務器會選擇不同的方式將用戶需要的數據發送到用戶。LVS工作模式分為NAT模式、TUN模式、以及DR模式。
1)LVS(Linux Virtual Server)工作在傳輸層,基於TCP和UDP進行調度工作。
2)工作方式:根據目標IP和端口轉發到后端主機集群(服務器池)中某一台主機(如何轉發請求,基於某種特定的算法)
3)LVS基於netfilter進行設計的。但是由於LVS有自己的會話表,可能會與iptables中會話表產生沖突,導致了二者無法完美並行。這樣的后果就是會喪失部分安全功能。LVS運行時關閉iptabs
4)LVS由ipvsadm和ipvs 兩個部分組成
ipvsadm是用戶命令工具,用於管理LVS集群服務 ipvs是LVS的內核功能模塊。
查看系統內核是否編譯了LVS,以及支持的功能
grep -i 'IPVS' /boot/config-3.10.0-XXX.el7.x86_64
通常ipvs模塊在Linux內核中被自動裝載,若沒有被裝載,執行modprobe ip_vs進行裝載,然后cat /proc/net/ip_vs 查看是否裝載成功。
安裝ipvsadm
yum install ipvsadm –y
LVS架構各個組成部分名詞:
調度器:director ,DIP 負載均衡器 的ip
RS:real server,RIP 真實提供服務的服務器 ip
CIP:client IP客戶端的ip
VIP:Director Virutal IP調度器的 連接外網 虛擬ip
DIP:Director IP調度器的 真實ip
LVS結構類型
1)lvs-nat
2)lvs-dr(direct routing)
3)lvs-tun
1.NAT模式: (LVS調度器即網關)
用戶通過DNS解析到負載均衡設備上外網地址,LVS外網IP又稱VIP(Virtual IP Address),用戶將請求發送至VIP,LVS根據預設的算法選擇后端的一台真實服務器,通過NAT的方式 (修改 目標IP與port)將數據請求包轉發給真實服務器, --修改目標ip DNAT
真實的服務器將響應數據包 返回給LVS調度器,調度器在得到響應的數據包后通過NAT的方式(修改源ip 與port)將響應數據包發送回用戶。--修改源地址ip SNAT
注意事項:①:RS應該和DIP都使用私網地址,並且RS網關須指向內網的ip地址DIP
②:請求和響應報文都要基於director轉發
③:director支持端口映射
2.DR模式也叫直接路由模式,
LVS接收入站請求 (VIP端口等待連接)以及根據算法選出真實服務器,由后端真實服務器負責響應請求。DR模式要求調度器(DIP)與后端服務器在同一個局域網內 ,VIP地址在調度器與后端所有的真實服務器間共享 回應 客戶端時會返回 調度器VIP 真實服務器的ip對外不可見 所以 把真實服務器的的源地址改為 調度器對外可見的VIP 真實服務器發送數據給客戶端
(因為真實服務器 給客戶端回應數據包時 需要設置源IP為VIP地址,目標IP為客戶端IP, 這樣客戶端訪問的是調度器的VIP地址,回應的源地址也是VIP地址)。
由於多台計算機設置相同的VIP地址,所以要求調度器的VIP地址是對外可見的,真實服務器的VIP對外是不可見的)
因此要求真實服務器的VIP地址必須配置在Non-ARP回環地址的網絡設備上,不會向外廣播自己的MAC及對應的IP地址。
調度器根據算法在選出真實服務器后,在不修改數據報文的情況下,將數據幀的MAC地址修改為選出的真實服務器的MAC地址,將該數據幀發給真實服務器。
負載均衡器 通過 交換機 和后台機器來
注意事項:
①:保證前端路由器將目標IP為VIP的請求報文發送給director
②:RS跟director必須在同一物理網絡中
③:請求報文經由director調度,但響應報文一定不能經過director
④:不支持端口映射
⑤:RS網關不能指向director
3.tun模式:
數據發給調度器, 把選出的真實服務器 IP地址和端口 封裝添加到報頭 把數據包轉發給 后台真實服務器 (所以要求服務器公網ip 來溝通) 一般在局域網架設集群
IP隧道(IP tunning)是一種數據包封裝技術,可將原數據包封裝並添加新的報頭(包括新的源地址及端口、目標地址及端口),
實現將一個發往 目標為調度器VIP地址的數據包封裝(修改目標地址為選擇出來的真實服務器的IP地址及對應端口),之后通過隧道轉發給后端的真實服務器(Real Server),
LVS(TUN)模式要求真實服務器可以直接與外部網絡連接,真實服務器在收到請求數據包后直接給客戶端主機響應數據。
注意事項:①DIP、RIP、VIP全是公網地址
②RS的網關不能指向DIP
③請求報文必須由director調度,響應報文必須不能經過director
④不支持端口映射
⑤RS的OS必須支持隧道功能
3.調度算法(lvs scheduler)
負載均衡集群進行調度,如何挑選后端RS進行調度?--->基於調度算法
靜態方法:根據算法 本身進行調度
RR(輪詢)、WRR(加權輪詢)、SH(源地址hash,實現session保持)、DH(目的地址hash)
動態方法:根據算法 以及各個RS的當前負載狀態 進行調度
LC(最小連接數)、WLC(加權最小連接)、SED(最短期望延遲)、NQ(永不排隊)、LBLC、LBLCR
1)rr:輪詢 rr 算法就是將外部請求順序輪流分配到集群中的node 上,但不考慮每台node 的負載情況。
2)wrr:加權輪詢 wrr 算法在rr 算法的基礎上會考察每台node的負載情況,並嘗試讓負較輕的node 承擔更多請求。 權重 能者多勞 node真實服務器 也叫節點
3)lc:最少連接算法可以讓LVS 嘗試把新的請求交給當前連接數最少的node ,直到此node 連接數不再屬於最少為止。
4)wlc:加權最少連接 wlc 算法也有權重的干預。LVS 會根據每台node的權重並綜合連接數控制轉發行為。 連接數 權重
5)lblc:局部最少連接算法會加上針對源請求IP地址的路由估算,並嘗試把請求發送到與源請求IP路由最近的node 上。此種方法一般用於遠程或者是大規模的集群組。
來數據請求 調度器 計算路由 發送給 距離最短的 服務器節點(一個節點)
6)lblcr:帶有復制的局部最少連接算法 lblcr 算法是在lblc 算法的基礎上增加了一個node 列表,先依據lblc 算法計算出與源請求IP地址最近的一組node ,然后再決定把請求發送到最近一組中的最近的一台node 。
來數據請求 調度器 計算路由 發送給 最短的 一組 服務器節點 然后發送給最近的 一個服務器節點
若此node沒有超載則將請求轉發給這台node, 如果超載則依據”最少連接”原則找到最少連接的node並將此node 加入集群組中。並將請求轉給此node。
7)dh:目標地址 散列算法,相當於隨機。
8)sh:原地址 散列算法,相當於隨機。
4.LB負載均衡集群的操作方法(LVS)
在一個ipvs主機中可以定義多個集群服務,一個集群服務中一個director至少應該能調度一個RS
ipvsadm用法
管理LVS集群服務新增和修改集群
ipvsadm -A |E -t|u service-address -s scheduler調度算法 service-addressip地址加端口
(-A 添加 -E 修改 -t 指定tcp -u 指定udp -s:指定調度算法)
service-address的形式:
如果是tcp為 -t ip:port
如果是udp為 -u ip:port
scheduler:調度算法,默認是wlc
例如:
ipvsadm -A -t 192.168.10.10:80 -s rr
添加VIP為192.168.10.10的集群服務,基於TCP協議,端口為80,調度算法為輪詢
10.10對外可見的ip地址 調度器的虛擬IP地址 VIP (集群對外提供服務ip端口)
ipvsadm -E -t 192.168.10.88:80 -s wrr
修改VIP為192.168.10.88集群的調度算法為加權輪詢
刪除集群
ipvsadm -D -t|u|f service-address (-D 刪除)
例如:
ipvsadm -D -t 192.168.10.88:80
刪除VIP為173.16.16.88,並且端口為80的集群
ipvsadm -C清空所有集群規則:
管理服務器池中的RS
添加和修改
ipvsadm -a|e -t|u| service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-a:添加可調度的服務器節點
-e:修改添加的服務器節點
-t : tcp
-u : udp
-r:指定節點服務器IP地址(RIP)
-g:使用DR模型 直連路由的方式
-i:TUN模型
-m:NAT模型 默認是DR模型
-w:權重
例如:
ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.10 -m -w 1
添加服務器池中的RS服務器192.168.20.10,被192.168.10.88調度,-r使用NAT模型,-w權重為1
ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.20 -m -w 2
添加服務器池中的 RS服務器192.168.20.20,被192.168.10.88調度, -r使用NAT模型,-w權重為2
刪除RS節點
ipvsadm -d -t|u|f service-address -r server-address
例如:
ipvsadm -d -t 192.168.10.88 -r 192.168.20.10
查看LVS配置的相關節點和規則
ipvsadm -L [-n] [--stats] [--rate]
動態監控訪問數量 watch [-n #] "ipvsadm -L -n"
-n:不反解
-c:顯示當前的連接
--stats 顯示統計數據
--rate:統計速率
5.實驗配置LVS-NAT模型
1.四台機器 一台客戶端,一台LVS調度服務端 兩台內網 LVS配置兩塊網卡,做路由
准備LVS調度服務器,為設置NAT模型,需准備兩塊網卡,例如ens33、ens37
ip 地址為192.168.10.100 和 192.168.20.100
准備兩台被調度節點web服務器,網關需指向LVS的director
ip地址為192.168.20.10 和192.168.20.20
2.開啟LVS調度服務器的路由轉發功能
確定LVS調度服務器director的轉發功能開啟,並清空所有防火牆規則(ipvs和iptables不能兼容)
echo “1” > /proc/sys/net/ipv4/ip_forward
或者開啟永久路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
3.在兩台內網服務端寫入測試網頁
在兩台節點上部署web服務器,在網頁根路徑寫入不同的網頁內容,方便結果驗證
4.在director上部署ipvs規則
ipvsadm -A -t 192.168.10.100:80 -s rr
ipvsadm -a -t 192.168.10.100:80 -r 192.168.20.100 -m
ipvsadm -a -t 192.168.10.100:80 -r 192.168.20.200 -m
5.瀏覽器訪問驗證調度效果 保存ipvs規則
使ipvs規則永久有效,進行保存
ipvsadm -S -n > /etc/sysconfig/ipvsadm-config
清空ipvs所有規則
ipvsadm -C
恢復之前保存好的ipvs規則
ipvsadm -R < /etc/sysconfig/ipvsadm-config
cat /etc/sysconfig/ipvsadm-config | ipvsadm
6.實驗配置LVS-DR模型
保證前端路由器將目標IP為VIP的請求報文發送給director
使客戶端只能看到 VIP 外網ip 看不到后台的服務器ip
解決方案:修改RS主機內核參數
1內核參數
arp_ignore:是否響應請求
0表示只要接收請求,一律響應
1表示請求報文從哪個接口進來,響應報文就要從哪個接口出去
2內核參數
arp_announce:是否接收通告,參數值 0 1 2 廣播
0表示任何地址都通告
1表示盡量避免向非本網絡中的接口通告
2總是用最佳本地地址向網絡通告 ens33發起請求 那么就會回應 ens33的IP而不是VIP的ip
1.在director上配置客戶端能訪問的VIP,VIP配置在物理網卡的子接口上即可。然后配置VIP的路由
修改客戶端的ip為 20網段 修改ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
LVS 負載均衡器設定
ifconfig ens38:0 192.168.20.88 broadcast 192.168.20.88 netmask 255.255.255.255 up
route add -host 192.168.20.88 dev ens38:0增加路由
Ifconfig
Ip a
2.兩台WEB機器設置 RS節點內核參數調整,並配置VIP,VIP的地址配置在自身網卡的回環地址lo子接口上。
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0 192.168.20.88 netmask 255.255.255.255 broadcast 192.168.20.88 up --回環地址
3.web服務端 RS上配置VIP的路由
route add -host 192.168.20.88 dev lo:0
20.11客戶端
4.用別的主機ping VIP,檢查連通性,並查看arp地址表驗證RS是否未響應。
5.配置director的ipvs調度規則
ipvsadm -A -t 192.168.20.88:80 -s rr
ipvsadm -a -t 192.168.20.88:80 -r 192.168.20.100:80 -g
ipvsadm -a -t 192.168.20.88:80 -r 192.168.20.200:80 -g
6.瀏覽器驗證LVS-DR集群結果