Linux lvs-DR模式配置詳解


本篇文檔主要是記錄DR模式實現過程,以及各配置步驟的原理。“lvs三種模式工作原理”中描述了LVS的NAT、DR、TUN三種模式的工作原理。

DR模式是通過director將報文源和目標MAC地址修改,發送給RS,RS將響應報文直接發送給client。

部署環境

LVS服務器(DS)  DIP:172.30.100.111  VIP:172.30.100.1
nginx1服務器(RS)  RIP:172.30.100.126  VIP:172.30.100.1
nginx2服務器(RS)  RIP:172.30.100.127  VIP:172.30.100.1

 

 

 

 

確保三台機器分別配置了對應的本地靜態地址DIP和RIP,VIP稍后配置。

LVS服務器配置

  LVS是被編譯進內核中,主要分為兩部分ipvs和ipvsadm,ipvs是LVS軟件核心,是運行在LB上的,這是個基於ip層的負載均衡;ipvsadm是用戶空間的集群管理工具。

lsmod |grep ip_vs
# 確保內核加載了lvs模塊
yum install -y ipvsadm
# 安裝用戶管理工具

  要想起到負載均衡效果,那么所有請求報文必須發往LVS服務器(DS),然后DS根據指定算法分發到后端服務器上,因此DS必須配置VIP地址,VIP是與公網client通信地址,這樣DS才能接受到請求報文進行分發。

ifconfig eth0:0 172.30.100.1 netmask 255.255.255.255
# 在LVS服務器上添加一個地址為VIP的虛擬網卡eth0:0

  

后端服務器配置

  DR模式只是針對源和目標MAC地址做出修改,源和目標IP還是不變;當請求報文由LVS服務器處理后發送到后端服務器RS上,RS拆封報文時會發現目標MAC是自己的MAC地址,但是目標IP是VIP,與本地IP地址不符合,那么RS就會認為不是發給自己的報文,所以此時需要在RS上配置VIP,這樣RS就可以接受目標地址為VIP的請求報文了。

  如果將VIP設置在RS的網卡上,假設有多台RS並且每台RS上都配置了VIP,在這個網絡中發出VIP的ARP請求,就有多個RS響應,這樣肯定是不可以;因此就把VIP配置到回環地址lo網卡上,然后讓lo網卡忽略所有ARP請求,eth0網卡正常響應ARP請求,這樣網絡中就不會收到RS關於VIP的響應;還有一個問題就是當本地網卡響應ARP請求時,也有可能通過lo網卡回應,然后把VIP作為ARP請求的源IP通告出去,那么就必須禁止VIP作為ARP請求的源IP,這個問題可以通過修改arp_announce參數解決。

  由於客戶端發起的請求報文源IP為CIP,目標IP為VIP;所以客戶端收到的響應報文源IP必須為VIP,目標IP必須為CIP,因此在RS發送的響應報文必須由VIP的lo網卡發出,這就需要在RS上指定一條路由,目標IP為VIP的數據包使用lo網卡發出,然后經由eth0轉發到網關再到公網客戶端。

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
# 將對應網卡設置為只回應目標IP為自身接口地址的ARP請求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
# 將ARP請求的源IP設置為eth0上的IP,也就是RIP
# 必須完成以上設置,才可繼續

ifconfig lo:0 172.30.100.1 broadcast 172.30.100.1 netmask 255.255.255.255
# 添加IP地址為VIP的虛擬網卡lo:0
route add -host 172.30.100.1 dev lo:0
# 添加一條路由,目標IP為VIP的數據包使用lo接口發送,這樣響應報文的源IP就會為VIP

  

  兩台nginx后端服務器都需要完成以上操作。

ipvs規則配置

ipvsadm -A -t 172.30.100.1:80 -s wrr
# 添加虛擬服務,指定IP、端口、算法
ipvsadm -a -t 172.30.100.1:80 -r 172.30.100.126:80 -g -w 2
# 添加nginx1服務器,指定DR模式,指定權重為2
ipvsadm -a -t 172.30.100.1:80 -r 172.30.100.127:80 -g -w 1
# 添加nginx2服務器,指定DR模式,指定權重為1

驗證

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM