LVS之DR模式部署
- 2021 年 2 月 17 日
- 筆記
一、LVS-DR數據包流向分析
為方便進行原理分析,將Client與群集機器放在同一網路中,數據包流經的路線為1-2-3-4
1、Client 向目標 VIP 發出請求,Director(負載均衡器)接收。此時源MAC 地址為Client MAC地址,目標MAC地址為 調度器Director 的MAC地址。
2、Director 根據負載均衡演算法選擇 RealServer_1,不修改也不封裝IP報文,而是將數據幀的MAC地址改為RealServer_1的MAC地址,然後在區域網上發送。此時源MAC地址為Director的MAC地址,目的MAC地址為RealServer_1的MAC地址。
3、RealServer_1收到這個幀,解封裝後發現目標IP與本機匹配(RealServer事先綁定了VIP),於是處理這個報文。隨後重新封裝報文,將響應報文通過 lo 介面傳送給物理網卡然後向外發出。此時源MAC地址為RealServer_1的MAC地址,目的MAC地址為Client的MAC地址。
4、Client將收到回復的報文。Client 認為得到正常的服務,而不會知道是哪一台伺服器處理的。
注意:如果跨網段,則報文通過路由器經由Internet返回給用戶
二、LVS-DR中的ARP問題
1、在LVS-DR負載均衡集群中,負載均衡與節點伺服器都要配置相同的VIP地址。
2、在區域網中具有相同的IP地址,勢必會造成各伺服器ARP通訊的紊亂。
當ARP廣播發送到LVS-DR集群時,因為負載均衡器和節點伺服器都是連接到相同網路上,它們都會接收到ARP廣播。
只有前端的負載均衡器進行響應,其他節點伺服器不應該響應ARP廣播。
3、對節點伺服器進行處理,使其不響應針對VIP的ARP請求
使用虛介面lo:0承載VIP地址
設置內核參數arp_ignore=1:系統只響應目的IP為本地IP的ARP請求
4、RealServer返回報文(源IP是VIP)經路由器轉發,重新封裝報文時,需要先獲取路由器的MAC地址。
5、發送ARP請求時,Linux默認使用IP包的源IP地址(即VIP)作為ARP請求包中的源IP地址,而不使用發送介面的IP地址,如:ens33
6、路由器收到ARP請求後,將更新ARP表項
7、原有的VIP對應Director的MAC地址會被更新為VIP對應RealServer的MAC地址
8、路由器根據ARP表項,會將新來的請求報文轉發給RealServer,導致Director的VIP失效
解決方法:
對節點伺服器進行處理,設置內核參數arp_announce=2:系統不使用IP包的源地址來設置ARP請求的源地址,而選擇發送介面的IP地址。
解決ARP的兩個問題的設置方法
修改 /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
三、LVS負載均衡群集之DR模式
1、數據包流向分析
(1)、客戶端發送請求到Director Server (負載均衡器),請求的數據報文(源IP是CIP, 目標IP是VIP)到達內核空間。
(2)、Director Server和Real Server在同一個網路中,數據通過二層數據鏈路層來傳輸。
(3)、內核空間判斷數據包的目標IP是本機VIP,此時IPVS (IP虛擬伺服器) 比對數據包請求的服務是否是集群服務,是集群服務就重新封裝數據包。修改源MAC地址為Director Server 的MAC地址,修改目標MAC地址為Real Server 的MAC地址,源IP地址與目標IP地址沒有改變,然後將數據包發送給Real Server。
(4)、到達Real Server 的請求報文的MAC 地址是自身的MAC地址,就接收此報文。數據包重新封裝報文 (源IP地址為VIP,目標IP為CIP),將響應報文通過 lo 介面傳送給物理網卡然後向外發出。
(5) 、Real Server 直接將響應報文傳送到客戶端。
2、DR模式的特點
(1) Director Server 和Real Server 必須在同一-個物理網路中。
(2)Real Server可以使用私有地址,也可以使用公網地址。如果使用公網地址,可以通過互聯網對RIP進行直接訪問。
(3)Director Server作為群集的訪問入口,但不作為網關使用。
(4)所有的請求報文經由Director Server, 但回復響應報文不能經過Director Server。
(5)Real Server 的網關不允許指向Director Server IP,即 Real Server 發送的數據包不允許經過Director Server。
(6)Real Server 上的 lo 介面配置 VIP的IP地址。
四、簡單小實驗LVS-DR模式
########DR模式LVS負載均衡群集部署#########
DR 伺服器:192.168.241.3
Web 伺服器1:192.168.241.4
Web 伺服器2:192.168.241.5
vip :192.168.241.200
客戶端:192.168.241.6
1、配置負載調度器(192.168.241.3)
systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm
(1)配置虛擬IP地址(VIP:192.168.241.200)
cd /etc/sysconfig/network-scripts
#若隧道模式,複製為ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.241.200
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0
(2)調整proc響應參數
#由於LVS負載調度器和各節點需要共用VIP地址,應該關閉Linux內核的重定向參數響應,不充當路由器
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
(3)配置負載分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.241.200:80 -s rr
ipvsadm -a -t 192.168.241.200:80 -r 192.168.241.4:80 -g #若隧道模式,-g替換為-i
ipvsadm -a -t 192.168.241.200:80 -r 192.168.241.5:80 -g
ipvsadm
ipvsadm -ln #查看節點狀態,Router代表DR模式
2、部署共享存儲(NFS伺服器:192.168.241.6)
systemctl stop firewalld.service
setenforce 0
yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet
vim /etc/exports
/opt/kgc 192.168.241.0/24(rw,sync,no_root_squash)
/opt/benet 192.168.241.0/24(rw,sync,no_root_squash)
echo 'this is benet web' > /opt/benet/index.html
echo 'this is kgc web' > /opt/kgc/index.html
systemctl start nfs
systemctl start rpcbind
3、配置節點伺服器(192.168.241.4、192.168.241.5)
systemctl stop firewalld.service
setenforce 0
(1)配置虛擬IP地址(VIP:192.168.241.200)
#此地址僅用作發送Web響應數據包的源地址,並不需要監聽客戶機的訪問請求(改由調度器監聽並分發)。因此使用需介面lo:0來承載VIP地址,並為本機添加一條路由記錄,將訪問VIP的數據限制在本地,以避免通訊紊亂
cd /etc/sysconfig/network-scripts ##需要將ens33的網關和DNS注釋
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.241.200
NETMASK=255.255.255.255
ifup lo:0
ifconfig lo:0
route add -host 192.168.241.200 dev lo:0
或者vim /etc/rc.local
/sbin/route add -host 192.168.241.200 dev lo:0
chmod +x /etc/rc.d/rc.local
(2)調整內核的ARP響應參數以阻止更新VIP的MAC地址,避免發生衝突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1 #系統只響應目的IP為本地IP的ARP請求
net.ipv4.conf.lo.arp_announce = 2 #系統不使用IP包的源地址來設置ARP請求的源地址,而選擇發送介面的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
或者
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd
####192.168.241.4
mount 192.168.241.6:/opt/kgc /var/www/html
####192.168.241.5
mount 192.168.241.6:/opt/benet /var/www/html
4、測試LVS群集
在客戶端使用瀏覽器訪問//192.168.241.200,默認網關指向192.168.241.200