1. 程式人生 > 其它 >LVS負載均衡集DR

LVS負載均衡集DR

技術標籤:lvslvs

文章目錄

一、LVS_DR資料包流向分析

1、Client向目標VIP發出請求,Director(負載均衡器)接收
2、Director根據負載均衡演算法選擇RealServer_1,不修改也不封裝IP報文,而是將資料幀的MAC地址改為RealServer_1的MAC地址,然後在區域網上傳送
3、RealServer_1收到這個幀,解封裝後發現目標IP與本機匹配(RealServer事先綁定了VIP),於是處理這個報文,隨後重新封裝報文,傳送到區域網。

4、Client將收到回覆的報文。Client認為得到正常的服務,而不會知道是哪一臺伺服器處理的
注意:如果跨網段,則報文會通過路由器經由Internet返回給使用者

二、LVS-DR中的ARP問題

2.1 問題1

在區域網中具有相同的IP地址,會造成各種伺服器ARP通訊的紊亂
當ARP廣播發送到LVS-DR叢集是,因為負載均衡器和節點伺服器都是連線到相同的網路上,他們都會接收到ARP廣播
只有前端的負載均衡器進行相應,其他節點伺服器不應該相應ARP廣播

解決辦法:
對節點伺服器進行處理,使其不相應針對VIP的ARP請求
使用虛介面lo:0承載VIP地址
設定核心引數arp_ignore=1:系統只相應目的IP為本地IP的ARP請求

2.2 問題2

RealServer返回報文(源IP是VIP)經路由器轉發,重新封裝報文是,需要先獲取路由器的MAC地址
傳送ARP請求時,Linux預設使用IP包的源IP地址(即VIP)作為ARP請求包中的源IP地址,而不使用傳送連線口的IP地址
路由器收到ARP請求後,將更新ARP表項
原有的VIP對應的Director的MAC地址會被更新為VIP對應的RealServer的MAC地址

解決方法:
對節點伺服器進行處理,設定核心引數arp_announce=2;系統不使用IP包的源地址來設定ARP請求的源地址,而選擇傳送介面的IP地址

三、LVS-DR部署案例

3.1 案例環境

LVS排程伺服器:

192.168.40.10(內網IP)
192.168.40.100(虛擬地址P)
web1伺服器:
192.168.40.20(內網)
192.168.40.100(虛擬地址IP)
web2伺服器:
192.168.40.30(內網)
192.168.40.100(虛擬地址IP)
NFS伺服器:
192.168.40.40(內網)
client:192.168.40.50

3.2 LVS排程器

 modprobe ip_vs ##載入LVS核心模組
 cat /proc/net/ip_vs ## 檢視版本資訊
 yum -y install ipvsadm

##編輯排程伺服器指令碼
vim DR.sh
#!/bin/bash
## 新增虛擬地址的虛擬介面
ifconfig ens33:0 192.168.40.100 broadcast 192.168.40.100 netmask 255.255.255.255 up
route add -host 192.168.40.100 dev ens33:0  ## ens33:0新增路由
ipvsadm -C	## 清除核心虛擬伺服器的所有記錄
ipvsadm -A -t 192.168.40.100:80 -s rr  ## 建立虛擬伺服器
ipvsadm -a -t 192.168.40.100:80 -r 192.168.40.20:80 -g   ## 新增服務節點
ipvsadm -a -t 192.168.40.100:80 -r 192.168.40.30:80 -g	 ## 新增服務節點
ipvsadm -Ln  ## 檢視節點狀態

sh DR.sh 

3.3 NFS伺服器

yum -y install nfs-utils rpcbind
mkdir -p /opt/test1 /opt/test2
vi /opt/test1/index.html
<h1>this is test1 web!!!</h1>
vi /opt/test2/index.html
<h1>this is test2 web!!!</h1>

vi /etc/exports
/opt/test1 192.168.40.20/32 (ro)
/opt/test2 192.168.40.30/32 (ro)

systemctl start nfs rpcbind
showmount -e

3.4 web1伺服器

showmount -e 192.168.40.40 	## 檢視釋出情況
yum -y install httpd
vim web.sh
#!/bin/bash
ifconfig lo:0 192.168.40.100 broadcast 192.168.40.100 netmask 255.255.255.255 up
route add -host 192.168.40.100 dev lo:0
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
sysctl -p &> /dev/null

sh web.sh
mount 192.168.40.40:/opt/test1 /var/www/html/
systemctl start httpd

3.5 web2伺服器

showmount -e 192.168.40.40 	## 檢視釋出情況
yum -y install httpd
vim web.sh
#!/bin/bash
ifconfig lo:0 192.168.40.100 broadcast 192.168.40.100 netmask 255.255.255.255 up
route add -host 192.168.40.100 dev lo:0
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
sysctl -p &> /dev/null

sh web.sh
mount 192.168.40.40:/opt/test2 /var/www/html/
systemctl start httpd

3.6 驗證結果

瀏覽器輸出192.168.40.100驗證
第一次訪問會顯示web1的內容,再次訪問顯示web2 的內容,實現輪詢
在這裡插入圖片描述
在這裡插入圖片描述