一,數據包流向:
?
? ? ? ? 1,cilent向目標vip發出請求,dir接收,此時ip報頭數據幀頭信息。
? ? ? ? 2,dir根據負載均衡算法給rs(rip),將rip所在網卡的mac地址作為目標的mac地址,發送到局域網里,此時ip報頭數據幀信息。
? ? ? ? 3,rip在局域網中收到這個幀,拆開后發現目標(vip)與本機匹配,就會處理這個報文,隨后重新封裝報文并發送到局域網,此時ip報頭及數據幀信息。
二,arp問題解決
? ? ? ? 因為web服務器與負載均衡器用一個vip,因為數據轉發要進行arp廣播,廣播的時候會因為vip會使得網絡癱瘓。
? ? ? ? 1,ari_ignore-1
????????????????防止網關路由器發送ARP廣播時調度器和節點都會進行響應,這里會導致ARP緩存表混亂,不對非本地物理網卡的arp請求進行響應,因為VIP承載lo:0.
? ? ? ? 2,arp_announce-2
????????????????系統不使用響應數據的源IP地址(VIP)來作為本機進行的arp請求報文的源P地址,而是用發送報文的物理網卡的IP地址做為ARP請求報文的源P地址,這樣可以防止網關路由器接收到的源P地址為VIP的arp請求報文后的有去更新ARP緩存表,會導致外網再去發送請求時,數據包到時候到達不了調度器。
三,特性
????????優點:負載均衡器只負責將請求的包分給物理服務器,而物理服務器將應答包直接發送給用戶。所以負載均衡器能處理很巨大的請求量,這種方式,可以讓一臺負載均衡器為超過一百臺物理服務器服務,負載均衡器不再是系統的瓶頸,使用lvs-dr模式,如果你的負載均衡器擁有100M全雙工的話,就可以讓vs達到到1G甚至更高的吞吐量。
????????缺點:所有的調度器和節點服務器在同一個廣播域,還不支持異地容災。
四,服務部署:
?DR服務器:192.168.10.18
Web 服務器1:192.168.10.16 ? ? ??
Web 服務器2:192.168.10.17
vip:192.168.10.180
1,dr服務器
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm配置vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255啟動網卡
ifup ens33:0
ifconfig ens33:0調整proc參數
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p匹配值負載均衡策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C
ipvsadm -A -t 192.168.10.180:80 -s rr
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
ipvsadm查看節點狀態
ipvsadm -ln
2,web服務器(兩個都是如下操作)
配置vip
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255 啟動io接口
ifup lo:0
ifconfig lo:0
route add -host 192.168.10.180 dev lo:0添加路由
vim /etc/rc.local
/sbin/route add -host 192.168.10.180 dev lo:0調整內核的arp響應參數
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
3,測試:訪問vip地址即可