LVS 三種模式(VS/NAT、VS/DR、VS/TUN)

VS/NAT 地址轉換

    基於 NAT 的負載機制其實是經過修改數據包中的目的 IP 地址,將用戶的請求轉發給 Real Server 。算法

  1. 用戶請求 VIP,請求報文經過客戶端發送到 Director Server;
  2. Director Server 根據調度算法從後端 Real Server 中選出一臺,並將數據包中的目的地址(VIP)改成選定服務器的 IP 地址,並轉發報文;
  3. Real Server 接收請求報文處理,併發送響應報文到 Director Server(由於此時的源地址爲 RIP,這樣會暴露Real Server 的 IP 地址,與 LVS 集羣理念背道而馳);
  4. Director Server 接收響應報文,並修改源地址爲 VIP,發送響應報文給用戶;

    可是在這種機制下,Director Server 即接收請求報文,同時也接收響應報文,每每會成爲瓶頸的存在。後端

vip=192.168.0.200
rip1=10.10.0.1
rip2=10.10.0.2
ipvsadm -E -t $vip:80 -s wrr
ipvsadm -e -t $vip:80 -r $rip1 -m -w 3
ipvsadm -e -t $vip:80 -r $rip2 -m -w 1

    只需在 Director Server 使用 ipvsadm 工具配置便可bash

# 查看配置的 LVS 規則
ipvsadm -L -n

    

VS/DR 直接路由

    LVS 經常使用的負載機制,配合 keepalive 使用能夠做爲一個高吞吐量的集羣。服務器

  1. 用戶請求 VIP,在 VS/DR 機制下,Director Server 和 Real Server 都配置有 VIP,經過抑制 Real Server 的 ARP 響應來使只有 Director Server 會收到來自路由的數據包;
  2. Director Server 根據調度算法將請求負載到 Real Server,Director Server 會修改數據幀中的目標 MAC 地址爲選中的 Real Server 的 MAC 地址,並將數據幀發送出去;
  3. Real Server 收到源地址爲 VIP 的數據包時,因爲自身綁定了 VIP,因而接受並處理,接着響應一個源地址爲 VIP 目標地址的數據包,此時響應請求無需通過 Director Server 修改源地址,由於源地址已是 VIP 了,這樣就無需通過 Director Server 了,直接響應給用戶。

 

    那麼其中關鍵的一環就是讓請求報文只能到達 Director Server,一般用到的方法是修改內核參數:arp_ignore、arp_announce網絡

arp_ignore: INTEGER(整數)

        定義對目標地址爲本地 IP 的 ARP 詢問不一樣的應答模式
        
        0 - 默認:迴應任何網絡接口上對任何本地 IP 地址的 arp 查詢請求;
        1 - :只回答目標 IP 地址是來訪問網絡接口自身地址的 arp 查詢請求(0 和 1 不一樣在於,假設有 eth0:192.168.0.1/2四、eth1:10.10.0.1/24,那麼 eth0 網卡收到 10.10.0.1 的 arp 查詢,只有設置爲 0 時纔會迴應,1 只有在查詢 192.168.0.1 時纔回應)
        2 -:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內
        3 -: 不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應
        4-7: 保留未使用
        8 -:不迴應全部(本地地址)的arp查詢




arp_announce:INTEGER(整數)

        對網絡接口上本地 IP 地址發出的 ARP 迴應做出相應級別的限制:
        肯定不一樣程度的限制,宣佈對來自本地源 IP 地址發出 Arp 請求的接口
        0 - (默認) 在任意網絡接口上的任何本地地址
        1 -儘可能避免不在該網絡接口子網段的本地地址. 當發起ARP請求的源 IP 地址是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口上的子網段內 ip 之一.若是改來訪IP 不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.
        2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個 IP 數據包的源地址並嘗試選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中包含該目標 IP 地址的本地地址. 若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該 ARP 迴應的網絡接口來進行發送

 

    經過在 Real Server 執行:併發

    

vip=192.168.0.38
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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

    添加 VIP 到 lo,這樣就保證了 Real Server 的 eth0 網口收到 arp 查詢時不會響應,同時 vip 也綁定到 Real Server 上了。工具

 

VS/TUN:隧道

    機制跟 DR 同樣,只是在轉發的時候,它須要從新包裝IP報文。這裏的real server(圖中爲RIP)離得都比較遠。spa

    用戶請求之後,到director上的VIP上,它跟DR模型同樣,每一個realserver上既有RIP又有VIP,Director就挑選一個real server進行響應,但director和real server並不在同一個網絡上,這時候就用到隧道了,Director進行轉發的時候,必定要記得CIP和VIP不能動。code

    咱們轉發是這樣的,讓它的CIP和VIP不動,在它上面再加一個IP首部,再加的IP首部源地址是DIP,目標地址的RIP的IP地址。收到報文的RIP,拆掉報文之後發現了裏面還有一個封裝,它就知道了,這就是隧道。server

    其實數據轉發原理和DR是同樣的,不過這個我我的認爲主要是位於不一樣位置(不一樣機房);LB是經過隧道進行了信息傳輸,雖然增長了負載,但是由於地理位置不一樣的優點,仍是能夠參考的一種方案;

相關文章
相關標籤/搜索