| 一、概述: 二、LVS詳解: 三、案例一:搭建LVS 的NAT模式負(fù)載均衡集群; 四、案例二:搭建LVS 的DR模式負(fù)載均衡集群; 五、總結(jié):Lvs負(fù)載均衡群集與nginx負(fù)載均衡群集對(duì)比(自主學(xué)習(xí)) 一、概述: 概述:Linux Virtual Server的簡(jiǎn)寫,意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。我國(guó)章文嵩博士在1998年五月創(chuàng)建,默認(rèn)編譯為ip_vs內(nèi)核模塊,而在linux kernel的2.6版本之后kernel是直接支持ipvs的,優(yōu)勢(shì):LVS承受負(fù)載能力高、穩(wěn)定、占用服務(wù)器資源小,缺點(diǎn):適配場(chǎng)景、配置較麻煩、不支持節(jié)點(diǎn)的健康檢查機(jī)制; 官網(wǎng):http://www./zh/lvs1.html 集群技術(shù)概述:至少包含兩個(gè)節(jié)點(diǎn)服務(wù)器,對(duì)外表示為一個(gè)整體,只提供一個(gè)訪問入口; 負(fù)載均衡(load balance cluster):將整個(gè)平臺(tái)的負(fù)載均衡到多臺(tái)單位; 高可用(high availablity cluster):使整個(gè)應(yīng)用平臺(tái)擁有容錯(cuò)能力; 
 可伸縮性(Scalability):當(dāng)服務(wù)的負(fù)載增長(zhǎng)時(shí),系統(tǒng)能被擴(kuò)展來滿足需求,且不降低服務(wù)質(zhì)量; 高可用性(Availability):盡管部分硬件和軟件會(huì)發(fā)生故障,整個(gè)系統(tǒng)的服務(wù)必須是每天24小時(shí)每星期7天可用的; 可管理性(Manageability):整個(gè)系統(tǒng)可能在物理上很大,但應(yīng)該容易管理; 價(jià)格有效性(Cost-effectiveness):整個(gè)系統(tǒng)實(shí)現(xiàn)是經(jīng)濟(jì)的、易支付的; 集群的分層結(jié)構(gòu): 
 第一層:負(fù)載調(diào)度器(load balancer或director),訪問群集的唯一入口,對(duì)外使用所有服務(wù)器共有的VIP(virtual ip)地址,也稱為群集IP地址。 第二層:節(jié)點(diǎn)層(real server pool),服務(wù)器池群集所提供的應(yīng)用服務(wù)由服務(wù)器池承擔(dān),其中的每個(gè)節(jié)點(diǎn)具有獨(dú)立的RIP(real IP真實(shí)地址),只處理調(diào)度服務(wù)器分發(fā)過來的客戶機(jī)請(qǐng)求。當(dāng)某個(gè)節(jié)點(diǎn)暫時(shí)失效時(shí),負(fù)載調(diào)度器的容錯(cuò)機(jī)制會(huì)將其隔離,等待錯(cuò)誤排除以后再重新納入服務(wù)器池。 第三層:共享存儲(chǔ)層或數(shù)據(jù)庫(kù)層,共享存儲(chǔ)為服務(wù)器池中的所有節(jié)點(diǎn)提供穩(wěn)定,一致的文件存取服務(wù),確保整個(gè)群集的統(tǒng)一性。 二、LVS詳解: LVS內(nèi)核模型: 
 調(diào)度條件:基于IP(效率最高)、基于端口、基于內(nèi)容 LVS的三種工作模式: 
 1.地址轉(zhuǎn)換:NAT模式,負(fù)載調(diào)度器作為所有服務(wù)器的網(wǎng)關(guān),服務(wù)器節(jié)點(diǎn)使用私有IP地址(隱蔽性高),與負(fù)載調(diào)度器位于同一個(gè)物理網(wǎng)絡(luò),安全性高于其他兩種方式。但是負(fù)載調(diào)度器是整個(gè)架構(gòu)的瓶頸; b.IP隧道:TUN模式,采用開放是的網(wǎng)絡(luò)結(jié)構(gòu),負(fù)載調(diào)度器僅作為客戶機(jī)的訪問入口,個(gè)節(jié)點(diǎn)通過各自的Internet連接回應(yīng)客戶機(jī),而不再經(jīng)過負(fù)載調(diào)度器。服務(wù)器節(jié)點(diǎn)分散在互聯(lián)網(wǎng)的不同位置,具有獨(dú)立的公網(wǎng)IP地址,通過專用的IP隧道與負(fù)載調(diào)度器互通。安全性低,性能高; c.直接路由:DR模式,采用半開放式的網(wǎng)絡(luò)結(jié)構(gòu),與TUN模式結(jié)構(gòu)類似,但各節(jié)點(diǎn)并不是分散在各地,而是與調(diào)度服務(wù)器位于同一個(gè)物理網(wǎng)絡(luò)。負(fù)載調(diào)度器與各節(jié)點(diǎn)服務(wù)器通過本地網(wǎng)絡(luò)連接,不需要建立專用的IP隧道。性能最高,安全性較高; Lvs負(fù)載調(diào)度算法: 靜態(tài): 1.輪詢r(jià)r:將請(qǐng)求按順序依次分配給各個(gè)web節(jié)點(diǎn); 2.加權(quán)輪詢wrr:根據(jù)web服務(wù)器的處理能力,動(dòng)態(tài)調(diào)整權(quán)重,將請(qǐng)求按照各節(jié)點(diǎn)的負(fù)載情況進(jìn)行順序分配; 3.目標(biāo)地址散列調(diào)度dh:根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。 4.源地址 hash:源地址散列”調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空? 動(dòng)態(tài): 1.最小連接Lc:根據(jù)web服務(wù)器的連接數(shù)量,將請(qǐng)求分配給web節(jié)點(diǎn)服務(wù)器; 2.加權(quán)最小連接WLC:根據(jù)web服務(wù)器的處理能力,動(dòng)態(tài)調(diào)整權(quán)重,將請(qǐng)求按照各節(jié)點(diǎn)的連接數(shù)量進(jìn)行分配,默認(rèn); 3.最短延遲調(diào)度SED:在WLC基礎(chǔ)上改進(jìn),Overhead = (ACTIVE+1)*256/加權(quán),不再考慮非活動(dòng)狀態(tài),把當(dāng)前處于活動(dòng)狀態(tài)的數(shù)目+1來實(shí)現(xiàn),數(shù)目最小的,接受下次請(qǐng)求,+1的目的是為了考慮加權(quán)的時(shí)候,非活動(dòng)連接過多缺陷:當(dāng)權(quán)限過大的時(shí)候,會(huì)倒置空閑服務(wù)器一直處于無連接狀態(tài)。 4.永不排隊(duì)/最少隊(duì)列調(diào)度NQ:無需隊(duì)列。如果有臺(tái) realserver的連接數(shù)=0就直接分配過去,不需要再進(jìn)行sed運(yùn)算,保證不會(huì)有一個(gè)主機(jī)很空間。在SED基礎(chǔ)上無論+幾,第二次一定給下一個(gè),保證不會(huì)有一個(gè)主機(jī)不會(huì)很空閑著,不考慮非活動(dòng)連接,才用NQ,SED要考慮活動(dòng)狀態(tài)連接,對(duì)于DNS的UDP不需要考慮非活動(dòng)連接,而httpd的處于保持狀態(tài)的服務(wù)就需要考慮非活動(dòng)連接給服務(wù)器的壓力。 5.基于局部性的最少鏈接LBLC:基于局部性的最少鏈接”調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用“最少鏈接”的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器? 6.帶復(fù)制的基于局部性最少連接LBLCR:帶復(fù)制的基于局部性最少鏈接”調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射?該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按”最小連接”原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接”原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器?同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。 三、案例一:搭建LVS 的NAT模式負(fù)載均衡集群; 案例拓?fù)洌?/strong> 
 案例環(huán)境: 
 案例步驟: ?搭建real server 節(jié)點(diǎn)池中的三臺(tái)http服務(wù)節(jié)點(diǎn)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); ?配置LD負(fù)載調(diào)度器的環(huán)境以及安裝軟件程序; ?配置LD負(fù)載調(diào)度服務(wù)器的調(diào)度服務(wù); ?公網(wǎng)客戶端測(cè)試訪問集群; ?搭建real server 節(jié)點(diǎn)池中的三臺(tái)http服務(wù)節(jié)點(diǎn)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); [root@real1 ~]# ip a |grep 192.168.100.102 ##設(shè)置ip地址 inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0 [root@real1 ~]# ip r |grep 192.168.100.101 ##設(shè)置默認(rèn)網(wǎng)關(guān)地址 default via 192.168.100.101 dev eth0 proto static metric 100 [root@real1 ~]# yum -y install httpd [root@real1 ~]# cat < I am real1.linuxfan.cn END [root@real1 ~]# systemctl start httpd [root@real1 ~]# systemctl enable httpd ##設(shè)置開機(jī)自動(dòng)啟動(dòng) Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. ?配置LD負(fù)載調(diào)度器的環(huán)境以及安裝軟件程序; [root@ld ~]# ip a |grep 101 inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0 inet 192.168.3.101/24 brd 192.168.3.255 scope global eth1 [root@ld ~]# echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf ##開啟路由轉(zhuǎn)發(fā)功能,因?yàn)檎{(diào)度器同時(shí)承載著網(wǎng)關(guān)的角色 [root@ld ~]# sysctl -p net.ipv4.ip_forward = 1 [root@ld ~]# modprobe ip_vs ##加載內(nèi)核模塊ip_vs [root@ld ~]# lsmod |grep ip_vs ip_vs 141092 0 nf_conntrack 133387 1 ip_vs libcrc32c 12644 3 xfs,ip_vs,nf_conntrack ?配置LD負(fù)載調(diào)度服務(wù)器的調(diào)度服務(wù); [root@ld ~]# yum -y install ipvsadm ##安裝ip_vs模塊的規(guī)則編寫工具 [root@ld ~]# systemctl stop ipvsadm ##清空內(nèi)部規(guī)則 [root@ld ~]# ipvsadm -A -t 192.168.3.101:80 -s rr ##指定集群的VIP地址(Virtual IP),rr指定輪詢調(diào)度算法 [root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.102:80 -m -w 1 ##-m表示NAT模式,-w指定權(quán)重值 [root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.103:80 -m -w 1 [root@ld ~]# ipvsadm -a -t 192.168.3.101:80 -r 192.168.100.104:80 -m -w 1 [root@ld ~]# ipvsadm-save ##保存規(guī)則 -A -t ld.linuxfan.cn:http -s rr -a -t ld.linuxfan.cn:http -r 192.168.100.102:http -m -w 1 -a -t ld.linuxfan.cn:http -r 192.168.100.103:http -m -w 1 -a -t ld.linuxfan.cn:http -r 192.168.100.104:http -m -w 1 [root@ld ~]# ipvsadm -L ##查看規(guī)則 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ld.linuxfan.cn:http rr -> 192.168.100.102:http Masq 1 0 0 -> 192.168.100.103:http Masq 1 0 0 -> 192.168.100.104:http Masq 1 0 0 ?公網(wǎng)客戶端測(cè)試訪問集群; 
 
 四、案例二:搭建LVS 的DR模式負(fù)載均衡集群; 案例拓?fù)洌?/strong> 
 案例環(huán)境: 
 案例步驟: ?搭建real server 節(jié)點(diǎn)池中的三臺(tái)http服務(wù)節(jié)點(diǎn)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); ?設(shè)置負(fù)載調(diào)度器上的VIP地址; ?調(diào)整負(fù)載調(diào)度器的響應(yīng)參數(shù); ?配置負(fù)載調(diào)度器負(fù)載分配策略; ?配置real server節(jié)點(diǎn)池內(nèi)節(jié)點(diǎn)服務(wù)器的網(wǎng)絡(luò)參數(shù)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); ?內(nèi)網(wǎng)客戶端訪問測(cè)試集群; ?在GW服務(wù)器上設(shè)置iptables的DNAT規(guī)則; ?外網(wǎng)客戶端訪問測(cè)試集群; ?測(cè)試LVS是否支持節(jié)點(diǎn)的健康檢查功能; ?調(diào)整LVS的負(fù)載調(diào)度算法(自主學(xué)習(xí)); ?搭建real server 節(jié)點(diǎn)池中的三臺(tái)http服務(wù)節(jié)點(diǎn)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); [root@real1 ~]# ip a |grep 192.168.100.102 ##設(shè)置ip地址 inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0 [root@real1 ~]# ip r |grep 192.168.100.100 ##設(shè)置默認(rèn)網(wǎng)關(guān)地址 default via 192.168.100.100 dev eth0 proto static metric 100 [root@real1 ~]# yum -y install httpd [root@real1 ~]# cat < I am real1.linuxfan.cn END [root@real1 ~]# systemctl start httpd [root@real1 ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. ?設(shè)置負(fù)載調(diào)度器上的VIP地址; [root@ld ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.100.101 PREFIX=24 GATEWAY=192.168.100.100 DNS1=192.168.100.100 [root@ld ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0 [root@ld ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no NAME=eth0:0 DEVICE=eth0:0 ONBOOT=yes IPADDR=192.168.100.88 PREFIX=24 GATEWAY=192.168.100.100 DNS1=192.168.100.100 [root@ld ~]# systemctl restart network [root@ld ~]# ip a |grep 192.168.100 inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0 inet 192.168.100.88/24 brd 192.168.100.255 scope global secondary eth0:0 ?調(diào)整負(fù)載調(diào)度器的響應(yīng)參數(shù); [root@ld ~]# vi /etc/sysctl.conf ##最后添加 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 :wq 注解: 禁止轉(zhuǎn)發(fā)重定向報(bào)文 禁止默認(rèn)轉(zhuǎn)發(fā)重定向報(bào)文 禁止eth0網(wǎng)卡轉(zhuǎn)發(fā)重定向報(bào)文 [root@ld ~]# sysctl -p ?配置負(fù)載調(diào)度器負(fù)載分配策略; [root@ld ~]# modprobe ip_vs [root@ld ~]# lsmod |grep ip_vs ip_vs_rr 12600 1 ip_vs 141092 3 ip_vs_rr nf_conntrack 133387 1 ip_vs libcrc32c 12644 3 xfs,ip_vs,nf_conntrack [root@ld ~]# yum -y install ipvsadm [root@ld ~]# ipvsadm --clear [root@ld ~]# systemctl stop ipvsadm [root@ld ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@ld ~]# ipvsadm -A -t 192.168.100.88:80 -s rr [root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.102:80 -g -w 1 ##表示DR模式 [root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.103:80 -g -w 1 [root@ld ~]# ipvsadm -a -t 192.168.100.88:80 -r 192.168.100.104:80 -g -w 1 [root@ld ~]# ipvsadm-save -A -t ld.linuxfan.cn:http -s rr -a -t ld.linuxfan.cn:http -r 192.168.100.102:http -g -w 1 -a -t ld.linuxfan.cn:http -r 192.168.100.103:http -g -w 1 -a -t ld.linuxfan.cn:http -r 192.168.100.104:http -g -w 1 [root@ld ~]# ipvsadm -L IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP ld.linuxfan.cn:http rr -> 192.168.100.102:http Route 1 0 0 -> 192.168.100.103:http Route 1 0 0 -> 192.168.100.104:http Route 1 0 0 ?配置real server節(jié)點(diǎn)池內(nèi)節(jié)點(diǎn)服務(wù)器的網(wǎng)絡(luò)參數(shù)(在此只列出一臺(tái)配置,其他兩臺(tái)相同); [root@real1 ~]# cat < DEVICE=lo:0 IPADDR=192.168.100.88 NETMASK=255.255.255.255 ONBOOT=yes NAME=lo:0 END [root@ real1 ~]# systemctl restart network [root@real1 ~]# ip a |grep 88 inet 192.168.100.88/32 brd 192.168.100.88 scope global lo:0 ?內(nèi)網(wǎng)客戶端訪問測(cè)試集群; 
 
 
 
 ?在GW服務(wù)器上設(shè)置iptables的DNAT規(guī)則; [root@GW ~]# iptables -t nat -A PREROUTING -i eth1 -d 192.168.3.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.88 [root@ GW ~]# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 192.168.3.100 tcp dpt:80 to:192.168.100.88 ... ?外網(wǎng)客戶端訪問測(cè)試集群; 
 
 ?測(cè)試LVS是否支持節(jié)點(diǎn)的健康檢查功能; [root@real1 ~]# ifconfig lo:0 down ##斷開real1的lo:0的網(wǎng)卡,使其脫離集群 [root@real1 ~]# ip a |grep 192.168.100. inet 192.168.100.102/24 brd 192.168.100.255 scope global eth0 客戶端訪問集群測(cè)試: 
 ?調(diào)整LVS的負(fù)載調(diào)度算法(自主學(xué)習(xí)); 五、總結(jié):Lvs負(fù)載均衡群集與nginx負(fù)載均衡群集對(duì)比(自主學(xué)習(xí)) | 
|  |