1. 程式人生 > >LVS/DR模式工作原理的常見問題[轉]

LVS/DR模式工作原理的常見問題[轉]

LVS/DR模式工作原理的常見問題。

  1. LVS/DR如何處理請求報文的,會修改IP包內容嗎?

1.1 vs/dr本身不會關心IP層以上的資訊,即使是埠號也是tcp/ip協議棧去判斷是否正確,vs/dr本身主要做這麼幾個事:

1)接收client的請求,根據你設定的負載均衡演算法選取一臺realserver的ip;

2)以選取的這個ip對應的mac地址作為目標mac,然後重新將IP包封裝成幀轉發給這臺RS;

3)在hash table中記錄連線資訊。

vs/dr做的事情很少,也很簡單,所以它的效率很高,不比硬體負載均衡裝置差多少。

資料包、資料幀的大致流向是這樣的:client –> VS –> RS –> client

1.2 前面已作了回答,vs/dr不會修改IP包的內容.

  1. RealServer為什麼要在lo介面上配置VIP?在出口網絡卡上配置VIP可以嗎?

2.1 既然要讓RS能夠處理目標地址為vip的IP包,首先必須要讓RS能接收到這個包。

在lo上配置vip能夠完成接收包並將結果返回client。

2.2 答案是不可以將VIP設定在出口網絡卡上,否則會響應客戶端的arp request,造成client/gateway arp table紊亂,以至於整個load balance都不能正常工作。

  1. RealServer為什麼要抑制arp幀?

這個問題在上一問題中已經作了說明,這裡結合實施命令進一步闡述。我們在具體實施部署的時候都會作如下調整:

   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

我相信很多人都不會弄懂它們的作用是什麼,只知道一定得有。我這裡也不打算拿出來詳細討論,只是作幾點說明,就當是補充吧。

3.1

echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce

這兩條是可以不用的,因為arp對邏輯介面沒有意義。

3.2 如果你的RS的外部網路介面是eth0,那麼

echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce

其實真正要執行的是:

echo “1” >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/eth0/arp_announce

所以我個人建議把上面兩條也加到你的腳本里去,因為萬一系統裡上面兩條預設的值不是0,那有可能是會出問題滴。

arp_ignore:

定義對目標地址為本地IP的ARP詢問不同的應答模式0

0 - (預設值): 迴應任何網路介面上對任何本地IP地址的arp查詢請求

1 - 只回答目標IP地址是來訪網路介面本地地址的ARP查詢請求

2 -只回答目標IP地址是來訪網路介面本地地址的ARP查詢請求,且來訪IP必須在該網路介面的子網段內

3 - 不迴應該網路介面的arp請求,而只對設定的唯一和連線地址做出迴應

4-7 - 保留未使用

8 -不迴應所有(本地地址)的arp查詢

確定了向外傳送ARP請求的發出地址 也即使VIP 地址

arp_announce - INTEGER

對網路介面上,本地IP地址的發出的,ARP迴應,作出相應級別的限制:

確定不同程度的限制,宣佈對來自本地源IP地址發出Arp請求的介面

0 - (預設) 在任意網路介面(eth0,eth1,lo)上的任何本地地址

1 -儘量避免不在該網路介面子網段的本地地址做出arp迴應. 當發起ARP請求的源IP地址是被設定應該經由路由達到此網路介面的時候很有用.此時會檢查來訪IP是否為所有介面上的子網段內ip之一.如果改來訪IP不屬於各個網路介面上的子網段內,那麼將採用級別2的方式來進行處理.

2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP資料包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇所有的網路介面的子網中外出訪問子網中包含該目標IP地址的本地地址. 如果沒有合適的地址被發現,將選擇當前的傳送網路介面或其他的有可能接受到該ARP迴應的網路介面來進行傳送.

限制了使用本地的vip地址作為優先的網路介面

  1. LVS/DR load balancer(director)與RS為什麼要在同一網段中?

從第一個問題中大家應該明白vs/dr是如何將請求轉發給RS的了吧?它是在資料鏈路層來實現的,所以director必須和RS在同一網段裡面。

  1. 為什麼director上eth0介面除了VIP另外還要配一個ip(即DIP)?

5.1 如果是用了keepalived等工具做HA或者Load Balance,則在健康檢查時需要用到DIP。

5.2 沒有健康檢查機制的HA或者Load Balance則沒有存在的實際意義。

  1. LVS/DR ip_forward需要開啟嗎?

不需要。因為director跟realserver是同一個網段,無需開啟轉發。

  1. director的vip的netmask一定要是255.255.255.255嗎?

lvs/dr裡,director的vip的netmask 沒必要設定為255.255.255.255,也不需要再去

route add -host $VIP dev eth0:0

director的vip本來就是要像正常的ip地址一樣對外通告的,不要搞得這麼特殊.