LVS 常見問題

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

1.1 vs/dr 本身不會關心 IP 層以上的信息,即使是端口號也是 tcp/ip 協議棧去判斷是否正確,vs/dr 本身主要做這麼幾個事:
1)接收 client 的請求,根據你設定的負載均衡算法選取一臺 realserver 的 ip;
2)以選取的這個 ip 對應的 mac 地址作爲目標 mac,然後重新將 IP 包封裝成幀轉發給這臺 RS;
3)在 hashtable 中記錄連接信息。
vs/dr 做的事情很少,也很簡單,所以它的效率很高,不比硬件負載均衡設備差多少。
數據包、數據幀的大致流向是這樣的:client --> VS --> RS --> client
1.2 前面已作了回答,vs/dr 不會修改 IP 包的內容.
2. RealServer 爲什麼要在 lo 接口上配置 VIP,在出口網卡上配置 VIP 可以嗎?

2.1 既然要讓 RS 能夠處理目標地址爲 vip 的 IP 包,首先必須要讓 RS 能接收到這個包。
在 lo 上配置 vip 能夠完成接收包並將結果返回 client。
2.2 答案是不可以將 VIP 設置在出口網卡上,否則會響應客戶端的 arp request,造成 client/gateway
arp table 紊亂,以至於整個 loadbalance 都不能正常工作。

3. 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,那有可能是會出問題滴

4. LVS/DR loadbalancer(director)與 RS 爲什麼要在同一網段中?
從第一個問題中大家應該明白 vs/dr 是如何將請求轉發給 RS 的了吧?它是在數據鏈路層來實現的,所以 director 必須和 RS 在同一網段裏面。

5. 爲什麼 director 上 eth0 接口除了 VIP 另外還要配一個 ip(即 DIP)?
5.1 如果是用了 keepalived 等工具做 HA 或者 LoadBalance,則在健康檢查時需要用到 DIP
5.2 沒有健康檢查機制的 HA 或者 Load Balance 則沒有存在的實際意義.

6. LVS/DRip_forward 需要開啓嗎?
不需要。因爲 director 跟 realserver 是同一個網段,無需開啓轉發。

7. lvs/dr 裏,director 的 vip 的 netmask 沒必要設置爲 255.255.255.255,也不需要再去
route add -host $VIP dev eth0:0
director 的 vip 本來就是要像正常的 ip 地址一樣對外通告的,不要搞得這麼特殊.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章