20171020 LVS

  • 集群的概念
  • 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

二、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ù)字
  • [-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ù)

(四)持久連接

  • 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)行通告

(二)實(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ù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冯勉,隨后出現(xiàn)的幾起案子澈蚌,更是在濱河造成了極大的恐慌,老刑警劉巖灼狰,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宛瞄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡交胚,警方通過查閱死者的電腦和手機(jī)份汗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝴簇,“玉大人杯活,你說我怎么就攤上這事“敬剩” “怎么了旁钧?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長互拾。 經(jīng)常有香客問我歪今,道長,這世上最難降的妖魔是什么颜矿? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任寄猩,我火速辦了婚禮,結(jié)果婚禮上骑疆,老公的妹妹穿的比我還像新娘田篇。我一直安慰自己,他們只是感情好封断,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布斯辰。 她就那樣靜靜地躺著,像睡著了一般坡疼。 火紅的嫁衣襯著肌膚如雪彬呻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天柄瑰,我揣著相機(jī)與錄音闸氮,去河邊找鬼。 笑死教沾,一個(gè)胖子當(dāng)著我的面吹牛蒲跨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播授翻,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼或悲,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼孙咪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巡语,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤翎蹈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后男公,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤堪,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年枢赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澄阳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡踏拜,死狀恐怖碎赢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情执隧,我是刑警寧澤揩抡,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布户侥,位于F島的核電站镀琉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蕊唐。R本人自食惡果不足惜屋摔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望替梨。 院中可真熱鬧钓试,春花似錦、人聲如沸副瀑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糠睡。三九已至挽鞠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狈孔,已是汗流浹背信认。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留均抽,地道東北人嫁赏。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像油挥,于是被迫代替她去往敵國和親潦蝇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子款熬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 負(fù)載均衡集群是 load balance 集群的簡寫,翻譯成中文就是負(fù)載均衡集群攘乒。常用的負(fù)載均衡開源軟件有ngin...
    jiangmo閱讀 1,323評(píng)論 0 1
  • 本文部分觀點(diǎn)圖片采用于:http://chenx1242.blog.51cto.com 隨著智能機(jī)的逐漸普及华烟,大量...
    BossHuang閱讀 3,157評(píng)論 0 16
  • 1.Cluster(集群)概念 (1)系統(tǒng)擴(kuò)展方式: Scale UP:向上擴(kuò)展,增強(qiáng)Scale Out:向外擴(kuò)展...
    尛尛大尹閱讀 1,104評(píng)論 0 4
  • 1、lvs-tun模式 轉(zhuǎn)發(fā)方式:不修改請(qǐng)求報(bào)文的IP首部(源IP為CIP持灰,目標(biāo)IP為VIP)盔夜,而在原IP報(bào)文之外...
    張大志的博客閱讀 579評(píng)論 0 0
  • Linux系統(tǒng)之lvs集群 集群的基本思想 由于現(xiàn)代化業(yè)務(wù)上線的需求, 單服務(wù)器已經(jīng)不能滿足業(yè)務(wù)的需要, 業(yè)務(wù)服務(wù)...
    魏鎮(zhèn)坪閱讀 3,698評(píng)論 0 14