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)度分配問(wèn)題
  • 集群(Cluster)即是向外擴(kuò)展思路的體現(xiàn)

(二)集群的概念和分類

  • Cluster:集群,為解決某個(gè)特定問(wèn)題將多臺(tái)計(jì)算機(jī)組合起來(lái)形成的單個(gè)系統(tǒng)
(1)Linux Cluster類型
  • LB(Load Balancing):負(fù)載均衡

  • HA(High Availiablity):高可用

    • SPOF(Single Point Of Failure):?jiǎn)吸c(diǎn)失敗,必須盡可能消滅出現(xiàn)單點(diǎn)失敗的環(huán)節(jié)
    • MTBF(MeanTime Between Failure):平均無(wú)故障時(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í)間不超過(guò)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é)議是無(wú)狀態(tài)的,cookie和session機(jī)制實(shí)現(xiàn)會(huì)話保持

  • 在負(fù)載均衡模式下,相同客戶端的前后連接可能被分配給不同的服務(wù)器提供服務(wù),需要有相關(guān)技術(shù)解決會(huì)話保持問(wèn)題

  • 三種解決技術(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)度算法來(lái)挑選RS

  • 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 server IP,VS外網(wǎng)的IP
    • DIP:Director IP,VS內(nèi)網(wǎng)的IP
    • RIP:Real server IP
    • 訪問(wèn)流程: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,通過(guò)將請(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)原理:

通過(guò)為請(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)通過(guò)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)原理:

通過(guò)同時(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:通過(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:調(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,源地址哈希,將來(lái)自于同一個(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)營(yíng)商
(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,適用于長(zhǎng)連接應(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ù)載不均衡問(wèn)題,從負(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算法無(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ī),必須定義為持久模式

(五)其他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要打開(kāi)核心轉(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

  • 說(shuō)明:
    172.18.0.0/16網(wǎng)段代表外網(wǎng),192.168.136.0/24網(wǎng)段代表內(nèi)網(wǎng)
    一般來(lái)說(shuō)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開(kāi)啟路由功能
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上生成自簽名證書(shū)
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ù)制證書(shū)和密鑰到RS2上,必須保證RS上的證書(shū)和密鑰是同一份
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)頁(yè)文件
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ù),來(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)行通告

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

  • 說(shuō)明:
    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開(kāi)啟路由功能
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上生成自簽名證書(shū)
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ù)制證書(shū)和密鑰到RS2上,必須保證RS上的證書(shū)和密鑰是同一份
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)頁(yè)文件
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)通過(guò)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頁(yè)面
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全部無(wú)法連接,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è)置,無(wú)需人工干預(yù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,494評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,283評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,953評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,714評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,410評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,940評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,776評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,210評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,642評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,878評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,654評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373

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

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