LVS負(fù)載均衡策略的部署與應(yīng)用
通常來說負(fù)載均衡可分為四層負(fù)載均衡和七層負(fù)載均衡,而四層負(fù)載均衡策略中比較典型的實現(xiàn)方式為LVS負(fù)載均衡
LVS簡介
LVS負(fù)載均衡中有三種調(diào)度方法,分別為:NAT(Network Address Translation網(wǎng)絡(luò)地址轉(zhuǎn)換)、TUN(tunnel 隧道)、DR(direct route 直接路由)
LVS-DR
DR模式下需要LVS服務(wù)器和后臺服務(wù)器綁定同一個VIP, 一個請求過來時,LVS只需要將網(wǎng)絡(luò)幀的MAC地址修改為其中一臺后臺服務(wù)器的MAC,該包就會被轉(zhuǎn)發(fā)到相應(yīng)的服務(wù)器處理,當(dāng)服務(wù)器返回響應(yīng)時,只要直接向用戶的IP地址返回即可,不再經(jīng)過LVS服務(wù)器
優(yōu)缺點:
1)lvs接收請求輸入,將請求轉(zhuǎn)發(fā)給RS,由RS輸出響應(yīng)給用戶,性能非常高。
2)不足之處是要求負(fù)載均衡器與RS在一個物理段上
LVS-TUN
LVS-TUN模式是通過ip隧道技術(shù)減輕lvs調(diào)度服務(wù)器的壓力,很多時候服務(wù)器收到的請求包很短小,但應(yīng)答包通常很大,負(fù)載均衡器只負(fù)責(zé)將請求包分發(fā)給后臺服務(wù)器,后臺服務(wù)器會直接將應(yīng)答包返回給用戶。因此,負(fù)載均衡器能處理很巨大的請求量。
優(yōu)缺點:
1)性能比LVS-NAT模式要高的多,且不限制負(fù)載均衡器與后臺服務(wù)器在一個物理段上
2)不足之處是需要所有的服務(wù)器都要支持"IP Tunneling"協(xié)議
LVS-NAT
LVS-NAT模式是一種外網(wǎng)和內(nèi)網(wǎng)地址映射的技術(shù)。在NAT模式中,LVS需要作為后臺服務(wù)器的網(wǎng)關(guān),當(dāng)客戶端訪問LVS服務(wù)器的外網(wǎng)網(wǎng)卡IP地址時,LVS會將數(shù)據(jù)包的目標(biāo)IP地址改為后臺服務(wù)器的IP地址;當(dāng)后臺服務(wù)器返回響應(yīng)時,同樣需要通過LVS服務(wù)器作為網(wǎng)關(guān)進行中轉(zhuǎn),LVS服務(wù)器會將數(shù)據(jù)包的源地址改為LVS服務(wù)器的外網(wǎng)網(wǎng)卡IP地址,因此客戶端會認(rèn)為響應(yīng)是LVS服務(wù)器返回的
優(yōu)缺點:
1)可以有效把后臺服務(wù)器IP地址隱藏起來
2)NAT模式請求和響應(yīng)都需要經(jīng)過lvs,性能沒有DR模式好
前期準(zhǔn)備
準(zhǔn)備三臺centos7,配置IP地址和hostname,同步時間,關(guān)閉防火墻和selinux,配置IP地址和hostname映射
| hostname | ip |
|---|---|
| node1 | 192.168.29.143 |
| node2 | 192.168.29.142 |
| node3 | 192.168.29.144 |
在node2和node3中部署httpd服務(wù)并修改首頁內(nèi)容
[root@node2 ~]# yum install httpd -y
[root@node2 ~]# echo node2 > /var/www/html/index.html
[root@node3 ~]# yum install httpd -y
[root@node3 ~]# echo node3 > /var/www/html/index.html
[root@node2 ~]# systemctl start httpd
[root@node3 ~]# systemctl start httpdnode1部署ipvsadm
[root@node1 ~]# yum install ipvsadm -y
[root@node1 ~]# systemctl start ipvsadm.service部署LVS-DR
node1端設(shè)置部署
添加VIP和設(shè)置路由表
[root@node1 ~]# ifconfig ens33:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up
[root@node1 ~]# route add -host 192.168.29.122 dev ens33:0開啟包轉(zhuǎn)發(fā)功能
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward設(shè)置ipvsadm轉(zhuǎn)發(fā)規(guī)則
#先清除所有轉(zhuǎn)發(fā)規(guī)則
[root@node1 ~]# ipvsadm --clear
[root@node1 ~]# ipvsadm -A -t 192.168.29.122:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.142:80 -g -w 1
[root@node1 ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.144:80 -g -w 1
#設(shè)置完成后查看狀態(tài)
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
-> node2:http Route 1 0 0
-> node3:http Route 1 0 0
#選項說明:
-A:添加一個虛擬服務(wù),使用ip地址、端口號、協(xié)議來唯一定義一個虛擬服務(wù)
-t:使用TCP服務(wù),該參數(shù)后需加主機與端口信息
-s:指定lvs的調(diào)度算法
rr:輪詢算法
-a:添加一臺真實服務(wù)器
-r:設(shè)置真實服務(wù)器IP與端口
-g:設(shè)置lvs工作模式為DR直連路由
-w:指定真實服務(wù)器權(quán)重node2和node3設(shè)置部署
添加VIP和設(shè)置路由表
[root@node2 ~]# ifconfig lo:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up
[root@node2 ~]# route add -host 192.168.29.122 dev lo:0
[root@node3 ~]# ifconfig lo:0 192.168.29.122 broadcast 192.168.29.122 netmask 255.255.255.255 up
[root@node3 ~]# route add -host 192.168.29.122 dev lo:0關(guān)閉arp解析
[root@node2 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@node2 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
[root@node2 ~]# sysctl -p
[root@node3 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node3 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@node3 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@node3 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
[root@node3 ~]# sysctl -p測試驗證
瀏覽器訪問http://192.168.29.122,刷新則會按照輪詢算法自動進行負(fù)載均衡

部署LVS-TUN
node1端設(shè)置部署
添加VIP
[root@node1 ~]# ip addr add 192.168.29.122 dev ens33:0開啟包轉(zhuǎn)發(fā)功能
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward設(shè)置ipvsadm轉(zhuǎn)發(fā)規(guī)則
#先清除所有轉(zhuǎn)發(fā)規(guī)則
[root@node1 ~]# ipvsadm --clear
[root@node1 ~]# ipvsadm -A -t 192.168.29.122:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.142:80 -i
[root@node1 ~]# ipvsadm -a -t 192.168.29.122:80 -r 192.168.29.144:80 -i
#設(shè)置完成后查看狀態(tài)
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
-> node2:http Tunnel 1 1 2
-> node3:http Tunnel 1 0 1
#選項說明:
-i:設(shè)置lvs工作模式為TUN隧道node2和node3設(shè)置部署
添加tunl0隧道
modeprobe ipip添加VIP
[root@node2 ~]# ip addr add 192.168.29.122 dev tunl0
[root@node2 ~]#ip link set tunl0 up
[root@node3 ~]# ip addr add 192.168.29.122 dev tunl0
[root@node3 ~]#ip link set up tunl0關(guān)閉arp解析
[root@node2 ~]# vi /etc/sysctl.conf
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@node2 ~]# sysctl -p
[root@node3 ~]# vi /etc/sysctl.conf
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@node3 ~]# sysctl -p測試驗證
瀏覽器訪問http://192.168.29.122,刷新則會按照輪詢算法自動進行負(fù)載均衡

部署LVS-NAT
在部署LVS-NAT架構(gòu)前需要在調(diào)度機上安裝兩塊網(wǎng)卡,一塊為內(nèi)網(wǎng)地址,另一塊為外網(wǎng)地址
| 內(nèi)網(wǎng)ip | 外網(wǎng)ip |
|---|---|
| 192.168.29.143 | 192.168.31. 128 |
node1端設(shè)置部署
開啟包轉(zhuǎn)發(fā)功能
[root@node1 ~]# echo "1" >/proc/sys/net/ipv4/ip_forward設(shè)置ipvsadm轉(zhuǎn)發(fā)規(guī)則
#先清除所有轉(zhuǎn)發(fā)規(guī)則
[root@node1 ~]# ipvsadm --clear
[root@node1 ~]# ipvsadm -A -t 192.168.31.128:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.31.128:80 -r 192.168.29.142:80 -m
[root@node1 ~]# ipvsadm -a -t 192.168.31.128:80 -r 192.168.29.144:80 -m
#設(shè)置完成后查看狀態(tài)
[root@node1 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP node1:http rr
-> node2:http Masq 1 0 0
-> node3:http Masq 1 0 0
#選項說明:
-m:設(shè)置lvs工作模式為NAT地址轉(zhuǎn)換模式node2和node3設(shè)置部署
設(shè)置路由表
[root@node2 ~]# route add -net 192.168.31.0/24 gw 192.168.29.143
[root@node3 ~]# route add -net 192.168.31.0/24 gw 192.168.29.143測試驗證
