一、Linux Cluster 基礎:
Cluster:計算機集合為解決某個特定問題組合起來形成的單個系統
Linux Cluster類型:
LB(Load Banlancing):負載均衡
HA(High Availability):高可用。提高服務可用性,避免出現單點故障
HP(High Performance):高性能
可用性衡量公式:
A=MTBF/(MTBF+MTTR)
MTBF:平均無故障時間
MTTR:平均故障修復時間
A的取值范圍(0,1)
系統擴展方式:
Scale UP:向上擴展。提升設備性能
Scale Out:向外擴展。
二、LB CLuster:
1、LB Cluster的實現:
硬件:
F5 Big-IP
Citrix Netscaler
A10 A10
軟件:
lvs:Linux Virtual Server
nginx
haproxy
ats:apache traffic server
perlbal
pound
基于工作的協議層次劃分:
傳輸層(通用):基于DIP Dport分發,類似于四層交換機。主要根據目標端口
lvs
nginx:基于stream機制模擬
haproxy:基于mode tcp機制模擬
應用層(專用):根據請求的內容進行分發
proxy server:
http:nginx(upstream), httpd(balancer), haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, …
ats、perball、pound
用戶的會話保持:
(1) session sticky
在服務器端維護session會話表
Source IP
Cookie
(2) session replication;
session cluster
(3) session server
三、LVS:Linux Virtual Server
VS:Virtual Server,Director,Dispatcher,Balancer
RS:Real Server,Upstream Server,backend server
VS:工作在TCP/IP第四層。其作用為根據請求報文的目標IP和目標協議及端口將其調度轉發至某Real Server,遵循調度算法來挑選RS
LVS:ipvsadm/ipvs
ipvsadm:用戶空間的命令行工具,規則管理器,用于管理集群服務及Real Server;
ipvs:工作于內核空間的netfilter的INPUT鉤子之上的框架;
CIP<–>VIP==DIP<–>RIP
在VS上需要開啟ipv4的端口轉發功能
四、LVS集群的類型:
1)、lvs-nat:類似于多目標的DNAT,修改請求報文的目標IP
2)、lvs-dr:在原請求之外,通過封裝新的mac首部進行轉發
3)、lvs-tun:ipip隧道。在原請求ip報文之外新加一個IP首部
4)、lvs-fullnat:修改請求報文的源和目標IP。
1、lvs-nat:多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的Rip和Port實現轉發。
(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP。
(2)請求報文和響應報文都必須經由Director抓發;Director易于稱為系統瓶頸。
(3)支持端口映射,可修改請求報文的目標Port。
(4)VS必須是Linux系統,RS可以是任意系統。
2、lvs-dr:Direct Routing
通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是挑選出來的RS的RIP所在的接口的MAC地址;源IP/PORT以及目標IP/PORT均保持不變。
DR的最初目的:
客戶的請求到達VR之后,由VS挑選出一個RS進行直接響應,此響應不再經由VR。由此,可以增加VR的并發請求。要實現此目的:需要在每個RS上配置一個VIP,但需確保RS上的VIP不發送廣播報文,因此RS上的VIP需配置在lo接口上。
1)確保前段路由器將目標IP為VIP的請求報文發往VS。如何實現VIP地址不沖突。
a)在前端網關做靜態綁定
b)在RS上使用arptables
c)在RS上修改內核參數以限制arp通告及應答級別
arp_announce
arp_ignore
2)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一網絡
3)RS跟VS需要在同一物理網絡
4)請求報文經由VS,但響應報文不能經由VS,即RIP的網關不能為DIP,而是由RS直接法網Client
5)不支持端口映射
3、lvs-tun:實現跨互聯網通信。VS與RS不在同一網絡。
轉發方式:不修改請求報文的IP首部(CIP:VIP),而是在原IP報文之外在封裝一個IP首部(DIP:RIP),再將報文發送給挑選出的RS。
1)DIP、VIP、RIP都應該是公網地址
2)RS的網關不能執行DIP
3)請求報文經由VS,但響應不經由VS,而是RS直接發送給客戶端
4)不支持端口映射
5)RS需支持隧道功能
4、lvs-fullnat:
通過同時修改請求報文的源IP地址和目標IP地址進行轉發;
CIP –> DIP
VIP –> RIP
(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;
(2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client;
(3) 請求和響應報文都經由Director;
(4) 支持端口映射;
注意:此類型默認不支
五、LVS調度方法
ipvs scheduler:根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法及動態方法
1、靜態方法:
RR:RoundRorbin,輪詢
WRR:Weighted RR。加權輪詢。權重越大,意味著其負載能力越強。
SH:Source Hashing,實現session sticky,源地址hash;將來自同一個ip地址的請求始終發往第一次挑中的RS,從而實現會話綁定。應用場景:實現會話綁定
DH:Destination Hash,目標地址hash,將發往同一目標地址的請求始終發至第一次挑中的RS。應用場景:緩存服務器
2、動態方法:主要根據每RS當前的負載狀態及調度算法進行調度
LC(Least Connections):最少連接。
Overhead=activeconns*256+inactiveconns
overhead值小的獲勝
WLC:Weighted LC
Overhead=(activeconns*256+inactiveconns)/weight
overhead值小的獲勝
SED:Shortest Expection Delay
Overhead=((activeconns+1)*256)/weight
NQ:Never Queue
每臺RS先接受一個請求,之后再按SED算法進行挑選。
LBLC:Locally-Based LC,動態的DH算法
LBLCR:LBLC with Replication,帶復制功能的LBLC
六、使用ipvsadm管理lvs
1、管理集群服務:增、改、刪;
增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 刪:ipvsadm -D -t|u|f service-address
service-address: VR服務器地址
-t|u|f:
-t: TCP協議的端口,VIP:TCP_PORT
-u: TCP協議的端口,VIP:UDP_PORT
-f:firewall MARK,是一個數字;
[-s scheduler]:指定集群的調度算法,默認為wlc;
2、管理集群上的RS:增、改、刪;
增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
刪:ipvsadm -d -t|u|f service-address -r server-address
server-address:rip[:port]
選項:
設定lvs類型:
-g: gateway, dr類型
-i: ipip, tun類型
-m: masquerade, nat類型
-w weight:設定權重;
3、清空定義的所有內容:ipvsadm -C
4、查看:
ipvsadm -L|l [options]
–numeric, -n:numeric output of addresses and ports
–exact:expand numbers (display exact values)
–connection, -c:output of current IPVS connections
–stats:output of statistics information
–rate :output of rate information
5、保存和重載:
ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore
七、配置lvs-nat示例
實驗環境:
VS CentOS6.8 interface:vmnet1,橋接網絡 DIP:192.168.40.90 VIP:10.1.154.166
RS1 CentOS6.8 interface:vmnet1 RIP:192.168.40.100
RS2 CentOS6.8 interface:vmnet1 RIP:192.168.40.101
配置步驟:
1、確保RS1、RS2、VS三臺服務器的時間是同步的。
2、在RS1配置IP地址,配置httpd服務,指定默認路由為DIP;RS2上同樣的配置。
3、在VS上開啟端口轉發功能,安裝ipvsadm,配置ipvsadm。
ipvsadm -A -t 10.1.154.166:80 -s rr
ipvsadm -a -t 10.1.154.166 -r 192.168.40.100:80 -m
ipvsadm -a -t 10.1.154.166 -r 192.168.40.101:80 -m
4、其他查看示例
八、負載均衡集群設計要點
1、是否需要會話保持
2、是否需要共享存儲
共享存儲解決方案:NAS、SAN、DS(分布式存儲)
數據同步:rsync(不適用于數據量較大場景)+inotify實現數據同步
九、LVS-DR的實現
1、DR模型中,VR和SR上均需要配置VIP,解決地址沖突的方式有三種:
(1) 在前端網關做靜態綁定;
(2) 在各RS使用arptables;
(3) 在各RS修改內核參數,來限制arp響應和通告的級別;
限制響應級別:arp_ignore
0:默認值,表示可使用本地任意接口上配置的任意地址進行響應;
1: 僅在請求的目標IP配置在本地主機的接收到請求報文接口上時,才給予響應;
限制通告級別:arp_announce
0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
1:盡量避免向非直接連接網絡進行通告;
2:必須避免向非本網絡通告;
2、LVS-DR實驗1:DIP、VIP、RIP屬于同一網絡
a、網絡結構
b、在RS1上的配置:
1)配置內核參數,限制arp響應及通告。
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2)在lo網卡上配置VIP
ifconfig lo:0 192.168.154.200 netmask 255.255.255.255
3)配置主機路由
route add -host 192.168.154.200 lo
4)開啟httpd服務
c、RS2上的配置同RS1
d、在VS上配置:
1)配置VIP
ifconfig eth1:0 192.168.154.200 netmask 255.255.255.255
2)配置ipvsadm
ipvsadm -A -t 192.168.154.200:80 -s wrr
ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.127:80 -g -w 1
ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.128:80 -g -w 2
e、在客戶端上做測試
十、基于FWM配置集群服務
在RS1、RS2上新增mysql服務,將其定義為一個集群。
此時http與mysql集群并不會被當作一個集群服務進行調度,如何實現將多個服務使用同一個集群服務來調度。需要用到FWM
FWM:FireWall Mark
借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度;
配置步驟
1、在防火墻上打標記
iptables -t mangle -A PREROUTING -d 192.168.154.200 -p tcp -m multiport –dports 80,3306 -j MARK –set-mark 11
2、基于標記配置ipvs
ipvsadm -A -f 11 -s wrr
ipvsadm -a -f 11 -r 192.168.154.127 -g -w 1
ipvsadm -a -f 11 -r 192.168.154.128 -g -w 1
十一:LVS持久鏈接(Persistence)
持久連接模板:實現無論使用任何算法,在一定時間之內,實現將來自同一個ip地址的請求始終發往同一個RS。
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
測試
mysql服務連接的也是RS2
port Affinity:
每端口持久:每集群服務單獨定義,并定義其持久性;
每防火墻標記持久:基于防火墻標記定義持久的集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity;
每客戶端持久:基于0端口定義集群服務,即將客戶端對所有應用的請求統統調度至后端主機,而且可使用持久連接進行綁定;
十二:ipvsadm規則的保存與重載
1、保存:建議保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
2、重載:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
考慮:
(1) Director不可用,整個系統將不可用;SPoF單點故障
解決方案:高可用
keepalived
heartbeat/corosync
(2) 某RS不可用時,Director依然會調度請求至此RS;
解決方案:對各RS的健康狀態做檢查,失敗時禁用,成功時啟用;
keepalived
heartbeat/corosync, ldirectord
檢測方式:
(a) 網絡層檢測;ping
(b) 傳輸層檢測,端口探測;
(c) 應用層檢測,請求某關鍵資源;
測試多次,間隔測試,多次失敗,判斷失敗
請求超時時間,請求時間間隔,請求次數。
ok –> failure
failure –> ok
但,director無法完成健康狀態檢測,需要keepalived來配合完成。
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/57004