1.Cluster(集群)概念
(1)系統(tǒng)擴(kuò)展方式:
Scale UP:向上擴(kuò)展,增強(qiáng)
Scale Out:向外擴(kuò)展,增加設(shè)備,調(diào)度分配問(wèn)題,Cluster
? Cluster:集群,為解決某個(gè)特定問(wèn)題將多臺(tái)計(jì)算機(jī)組合起來(lái)形成的單個(gè)系統(tǒng)
(2)Linux Cluster類型:
? LB:Load Balancing,負(fù)載均衡
? HA:High Availiablity,高可用,SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均無(wú)故障時(shí)間
MTTR:Mean Time To Restoration( repair)平均恢復(fù)前時(shí)間
A=MTBF/(MTBF+MTTR)
(0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
? HPC:High-performance computing,高性能 www.top500.org
(3)分布式系統(tǒng):
分布式存儲(chǔ):云盤
分布式計(jì)算:hadoop,Spark
2.Cluster分類
(1) LB Cluster的實(shí)現(xiàn)
? 硬件
F5 Big-IP
Citrix Netscaler
A10 A10
**? 軟件
lvs:Linux Virtual Server
nginx:支持四層調(diào)度
haproxy:支持四層調(diào)度
ats:apache traffic server,yahoo捐助
perlbal:Perl 編寫
pound
(2)基于工作的協(xié)議層次劃分:
? 傳輸層(通用):DPORT
LVS:(Linux virtual server)
nginx:stream
haproxy:mode tcp
? 應(yīng)用層(專用):針對(duì)特定協(xié)議,自定義的請(qǐng)求模型分類
proxy server:
http:nginx, httpd, haproxy(mode http), ...
fastcgi:nginx, httpd, ...
mysql:mysql-proxy, ...
3.Cluster相關(guān)
(1)會(huì)話保持:負(fù)載均衡
(1) session sticky:同一用戶調(diào)度固定服務(wù)器
Source IP:LVS sh算法(對(duì)某一特定服務(wù)而言)
Cookie
(2) session replication:每臺(tái)服務(wù)器擁有全部session
session multicast cluster
(3) session server:專門的session服務(wù)器
Memcached,Redis
(2)HA集群實(shí)現(xiàn)方案
keepalived:vrrp協(xié)議
ais:應(yīng)用接口規(guī)范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker
4.LVS介紹
(1)LVS:Linux Virtual Server,負(fù)載調(diào)度器,集成內(nèi)核 章文嵩 阿里
官網(wǎng):http://www.linuxvirtualserver.org/
VS: Virtual Server,負(fù)責(zé)調(diào)度
RS: Real Server,負(fù)責(zé)真正提供服務(wù)
L4:四層路由器或交換機(jī)
(2)工作原理:VS根據(jù)請(qǐng)求報(bào)文的目標(biāo)IP和目標(biāo)協(xié)議及端口將其調(diào)度轉(zhuǎn)發(fā)至某RS,根據(jù)調(diào)度算法來(lái)挑選RS
(3)iptables/netfilter:
iptables:用戶空間的管理工具
netfilter:內(nèi)核空間上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING
DNAT:目標(biāo)地址轉(zhuǎn)換; PREROUTING
(4)LVS集群體系結(jié)構(gòu)
5.LVS概念
? lvs集群類型中的術(shù)語(yǔ):
? VS:Virtual Server, Director, Dispatcher(調(diào)度器)
Load Balancer
? RS:Real Server(lvs), upstream server(nginx)
backend server(haproxy)
? CIP:Client IP
? VIP: Virtual serve IP VS外網(wǎng)的IP
? DIP: Director IP VS內(nèi)網(wǎng)的IP
? RIP: Real server IP
? 訪問(wèn)流程:CIP <--> VIP == DIP <--> RIP
6.lvs集群的類型
(1)lvs: ipvsadm/ipvs
ipvsadm:用戶空間的命令行工具,規(guī)則管理器
用于管理集群服務(wù)及RealServer
ipvs:工作于內(nèi)核空間netfilter的INPUT鉤子上的框架
(2)lvs集群的類型:
lvs-nat:修改請(qǐng)求報(bào)文的目標(biāo)IP,多目標(biāo)IP的DNAT
lvs-dr:操縱封裝新的MAC地址
lvs-tun:在原請(qǐng)求IP報(bào)文之外新加一個(gè)IP首部
lvs-fullnat:修改請(qǐng)求報(bào)文的源和目標(biāo)IP
7.lvs-nat模式
本質(zhì)是多目標(biāo)IP的DNAT,通過(guò)將請(qǐng)求報(bào)文中的目標(biāo)地址和目標(biāo)端口修改為某挑出的RS的RIP和PORT實(shí)現(xiàn)轉(zhuǎn)發(fā)
(1)RIP和DIP必須在同一個(gè)IP網(wǎng)絡(luò),且應(yīng)該使用私網(wǎng)地址;RS的網(wǎng)關(guān)要指向DIP
(2)請(qǐng)求報(bào)文和響應(yīng)報(bào)文都必須經(jīng)由Director轉(zhuǎn)發(fā),Director易于成為系統(tǒng)瓶頸
(3)支持端口映射,可修改請(qǐng)求報(bào)文的目標(biāo)PORT
(4)VS必須是Linux系統(tǒng),RS可以是任意OS系統(tǒng)VS/NAT的體系結(jié)構(gòu)
Paste_Image.pngNAT模式IP包調(diào)度過(guò)程
Paste_Image.pngNAT模式
Paste_Image.png
8.LVS-DR模式
? LVS-DR:Direct Routing,直接路由,LVS默認(rèn)模式,應(yīng)用最廣泛
,通過(guò)為請(qǐng)求報(bào)文重新封裝一個(gè)MAC首部進(jìn)行轉(zhuǎn)發(fā),源MAC是DIP
所在的接口的MAC,目標(biāo)MAC是某挑選出的RS的RIP所在接口的
MAC地址;源IP/PORT,以及目標(biāo)IP/PORT均保持不變
? Director和各RS都配置有VIP
(1) 確保前端路由器將目標(biāo)IP為VIP的請(qǐng)求報(bào)文發(fā)往Director
? 在前端網(wǎng)關(guān)做靜態(tài)綁定VIP和Director的MAC地址
? 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
? 在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級(jí)別
arp_announce
arp_ignore
(2) RS的RIP可以使用私網(wǎng)地址,也可以是公網(wǎng)地址;RIP與DIP在同一IP網(wǎng)絡(luò);RIP網(wǎng)關(guān)不能指向DIP,以確保響應(yīng)報(bào)文不會(huì)經(jīng)由Director
(3) RS和Director要在同一個(gè)物理網(wǎng)絡(luò)
(4) 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文不經(jīng)由Director,而由RS直接發(fā)往Client
(5) 不支持端口映射(端口不能修?。?/h5>
(6) RS可使用大多數(shù)OS系統(tǒng)
VS/DR體系結(jié)構(gòu)
Paste_Image.png
DR模式IP包調(diào)度過(guò)程
Paste_Image.png
DR模式
Paste_Image.png
9.lvs-tun模式
? lvs-tun:
轉(zhuǎn)發(fā)方式:不修改請(qǐng)求報(bào)文的IP首部(源IP為CIP,目標(biāo)IP為
VIP),而在原IP報(bào)文之外再封裝一個(gè)IP首部(源IP是DIP,目
標(biāo)IP是RIP),將報(bào)文發(fā)往挑選出的目標(biāo)RS;RS直接響應(yīng)給客
戶端(源IP是VIP,目標(biāo)IP是CIP)
(1) DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
(2) RS的網(wǎng)關(guān)不能,也不可能指向DIP
(3) 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director
(4) 不支持端口映射
(5) RS的OS須支持隧道功能
VS/TUN體系結(jié)構(gòu)
Paste_Image.png
TUN模式IP包調(diào)度過(guò)程
Paste_Image.png
10.lvs-fullnat模式
? lvs-fullnat:通過(guò)同時(shí)修改請(qǐng)求報(bào)文的源IP地址和目標(biāo)IP地
址進(jìn)行轉(zhuǎn)發(fā)
CIP --> DIP
VIP --> RIP
(1) VIP是公網(wǎng)地址,RIP和DIP是私網(wǎng)地址,且通常不在同一IP網(wǎng)絡(luò);因此,RIP的網(wǎng)關(guān)一般不會(huì)指向DIP
(2) RS收到的請(qǐng)求報(bào)文源地址是DIP,因此,只需響應(yīng)給DIP;但Director還要將其往Client
(3) 請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
(4) 支持端口映射;
注意:此類型kernel默認(rèn)不支持
11.LVS工作模式總結(jié)
Paste_Image.png
? lvs-nat與lvs-fullnat:請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
lvs-nat:RIP的網(wǎng)關(guān)要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網(wǎng)絡(luò),但要能通信
? lvs-dr與lvs-tun:請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文由RS直接發(fā)往Client
lvs-dr:通過(guò)封裝新的MAC首部實(shí)現(xiàn),通過(guò)MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun:通過(guò)在原IP報(bào)文外封裝新IP頭實(shí)現(xiàn)轉(zhuǎn)發(fā),支持遠(yuǎn)距離通信
12.ipvs scheduler
? ipvs scheduler:
? 根據(jù)其調(diào)度時(shí)是否考慮各RS當(dāng)前的負(fù)載狀態(tài)
兩種:靜態(tài)方法和動(dòng)態(tài)方法
(1)靜態(tài)方法:僅根據(jù)算法本身進(jìn)行調(diào)度
1、RR:roundrobin,輪詢
2、WRR:Weighted RR,加權(quán)輪詢
3、SH:Source Hashing,實(shí)現(xiàn)session sticky,源IP地址hash;將來(lái)自于同一個(gè)IP地址的請(qǐng)求始終發(fā)往第一次挑中的RS,從而實(shí)現(xiàn)會(huì)話綁定
4、DH:Destination Hashing;目標(biāo)地址哈希,將發(fā)往同一
個(gè)目標(biāo)地址的請(qǐng)求始終轉(zhuǎn)發(fā)至第一次挑中的RS,典型使用場(chǎng)景
是正向代理緩存場(chǎng)景中的負(fù)載均衡,如:寬帶運(yùn)營(yíng)商
(2)動(dòng)態(tài)方法:主要根據(jù)每RS當(dāng)前的負(fù)載狀態(tài)及調(diào)度算法進(jìn)行調(diào)度Overhead=value 較小的RS將被調(diào)度
1、LC:least connections 適用于長(zhǎng)連接應(yīng)用
Overhead=activeconns256+inactiveconns
2、WLC:Weighted LC,默認(rèn)調(diào)度方法
Overhead=(activeconns256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始連接高權(quán)重優(yōu)先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一輪均勻分配,后續(xù)SED
5、LBLC:Locality-Based LC,動(dòng)態(tài)的DH算法,使用場(chǎng)景:
根據(jù)負(fù)載狀態(tài)實(shí)現(xiàn)正向代理
6、LBLCR:LBLC with Replication,帶復(fù)制功能的LBLC
解決LBLC負(fù)載不均衡問(wèn)題,從負(fù)載重的復(fù)制到負(fù)載輕的RS
13.ipvs
? ipvsadm/ipvs:
? ipvs:
grep -i -C 10 "ipvs" /boot/config-VERSIONRELEASE.x86_64
支持的協(xié)議:TCP, UDP, AH, ESP, AH_ESP, SCTP
? ipvs集群:
管理集群服務(wù)
管理服務(wù)上的RS
14.ipvsadm包構(gòu)成
? ipvsadm:
? 程序包:ipvsadm
? Unit File: ipvsadm.service
? 主程序:/usr/sbin/ipvsadm
? 規(guī)則保存工具:/usr/sbin/ipvsadm-save
? 規(guī)則重載工具:/usr/sbin/ipvsadm-restore
? 配置文件:/etc/sysconfig/ipvsadm-config
15.ipvsadm命令
(1)核心功能:
VS/DR體系結(jié)構(gòu)
DR模式IP包調(diào)度過(guò)程
DR模式
? lvs-tun:
轉(zhuǎn)發(fā)方式:不修改請(qǐng)求報(bào)文的IP首部(源IP為CIP,目標(biāo)IP為
VIP),而在原IP報(bào)文之外再封裝一個(gè)IP首部(源IP是DIP,目
標(biāo)IP是RIP),將報(bào)文發(fā)往挑選出的目標(biāo)RS;RS直接響應(yīng)給客
戶端(源IP是VIP,目標(biāo)IP是CIP)
(1) DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
(2) RS的網(wǎng)關(guān)不能,也不可能指向DIP
(3) 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)不能經(jīng)由Director
(4) 不支持端口映射
(5) RS的OS須支持隧道功能
VS/TUN體系結(jié)構(gòu)
TUN模式IP包調(diào)度過(guò)程
? lvs-fullnat:通過(guò)同時(shí)修改請(qǐng)求報(bào)文的源IP地址和目標(biāo)IP地
址進(jìn)行轉(zhuǎn)發(fā)
CIP --> DIP
VIP --> RIP
(1) VIP是公網(wǎng)地址,RIP和DIP是私網(wǎng)地址,且通常不在同一IP網(wǎng)絡(luò);因此,RIP的網(wǎng)關(guān)一般不會(huì)指向DIP
(2) RS收到的請(qǐng)求報(bào)文源地址是DIP,因此,只需響應(yīng)給DIP;但Director還要將其往Client
(3) 請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
(4) 支持端口映射;
注意:此類型kernel默認(rèn)不支持
? lvs-nat與lvs-fullnat:請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
lvs-nat:RIP的網(wǎng)關(guān)要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網(wǎng)絡(luò),但要能通信
? lvs-dr與lvs-tun:請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文由RS直接發(fā)往Client
lvs-dr:通過(guò)封裝新的MAC首部實(shí)現(xiàn),通過(guò)MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun:通過(guò)在原IP報(bào)文外封裝新IP頭實(shí)現(xiàn)轉(zhuǎn)發(fā),支持遠(yuǎn)距離通信
? ipvs scheduler:
? 根據(jù)其調(diào)度時(shí)是否考慮各RS當(dāng)前的負(fù)載狀態(tài)
兩種:靜態(tài)方法和動(dòng)態(tài)方法
1、RR:roundrobin,輪詢
2、WRR:Weighted RR,加權(quán)輪詢
3、SH:Source Hashing,實(shí)現(xiàn)session sticky,源IP地址hash;將來(lái)自于同一個(gè)IP地址的請(qǐng)求始終發(fā)往第一次挑中的RS,從而實(shí)現(xiàn)會(huì)話綁定
4、DH:Destination Hashing;目標(biāo)地址哈希,將發(fā)往同一
個(gè)目標(biāo)地址的請(qǐng)求始終轉(zhuǎn)發(fā)至第一次挑中的RS,典型使用場(chǎng)景
是正向代理緩存場(chǎng)景中的負(fù)載均衡,如:寬帶運(yùn)營(yíng)商
1、LC:least connections 適用于長(zhǎng)連接應(yīng)用
Overhead=activeconns256+inactiveconns
2、WLC:Weighted LC,默認(rèn)調(diào)度方法
Overhead=(activeconns256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始連接高權(quán)重優(yōu)先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一輪均勻分配,后續(xù)SED
5、LBLC:Locality-Based LC,動(dòng)態(tài)的DH算法,使用場(chǎng)景:
根據(jù)負(fù)載狀態(tài)實(shí)現(xiàn)正向代理
6、LBLCR:LBLC with Replication,帶復(fù)制功能的LBLC
解決LBLC負(fù)載不均衡問(wèn)題,從負(fù)載重的復(fù)制到負(fù)載輕的RS
? ipvsadm/ipvs:
? ipvs:
grep -i -C 10 "ipvs" /boot/config-VERSIONRELEASE.x86_64
支持的協(xié)議:TCP, UDP, AH, ESP, AH_ESP, SCTP
? ipvs集群:
管理集群服務(wù)
管理服務(wù)上的RS
? ipvsadm:
? 程序包:ipvsadm
? Unit File: ipvsadm.service
? 主程序:/usr/sbin/ipvsadm
? 規(guī)則保存工具:/usr/sbin/ipvsadm-save
? 規(guī)則重載工具:/usr/sbin/ipvsadm-restore
? 配置文件:/etc/sysconfig/ipvsadm-config
集群服務(wù)管理:增、刪、改
集群服務(wù)的RS管理:增、刪、改
查看
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
[-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address 刪除
ipvsadm –C 清空
ipvsadm –R 重載
ipvsadm -S [-n] 保存
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
(2)管理集群服務(wù):增、改、刪
? 增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
? 刪除:
ipvsadm -D -t|u|f service-address
? service-address:
-t|u|f:
-t: TCP協(xié)議的端口,VIP:TCP_PORT
-u: TCP協(xié)議的端口,VIP:UDP_PORT
-f:firewall MARK,標(biāo)記,一個(gè)數(shù)字
? [-s scheduler]:指定集群的調(diào)度算法,默認(rèn)為wlc
(3)管理集群上的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 serveraddress
? server-address:
rip[:port] 如省略port,不作端口映射
? 選項(xiàng):
lvs類型:
-g: gateway, dr類型,默認(rèn)
-i: ipip, tun類型
-m: masquerade, nat類型
-w weight:權(quán)重
? 清空定義的所有內(nèi)容:ipvsadm –C
? 清空計(jì)數(shù)器:ipvsadm -Z [-t|u|f service-address]
? 查看:ipvsadm -L|l [options]
--numeric, -n:以數(shù)字形式輸出地址和端口號(hào)
--exact:擴(kuò)展信息,精確值
--connection,-c:當(dāng)前IPVS連接輸出
--stats:統(tǒng)計(jì)信息
--rate :輸出速率信息
? ipvs規(guī)則: /proc/net/ip_vs
? ipvs連接:/proc/net/ip_vs_conn
(4)保存及重載規(guī)則
? 保存:建議保存至/etc/sysconfig/ipvsadm
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service
? 重載:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
16.LVS:負(fù)載均衡集群設(shè)計(jì)時(shí)要注意的問(wèn)題
(1) 是否需要會(huì)話保持
(2) 是否需要共享存儲(chǔ)
共享存儲(chǔ):NAS, SAN, DS(分布式存儲(chǔ))
數(shù)據(jù)同步:
lvs-nat:
設(shè)計(jì)要點(diǎn):
(1) RIP與DIP在同一IP網(wǎng)絡(luò), RIP的網(wǎng)關(guān)要指向DIP
(2) 支持端口映射
(3) Director要打開(kāi)核心轉(zhuǎn)發(fā)功能
17.LVS-DR
? dr模型中,各主機(jī)上均需要配置VIP,解決地址沖突的方式有三種:
(1) 在前端網(wǎng)關(guān)做靜態(tài)綁定
(2) 在各RS使用arptables
(3) 在各RS修改內(nèi)核參數(shù),來(lái)限制arp響應(yīng)和通告的級(jí)別
? 限制響應(yīng)級(jí)別:arp_ignore
0:默認(rèn)值,表示可使用本地任意接口上配置的任意地址進(jìn)行響應(yīng)
1: 僅在請(qǐng)求的目標(biāo)IP配置在本地主機(jī)的接收到請(qǐng)求報(bào)文的接口上時(shí),才給予響應(yīng)
? 限制通告級(jí)別:arp_announce
0:默認(rèn)值,把本機(jī)所有接口的所有信息向每個(gè)接口的網(wǎng)絡(luò)進(jìn)行通告
1:盡量避免將接口信息向非直接連接網(wǎng)絡(luò)進(jìn)行通告
2:必須避免將接口信息向非本網(wǎng)絡(luò)進(jìn)行通告
RS的預(yù)配置腳本
#!/bin/bash
vip=192.168.0.100
mask='255.255.255.255‘
dev=lo:1
case $1 in
start)
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 $dev $vip netmask $mask broadcast $vip up
route add
-host $vip dev $dev
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
VS的配置腳本
#!/bin/bash
vip='192.168.0.100'
iface='eth0:1'
mask='255.255.255.255'
port='80'
rs1='192.168.0.101'
rs2='192.168.0.102'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm - C
ifconfig $iface down
;;
*)
echo "Usage $(basename $0) start|stop“;exit 1
;;
esac
18.FireWall Mark
? FWM:FireWall Mark
? MARK target 可用于給特定的報(bào)文打標(biāo)記
--set-mark value
其中:value 為十六進(jìn)制數(shù)字
? 借助于防火墻標(biāo)記來(lái)分類報(bào)文,而后基于標(biāo)記定義集群服務(wù);可將多個(gè)不同的應(yīng)用使用同一個(gè)集群服務(wù)進(jìn)行調(diào)度
? 實(shí)現(xiàn)方法:
(1)在Director主機(jī)打標(biāo)記:
iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
(2)在Director主機(jī)基于標(biāo)記定義集群服務(wù):
ipvsadm -A -f NUMBER [options]
19.持久連接
? session 綁定:對(duì)共享同一組RS的多個(gè)集群服務(wù),需要統(tǒng)一進(jìn)行綁定,lvs sh算法無(wú)法實(shí)現(xiàn)
? 持久連接( lvs persistence )模板:實(shí)現(xiàn)無(wú)論使用任何調(diào)度算法,在一段時(shí)間內(nèi)(默認(rèn)360s ),能夠?qū)崿F(xiàn)將來(lái)自同一個(gè)地址的請(qǐng)求始終發(fā)往同一個(gè)RS
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
持久連接實(shí)現(xiàn)方式:
? 每端口持久(PPC):每個(gè)端口對(duì)應(yīng)定義為一個(gè)集群服務(wù),每集群服務(wù)單獨(dú)調(diào)度
? 每防火墻標(biāo)記持久(PFWMC):基于防火墻標(biāo)記定義集群服務(wù);可實(shí)現(xiàn)將多個(gè)端口上應(yīng)用統(tǒng)一調(diào)度,即所謂的port Affinity
? 每客戶端持久(PCC):基于0端口(表示所有服務(wù))定義集群服務(wù),即將客戶端對(duì)所有應(yīng)用的請(qǐng)求都調(diào)度至后端主機(jī),必須定義為持久模式
20.LVS高可用性
? 1 Director不可用,整個(gè)系統(tǒng)將不可用;SPoF Single Point of Failure
解決方案:高可用
keepalived heartbeat/corosync
? 2 某RS不可用時(shí),Director依然會(huì)調(diào)度請(qǐng)求至此RS
解決方案: 由Director對(duì)各RS健康狀態(tài)進(jìn)行檢查,失敗時(shí)禁用,成功時(shí)啟用
keepalived heartbeat/corosync, ldirectord
檢測(cè)方式:
(a) 網(wǎng)絡(luò)層檢測(cè),icmp
(b) 傳輸層檢測(cè),端口探測(cè)
(c) 應(yīng)用層檢測(cè),請(qǐng)求某關(guān)鍵資源
RS全不用時(shí):back server, sorry server
21.ldirectord
? ldirectord:監(jiān)控和控制LVS守護(hù)進(jìn)程,可管理LVS規(guī)則
? 包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
? 文件:
/etc/ha.d/ldirectord.cf 主配置文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版
/usr/lib/systemd/system/ldirectord.service 服務(wù)
/usr/sbin/ldirectord 主程序
/var/log/ldirectord.log 日志
/var/run/ldirectord.ldirectord.pid pid文件
Ldirectord配置文件示例
checktimeout=3
checkinterval=1
autoreload=yes
logfile=“/var/log/ldirectord.log“ #日志文件
quiescent=no #down時(shí)yes權(quán)重為0,no為刪除
virtual=5 #指定VS的FWM或IP:port
real=172.16.0.7:80 gate 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate #sorry server
service=http
scheduler=wrr
checktype=negotiate
checkport=80
request="index.html"
receive=“Test Ldirectord"