- 集群的概念
- LVS介紹
- ipvsadm的使用
- 實(shí)現(xiàn)LVS-NAT
- 實(shí)現(xiàn)LVS-DR
- LVS高可用
一、集群的概念
(一)系統(tǒng)擴(kuò)展方式
- Scale UP:向上擴(kuò)展贡茅,增強(qiáng)單機(jī)性能
- Scale Out:向外擴(kuò)展,增加設(shè)備,但需要考慮調(diào)度分配問題
- 集群(Cluster)即是向外擴(kuò)展思路的體現(xiàn)
(二)集群的概念和分類
- Cluster:集群盗忱,為解決某個(gè)特定問題將多臺(tái)計(jì)算機(jī)組合起來形成的單個(gè)系統(tǒng)
(1)Linux Cluster類型
LB(Load Balancing):負(fù)載均衡
-
HA(High Availiablity):高可用
- SPOF(Single Point Of Failure):單點(diǎn)失敗,必須盡可能消滅出現(xiàn)單點(diǎn)失敗的環(huán)節(jié)
- MTBF(MeanTime Between Failure):平均無故障時(shí)間
- MTTR(MeanTime To Restoration/Repair):平均恢復(fù)前時(shí)間羊赵,即故障修復(fù)時(shí)間
- A=MTBF/(MTBF+MTTR)
取值范圍(0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%趟佃,生產(chǎn)環(huán)境要求99.999%以上,即一年內(nèi)故障時(shí)間不超過0.001%(約5分鐘)
HPC(High-performance computing):高性能昧捷,超級(jí)計(jì)算機(jī)
(2)Cluster按照實(shí)現(xiàn)分類
硬件
F5 Big-IP
Citrix Netscaler
A10 A10軟件
lvs:Linux Virtual Server
nginx:支持四層調(diào)度
haproxy:支持四層調(diào)度
(3)Cluster基于工作協(xié)議層次分類
傳輸層(通用):基于IP地址與端口DPORT
LVS:
nginx:stream
haproxy:mode tcp應(yīng)用層(專用):針對(duì)特定協(xié)議闲昭,自定義的請(qǐng)求模型分類
也稱作代理服務(wù)器(proxy server)
http:nginx, httpd, haproxy(mode http), ...
fastcgi:nginx, httpd, ...
mysql:mysql-proxy, ...
(三)負(fù)載均衡下實(shí)現(xiàn)會(huì)話保持
http協(xié)議是無狀態(tài)的,cookie和session機(jī)制實(shí)現(xiàn)會(huì)話保持
在負(fù)載均衡模式下靡挥,相同客戶端的前后連接可能被分配給不同的服務(wù)器提供服務(wù)序矩,需要有相關(guān)技術(shù)解決會(huì)話保持問題
-
三種解決技術(shù):
- session sticky:同一用戶調(diào)度固定服務(wù)器
Source IP:LVS sh算法(對(duì)某一特定服務(wù)而言)
Cookie - session replication:每臺(tái)服務(wù)器擁有全部session
session multicast cluster - session server:專門的session服務(wù)器
Memcached, Redis
- session sticky:同一用戶調(diào)度固定服務(wù)器
二、LVS介紹
(一)LVS
LVS(Linux Virtual Server):負(fù)載調(diào)度器跋破,集成內(nèi)核
工作原理:VS根據(jù)請(qǐng)求報(bào)文的目標(biāo)IP和目標(biāo)協(xié)議及端口將其調(diào)度轉(zhuǎn)發(fā)至某RS簸淀,根據(jù)調(diào)度算法來挑選RS
-
LVS集群類型中的術(shù)語:
- VS:Virtual Server,又稱Director, Dispatcher(調(diào)度器), Load Balancer
- RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)
- CIP:Client IP
- VIP:Virtual server IP毒返,VS外網(wǎng)的IP
- DIP:Director IP租幕,VS內(nèi)網(wǎng)的IP
- RIP:Real server IP
- 訪問流程:CIP <--> VIP == DIP <--> RIP
- 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
(二)LVS-NAT模式
(1)實(shí)現(xiàn)原理:
本質(zhì)是多目標(biāo)IP的DNAT拧簸,通過將請(qǐng)求報(bào)文中的目標(biāo)地址和目標(biāo)端口修改為VS調(diào)度的RS的RIP和PORT實(shí)現(xiàn)轉(zhuǎn)發(fā)
(2)特點(diǎn):
- RIP和DIP建議在同一個(gè)IP網(wǎng)絡(luò)劲绪,且應(yīng)該使用私網(wǎng)地址;RS的網(wǎng)關(guān)要指向DIP
- 請(qǐng)求報(bào)文和響應(yīng)報(bào)文都必須經(jīng)由Director轉(zhuǎn)發(fā),Director易于成為系統(tǒng)瓶頸
- 支持端口映射珠叔,可修改請(qǐng)求報(bào)文的目標(biāo)PORT
- VS必須是Linux系統(tǒng)蝎宇,RS可以是任意OS系統(tǒng)
(三)LVS-DR(Direct Routing)模式
(1)實(shí)現(xiàn)原理:
通過為請(qǐng)求報(bào)文重新封裝一個(gè)MAC首部進(jìn)行轉(zhuǎn)發(fā)弟劲,源MAC是DIP所在的接口的MAC祷安,目標(biāo)MAC是VS調(diào)度的RS的RIP所在接口的MAC地址
(2)特點(diǎn):
- 直接路由,LVS默認(rèn)模式兔乞,應(yīng)用最廣泛
- Director和各RS都配置有VIP
- 源IP/PORT以及目標(biāo)IP/PORT均保持不變
- 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
- RS和Director要在同一個(gè)物理網(wǎng)絡(luò)
- 請(qǐng)求報(bào)文要經(jīng)由Director,但響應(yīng)報(bào)文不經(jīng)由Director淡溯,而由RS直接發(fā)往Client
- 不支持端口映射(端口不能修改)
- RS可使用大多數(shù)OS系統(tǒng)
(3)通過RS目標(biāo)MAC實(shí)現(xiàn)調(diào)度的條件:防止IP地址沖突
有以下三種方法
- Director上靜態(tài)綁定VIP和RS的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
(四)LVS-TUN模式
(1)實(shí)現(xiàn)原理:
不修改請(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)
(2)特點(diǎn):
- DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
- RS的網(wǎng)關(guān)不能,也不可能指向DIP
- 請(qǐng)求報(bào)文要經(jīng)由Director琼了,但響應(yīng)不能經(jīng)由Director
- 不支持端口映射
- RS的OS須支持隧道功能
(五)LVS-FULLNAT模式
(1)實(shí)現(xiàn)原理:
通過同時(shí)修改請(qǐng)求報(bào)文的源IP地址和目標(biāo)IP地址進(jìn)行轉(zhuǎn)發(fā)
CIP --> DIP
VIP --> RIP
(2)特點(diǎn):
- VIP是公網(wǎng)地址逻锐,RIP和DIP是私網(wǎng)地址,且通常不在同一IP網(wǎng)絡(luò)雕薪;因此昧诱,RIP的網(wǎng)關(guān)一般不會(huì)指向DIP
- RS收到的請(qǐng)求報(bào)文源地址是DIP,因此所袁,只需響應(yīng)給DIP鳄哭;但Director還要將其發(fā)往Client
- 請(qǐng)求和響應(yīng)報(bào)文都經(jīng)由Director
- 支持端口映射;
- 注意:此類型kernel默認(rèn)不支持
(六)LVS四種模式異同
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:通過封裝新的MAC首部實(shí)現(xiàn),通過MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā)
lvs-tun:通過在原IP報(bào)文外封裝新IP頭實(shí)現(xiàn)轉(zhuǎn)發(fā)局劲,支持遠(yuǎn)距離通信
(七)ipvs scheduler:調(diào)度算法
- 根據(jù)調(diào)度時(shí)是否考慮各RS當(dāng)前的負(fù)載狀態(tài)勺拣,分為靜態(tài)方法和動(dòng)態(tài)方法
(1)靜態(tài)方法:僅根據(jù)算法本身進(jìn)行調(diào)度
- RR:roundrobin,輪詢
- WRR:Weighted RR鱼填,加權(quán)輪詢
- SH:Source Hashing药有,源地址哈希,將來自于同一個(gè)IP地址的請(qǐng)求始終發(fā)往第一次挑中的RS,從而實(shí)現(xiàn)會(huì)話綁定
- DH:Destination Hashing愤惰,目標(biāo)地址哈希苇经,將發(fā)往同一個(gè)目標(biāo)地址的請(qǐng)求始終轉(zhuǎn)發(fā)至第一次挑中的RS,典型使用場(chǎng)景是正向代理緩存場(chǎng)景中的負(fù)載均衡宦言,如:寬帶運(yùn)營商
(2)動(dòng)態(tài)方法:主要根據(jù)每RS當(dāng)前的負(fù)載狀態(tài)及調(diào)度算法進(jìn)行調(diào)度
- Overhead值較小的RS將被調(diào)度
- LC:least connections扇单,適用于長連接應(yīng)用
Overhead=activeconns*256+inactiveconns - WLC:Weighted LC,默認(rèn)調(diào)度方法
Overhead=(activeconns*256+inactiveconns)/weight - SED:Shortest Expection Delay,初始連接高權(quán)重優(yōu)先
Overhead=(activeconns+1)*256/weight - NQ:Never Queue奠旺,第一輪均勻分配蜘澜,后續(xù)SED
- LBLC:Locality-Based LC,動(dòng)態(tài)的DH算法响疚,使用場(chǎng)景:根據(jù)負(fù)載狀態(tài)實(shí)現(xiàn)正向代理
- LBLCR:LBLC with Replication鄙信,帶復(fù)制功能的LBLC
解決LBLC負(fù)載不均衡問題,從負(fù)載重的復(fù)制到負(fù)載輕的RS
三忿晕、ipvsadm的使用
- ipvsadm:集群服務(wù)管理和集群服務(wù)的RS管理工具
(一)管理集群服務(wù)
- 命令:
- 增装诡、改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] - 刪除
ipvsadm -D -t|u|f service-address
- 增装诡、改
- -t|u|f service-address
- service-address:VIP:PORT
-t:TCP協(xié)議的端口,VIP:TCP_PORT
-u:UDP協(xié)議的端口践盼,VIP:UDP_PORT
-f:firewall MARK鸦采,標(biāo)記,一個(gè)數(shù)字
- service-address:VIP:PORT
- [-s scheduler]:指定集群的調(diào)度算法宏侍,默認(rèn)為wlc
(二)管理集群上的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
- 增赖淤、改
-t|u|f VIP:PORT -r RIP:PORT,省略PORT則為不做端口映射
lvs類型:
-g:gateway谅河,dr類型咱旱,默認(rèn)
-i:ipip,tun類型
-m:masquerade绷耍,nat類型-w weight:權(quán)重
(三)FWM(FireWall Mark)
FWM的功能:分類報(bào)文并基于標(biāo)記定義集群服務(wù)吐限;實(shí)現(xiàn)多個(gè)不同的應(yīng)用使用同一個(gè)集群服務(wù)進(jìn)行調(diào)度
-
實(shí)現(xiàn)方法:
- 在Director主機(jī)打標(biāo)記
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER - 在Director主機(jī)基于標(biāo)記定義集群服務(wù)
ipvsadm -A -f NUMBER [options] - --set-mark NUMBER:NUMBER為16進(jìn)制數(shù)
- 在Director主機(jī)打標(biāo)記
(四)持久連接
session 綁定:對(duì)共享同一組RS的多個(gè)集群服務(wù),需要統(tǒng)一進(jìn)行綁定褂始,lvs sh算法無法實(shí)現(xiàn)
持久連接(lvs persistence)模板:實(shí)現(xiàn)無論使用任何調(diào)度算法诸典,在一段時(shí)間內(nèi)(默認(rèn)360s),能夠?qū)崿F(xiàn)將來自同一個(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ī)肌蜻,必須定義為持久模式
(五)其他ipvsadm命令
- 清空定義的所有內(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 :輸出速率信息 - 查看當(dāng)前內(nèi)存中ipvs規(guī)則:/proc/net/ip_vs
- 查看當(dāng)前內(nèi)存中ipvs連接:/proc/net/ip_vs_conn
(六)保存及重載規(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
四蒋搜、實(shí)現(xiàn)LVS-NAT
(一)設(shè)計(jì)要點(diǎn):
- RIP與DIP在同一IP網(wǎng)絡(luò), RIP的網(wǎng)關(guān)要指向DIP
- 支持端口映射
- Director要打開核心轉(zhuǎn)發(fā)功能
(二)實(shí)現(xiàn)功能:
NAT模型實(shí)現(xiàn)https負(fù)載均衡集群
(三)實(shí)驗(yàn)環(huán)境:
需要4臺(tái)主機(jī)
主機(jī)1:Director(Virtual Server), VIP: 172.18.58.230, DIP: 192.168.136.230
主機(jī)2:Real Server1, RIP1: 192.168.136.229
主機(jī)3:Real Server2, RIP2: 192.168.136.129
主機(jī)4:Client, CIP: 172.168.58.15說明:
172.18.0.0/16網(wǎng)段代表外網(wǎng)篡撵,192.168.136.0/24網(wǎng)段代表內(nèi)網(wǎng)
一般來說Client和VS不再同一網(wǎng)段,中間應(yīng)有多臺(tái)路由器豆挽,本實(shí)驗(yàn)忽略此部分
RS1和RS2提供的服務(wù)應(yīng)是一致的育谬,但為了證明實(shí)驗(yàn)結(jié)果,故意對(duì)返回結(jié)果做了區(qū)分
(四)實(shí)驗(yàn)步驟:
(1)實(shí)驗(yàn)準(zhǔn)備
- 關(guān)閉實(shí)驗(yàn)主機(jī)的iptables, firewalld, selinux服務(wù)
// CentOS 6關(guān)閉iptables
service iptables stop
chkconfig iptables off
// CentOS 7關(guān)閉firewalld
systemctl stop firewalld
systemctl disable firewalld
// 關(guān)閉selinux
vim /etc/sysconfig/selinux
SELINUX=permissive
setenforce 0
- 同步時(shí)間:
ntpdate time_server_ip
(2)準(zhǔn)備RS1, RS2的httpd服務(wù)
vim /var/www/html/index.html
RS1 homepage // RS1上的內(nèi)容
RS2 homepage // RS2上的內(nèi)容
service httpd start
// 測(cè)試httpd服務(wù)
curl 192.168.136.229
curl 192.168.136.129
(3)配置路由
// RS1/2配置默認(rèn)網(wǎng)關(guān)
route add default gw 192.168.136.230
// Client配置默認(rèn)網(wǎng)關(guān)
route add default gw 172.18.58.230
// VS開啟路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
(4)Director上配置LVS-NAT
ipvsadm -A -t 172.18.58.230:80 -s wrr
ipvsadm -a -t 172.18.58.230:80 -r 192.168.136.229:80 -m -w 2
ipvsadm -a -t 172.18.58.229:80 -r 192.168.136.129:80 -m
ipvsadm -Ln
(5)測(cè)試http服務(wù)的lvs-nat模式
for i in {1..10}; do curl 172.18.58.230 ; done
從測(cè)試結(jié)果中看出帮哈,director明顯按照wrr算法膛檀,以RS1:RS2=2:1的比例調(diào)度
(6)實(shí)現(xiàn)httpd加密服務(wù)的lvs-nat模式
- 在RS1上生成自簽名證書
cd /etc/pki/tls/certs
make httpd.crt
// 建立密鑰時(shí)需要輸入密碼,需要對(duì)密鑰解密
openssl rsa -in /etc/pki/tls/certs/httpd.key -out /etc/pki/tls/certs/httpd2.key
mv httpd2.key httpd.crt /etc/httpd/conf.d/
cd /etc/httpd/conf.d
mv httpd2.key httpd.key
- 復(fù)制證書和密鑰到RS2上但汞,必須保證RS上的證書和密鑰是同一份
cd /etc/httpd/conf.d
scp httpd* 192.168.136.129:/etc/httpd/conf.d/
- 安裝mod_ssl并修改RS1, RS2上的httpd配置文件
yum install mod_ssl
vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/app/website"
SSLCertificateFile /etc/httpd/conf.d/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key
- 在RS1, RS2上建立相應(yīng)網(wǎng)頁文件
mkdir -p /app/website
echo "RS1 encrypted homepage" > /app/website/index.html // RS1上的內(nèi)容
echo "RS2 encrypted homepage" > /app/website/index.html // RS2上的內(nèi)容
- 在RS1, RS2上重啟并測(cè)試服務(wù)
service httpd restart
curl -k https://192.168.136.229 // 在RS1本機(jī)測(cè)試https連接
curl -k https://192.168.136.129 // 在RS2本機(jī)測(cè)試https連接
- 在Director上配置LVS-NAT
ipvsadm -A -t 172.18.58.230:443 -s wrr
ipvsadm -a -t 172.18.58.230:443 -r 192.168.136.229:443 -m -w 2
ipvsadm -a -t 172.18.58.230:443 -r 192.168.136.129:443 -m
- 在Client上測(cè)試https服務(wù)
for i in {1..10}; do curl -k https://172.18.58.230 ; done
五宿刮、實(shí)現(xiàn)LVS-DR
(一)DR模型中互站,各主機(jī)上均需要配置VIP私蕾,解決地址沖突的方式有三種:
- 在前端網(wǎng)關(guān)做靜態(tài)綁定
- 在各RS使用arptables
- 在各RS修改內(nèi)核參數(shù),來限制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)行通告
- 限制響應(yīng)級(jí)別:arp_ignore
(二)實(shí)驗(yàn)功能:
DR模型實(shí)現(xiàn)https負(fù)載均衡集群
(三)實(shí)驗(yàn)環(huán)境:
需要5臺(tái)主機(jī):
主機(jī)1:Router, IP1: 172.18.58.130, IP2: 192.168.136.130
主機(jī)2:Director(Virtual Server), VIP: 192.168.136.230, DIP: 192.168.136.30
主機(jī)3:Real Server1, RIP: 192.168.136.229
主機(jī)4:Real Server2, RIP: 192.168.136.129
主機(jī)5:Client, CIP: 172.18.58.15說明:
RS1和RS2提供的服務(wù)應(yīng)是一致的,但為了證明實(shí)驗(yàn)結(jié)果,故意對(duì)返回結(jié)果做了區(qū)分
(四)實(shí)驗(yàn)步驟:
(1)實(shí)驗(yàn)準(zhǔn)備
- 關(guān)閉實(shí)驗(yàn)主機(jī)的iptables, firewalld, selinux服務(wù)
// CentOS 6關(guān)閉iptables
service iptables stop
chkconfig iptables off
// CentOS 7關(guān)閉firewalld
systemctl stop firewalld
systemctl disable firewalld
// 關(guān)閉selinux
vim /etc/sysconfig/selinux
SELINUX=permissive
setenforce 0
- 同步時(shí)間:
ntpdate time_server_ip
(2)準(zhǔn)備RS1, RS2的httpd服務(wù)
vim /var/www/html/index.html
RS1 homepage LVS-DR // RS1上的內(nèi)容
RS2 homepage LVS-DR // RS2上的內(nèi)容
service httpd start
// 測(cè)試httpd服務(wù)
curl 192.168.136.229
curl 192.168.136.129
(3)配置路由
// RS1/2配置默認(rèn)網(wǎng)關(guān)
route add default gw 192.168.136.130
// VS配置默認(rèn)網(wǎng)關(guān)
route add default gw 192.168.136.130
// Client配置默認(rèn)網(wǎng)關(guān)
route add default gw 172.18.58.130
// Router開啟路由功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
(4)RS配置
// 限制arp響應(yīng)和通告的級(jí)別
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
// 將VIP綁定到lo網(wǎng)卡上
ip a a 192.168.136.230 dev lo
(5)Director上配置LVS-DR
// 將DIP綁定到VIP所在的網(wǎng)卡
ip a a 192.168.136.30/24 dev ens37
// 配置LVS-DR
ipvsadm -A -t 192.168.136.230:80 -s wrr
ipvsadm -a -t 192.168.136.230:80 -r 192.168.136.229:80 -g -w 2
ipvsadm -a -t 192.168.136.230:80 -r 192.168.136.129:80 -g
ipvsadm -Ln
(6)測(cè)試http服務(wù)的lvs-nat模式
for i in {1..10}; do curl 192.168.136.230 ; done
從測(cè)試結(jié)果中看出竖慧,director明顯按照wrr算法,以RS1:RS2=2:1的比例調(diào)度
(7)實(shí)現(xiàn)httpd加密服務(wù)的lvs-nat模式
- 在RS1上生成自簽名證書
cd /etc/pki/tls/certs
make httpd.crt
// 建立密鑰時(shí)需要輸入密碼限佩,需要對(duì)密鑰解密
openssl rsa -in /etc/pki/tls/certs/httpd.key -out /etc/pki/tls/certs/httpd2.key
mv httpd2.key httpd.crt /etc/httpd/conf.d/
cd /etc/httpd/conf.d
mv httpd2.key httpd.key
- 復(fù)制證書和密鑰到RS2上熊尉,必須保證RS上的證書和密鑰是同一份
cd /etc/httpd/conf.d
scp httpd* 192.168.136.129:/etc/httpd/conf.d/
- 安裝mod_ssl并修改RS1, RS2上的httpd配置文件
yum install mod_ssl
vim /etc/httpd/conf.d/ssl.conf
DocumentRoot "/app/website"
SSLCertificateFile /etc/httpd/conf.d/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key
- 在RS1, RS2上建立相應(yīng)網(wǎng)頁文件
mkdir -p /app/website
echo "RS1 encrypted homepage LVS-DR" > /app/website/index.html // RS1上的內(nèi)容
echo "RS2 encrypted homepage LVS-DR" > /app/website/index.html // RS2上的內(nèi)容
- 在RS1, RS2上重啟并測(cè)試服務(wù)
service httpd restart
curl -k https://192.168.136.229 // 在RS1本機(jī)測(cè)試https連接
curl -k https://192.168.136.129 // 在RS2本機(jī)測(cè)試https連接
- 在Director上配置LVS-NAT
ipvsadm -A -t 192.168.136.230:443 -s wrr
ipvsadm -a -t 192.168.136.230:443 -r 192.168.136.229:443 -w 2
ipvsadm -a -t 192.168.136.230:443 -r 192.168.136.129:443
- 在Client上測(cè)試https服務(wù)
for i in {1..10}; do curl -k https://192.168.136.230 ; done
(五)實(shí)驗(yàn)進(jìn)階1:使用FWM將http和https服務(wù)統(tǒng)一調(diào)度
在Director上將http和https服務(wù)統(tǒng)一打成一個(gè)標(biāo)簽
iptables -t mangle -A PREROUTING -d 192.168.136.230 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10
在Director上重新配置LVS-DR
ipvsadm -C
ipvsadm -A -f 10 -s wrr
ipvsadm -a -f 10 -r 192.168.136.229 -g -w 2
ipvsadm -a -f 10 -r 192.168.136.129 -g
- 在Client上測(cè)試
for i in {1..10}; do curl 192.168.136.230; curl -k https://192.168.136.230; done
(六)實(shí)驗(yàn)進(jìn)階2:實(shí)現(xiàn)所有調(diào)度算法都可以會(huì)話綁定,綁定時(shí)間120s
- 在Director上重新配置LVS-DR
ipvsadm -C
ipvsadm -A -f 10 -s wrr -p 120
ipvsadm -a -f 10 -r 192.168.136.229 -g -w 2
ipvsadm -a -f 10 -r 192.168.136.129 -g
- 在Client上測(cè)試
for i in {1..10}; do curl 192.168.136.230; curl -k https://192.168.136.230; done
六锻狗、LVS高可用
(1)Director不可用满力,整個(gè)系統(tǒng)將不可用,SPoF(Single Point of Failure)
- 解決方案:高可用
- 相關(guān)技術(shù):keepalived heartbeat/corosync
(2)某RS不可用時(shí)轻纪,Director依然會(huì)調(diào)度請(qǐng)求至此RS
- 解決方案:由Director對(duì)各RS健康狀態(tài)進(jìn)行檢查油额,失敗時(shí)禁用,成功時(shí)啟用
- 相關(guān)技術(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
(3)通過ldirectord管理LVS崇众,實(shí)現(xiàn)當(dāng)某RS不可用時(shí)LVS自動(dòng)切換至其他RS
VS上安裝ldirectord
yum install ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
VS上修改配置文件
cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
quiescent=no
virtual=192.168.136.230:80
real=192.168.136.229:80 gate 2
real=192.168.136.129:80 gate 1
fallback=127.0.0.1:80 gate // sorry server
service=http
scheduler=wrr
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
receive="homepage"
ipvsadm -C // ldirectord服務(wù)啟動(dòng)后接管ipvsadm對(duì)LVS的管理掂僵,提前清空設(shè)置
systemctl start ldirectord
- VS上配置sorry server頁面
yum intall httpd
vim /var/www/html/index.html
Sorry, wait a moment.
systemctl httpd start
-
Client上測(cè)試
for i in {1..10}; do curl 192.168.136.230; done
- VS按照權(quán)重調(diào)度
- 關(guān)閉RS1的httpd服務(wù)后,VS自動(dòng)都調(diào)度至RS2
-
關(guān)閉RS2后顷歌,RS全部無法連接锰蓬,VS自動(dòng)調(diào)度到sorry server
初始狀態(tài),關(guān)閉RS1的httpd服務(wù)后衙吩,關(guān)閉RS2的httpd服務(wù)互妓,這三個(gè)狀態(tài)下ldirectord服務(wù)自動(dòng)修改調(diào)度設(shè)置,無需人工干預(yù)