2016/5/9

三種 LVS 的模式:LVS-NAT、LVS-TUN、LVS-DR


LVS(Linux Virtual Server) 是基於 Layer 4 的負載均衡,不支持複雜特性的負載均衡,效率比 Layer 7 高,nginx、haproxy都是 Layer 7 的負載均衡,可以根據特性進行負載均衡,比較靈活。


LVS 是利用iptables的 INPUT chain,攔截訪問集群服務的資料封包,修改進入 server 的資料 header,不同類型更改 header 的方式也不一樣,轉發給後端的RS,最後RS處理請求後再將結果回傳給 client。


LVS 有三種模式:LVS-NAT、LVS-TUN、LVS-DR


  • LVS-NAT

Virtual Server via NAT


LVS-NAT 的實體 Server 架構圖:




這個是通過網路地址轉換的方法來實現的。首先 Load Balancer 接收到客戶的request 時(目的IP為VIP),根據調度演算法決定將 request 發送給哪個後端的 Real Server。然後把客戶端發送的請求數據包的目標IP地址及端口改成後端真實服務器的IP地址(Real IP),這樣 Real Server 就能夠收到客戶的 request 了。Real Server 處理完成後,查看 default gateway(NAT模式下我們需要把 Real Server 的 default gateway 設置為 Load Balancer。)把 reqsponse 發送給 Load Balancer,Load Balancer 把 source address 改成虛擬地址(VIP)然後發送回給客戶端。


VS-NAT基本性質:


  1. cluster nodes (Real Server) 和 Load Balancer 在同一網段
  2. Real Server 的 RIP 地址一般為 Private IP
  3. Load Balancer 負責處理 client 和 Real Server 之間的所有進出的封包
  4. Real Server 將 Load Balancer 的內網 IP 作為 default gateway
  5. 只需要在 Load Balancer 上配置一個 Public IP 就可以了
  6. Load Balancer 支援 Port Mapping
  7. Real Server 可以使用任何一種 OS
  8. 因為 Load Balancer 負責所有資料的進出,所以在大型應用場景中,Load Balancer 容易成為系統瓶頸。因為 NAT 的關係,Load Balancer 必須將 reqeust 和 response 進行 IP 改寫,因此網站訪問量比較大的時候 Load Balancer 會有比較大的瓶頸,一般要求最多只能10-20台節點


  • LVS-TUN

Virtual Server via IP Tunneling




和 NAT 模式不同的是,Load Balacner 和 Real Server 之間的傳輸不用改寫IP地址。而是把 client request 封裝在一個 IP Tunnel 裡面,然後發送給 Real Server,Real Server 接收到之後解開 IP Tunnel 後,處理結果會直接把通過自己的 Pulbic IP 發送給 client,不用經過 Load Balancer。


VS-TUN 的基本性質:


  1. cluster nodes 可跨越 Internet (處於不同的物理網路中)
  2. Real Server 的 Real IP 必須是 Public IP
  3. Load Balancer 只需要處理 reqeust,response 由 Real Server 直接發送給 client
  4. 只有支援 Tunnel 功能的 OS 才能用於 Real Server
  5. Load Balancer 不支援 Port Mapping
  6. Real Server 的 default gateway 不能指向 Load Balancer
  7. Real Server 主機需要綁定VIP地址在LO接口上(各個服務器有相同的VIP和單獨的RIP)


  • LVS-DR

Virtual Server via Direct Routing




DR模式會改寫request的目標 MAC 地址,將 request 轉發給 Real Server,而 Real Server 的處理結果會直接回傳給 Client。當客戶端發送 request 給 cluster 提供的服務時,request 會直接發往 Load Balancer,Load Balancer 會檢查 request 中的 destination address 和 port number,如果和服務匹配,那麼就會根據調度算法來選擇一個 Real Server 處理 request 並且將此次連記入 hash table 中。然後 Load Balancer 轉發 request 給選擇的 Real Server。當連接結束或超時後,這個連接記錄將從 hash table 中刪除。


VS-DR的基本性質:


  1. Load Balancer 與 Real Server 必須在同一個物理網路中;
  2. Real Server 的 RIP 地址不必是私有地址,如可為 Public IP 可以實現遠端管理
  3. Load Balancer 只負責處理 request,response 由 Real Server直接發往 client
  4. Real Server 不能將 Gateway 指向 Load Balancer,而是直接配置為上層路由的 gateway
  5. Load Balancer 不支援 port mapping
  6. 大多數 OS 都可以用在 Real Server
  7. Real Server 主機需要綁定 VIP 地址在 LO 接口上 (有相同的VIP和單獨的RIP),並且需要設定 ARP 抑制(由於網絡接口都會進行ARP廣播回應,但 cluster 的其他機器都有這個 VIP 的 lo port,都回應就會衝突。所以我們需要把 Real Server 的 lo 接口的 ARP 回應關閉掉)

LVS 的調度演算法


LVS集群的負載調度


LVS Scheduling Method LVS的調度方法可以分為兩大類:


1.Fixed Scheduling Method 靜態調度方法


  • RR
    輪詢,假設所有服務器處理性能均相同時使用,當所有 Server 的性能不一,request 服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。
  • WRR
    加權輪詢,假設服務器 A 的權值為 1,B 的權值為 2,則表示服務器B的處理性能是A的兩倍。加權輪詢調度算法是按權值的高低和輪詢方式分配請求到各服務器。
  • DH
    destination address hash
  • SH
    source address hash,SH 與 DH 可用在 firewall clustering 裡面。

2.Dynamic Scheduling Method 動態調度方法


  • LC (最少連接)
    把新的連接請求分配到當前連接數最小的服務器,當各個服務器的處理能力不同時,該算法並不理想,因為TCP連接處理請求後會進入TIMEWAIT狀態,TCP的TIMEWAIT一般 為2分鐘,此時連接還佔用服務器的資源,所以會出現這樣情形:性能高的服務器已處理所收到的連接,連接處於TIME_WAIT狀態,而性能低的服務器忙於處理所收到的連接,還不斷地收到新的連接請求。
  • WLC 加權最少連接
  • SED Shortest Expected Delay Scheduling 最少期望延遲
    指定期望中最短 delay 時間的 Real Server,expected delay 是以 (Ci + 1) / Ui 計算,i 是第 i 個 server,Ci 是第 i 個 server 的連線數,Ui 是固定的服務速度,也可以視為加權值,服務速度越短,計算出來的結果越大。

  • NQ Never Queue Scheduling 從不排隊調度方法
    如果有 idle server,就會馬上選擇這個 server,如果沒有 idle server,就採用上面的 SED (Shortest Expected Delay Scheduling) 演算法,找到適合的 server。

  • LBLC Locality-Based Least Connections Scheduling 基於局部性的最少鏈接調度
    針對 request 的 destination IP address 的負載均衡調度,目前主要用於Cache cluster,因為在 Cache 集群中,client request 的目標IP地址是變化的。這裡假設任何後端服務器都可以處理任一請求,算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的request 轉發到同一台服務器,來提高各台服務器的訪問局部性和主存Cache命中率,從而整個集群系統的處理能力。

  • LBLCR Locality-Based Least Connections with Replication Scheduling 帶複製的基於局部性最少鏈接調度
    也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一台服務器的映射。對於一個“熱門”站點的服務請求,一台Cache 服務器可能會忙不過來處理這些請求。這時,LBLC調度算法會從所有的Cache服務器中按“最小連接”原則選出一台Cache服務器,映射該“熱門”站 點到這台Cache服務器,很快這台Cache服務器也會超載,就會重複上述過程選出新的Cache服務器。這樣,可能會導致該“熱門”站點的映像會出現 在所有的Cache服務器上,降低了Cache服務器的使用效率。LBLCR調度算法將“熱門”站點映射到一組Cache服務器(服務器集合),當該“熱 門”站點的請求負載增加時,會增加集合裡的Cache服務器,來處理不斷增長的負載;當該“熱門”站點的請求負載降低時,會減少集合裡的Cache服務器 數目。這樣,該“熱門”站點的映像不太可能出現在所有的Cache服務器上,從而提供Cache集群系統的使用效率。


三種模式的比較


三種 IP 負載均衡技術的優缺點比較


選項 VS/NAT VS/TUN VS/DR
Server OS 任意 OS 要支援 IP Tunnel (目前只有 linux 有支援) 多數(支援 Non-ARP )
服務器網路 LAN LAN/WAN LAN
Real Server 數目(100M網絡) 10-20 100 100
Server 的網路 Gateway Load Balancer 自己的路由 自己的路由
效率 一般 最高
擴展性 差,所有 traffic 都要經過 Load Balancer 好,但需要建立 IP Tunnel,適合用在跨越 Data Center 的環境 好,但要求 Load Balancer 跟 Real Server 在同一個 LAN 裡面
Server 安全性 好,Real Server 使用內部 IP,隱密 差,Real Server 使用 Public IP 差,Real Server 使用 Public IP
Public IP 需求 需要一個 IP 作為 Server VIP(Virtual IP) 除了 VIP 之外,每個 Server 都需要有合法的 IP 可直接連結到客戶端 除了 VIP 之外,每個 Server 都需要有合法的 IP 可直接連結到客戶端

References


初識LVS,lvs/dr 和 lvs/nat lvs/tun


Lvs之NAT、DR、TUN三種模式的應用配置案例


LVS三種模式配置及優點缺點比較


LVS-DR和LVS-NAT以及LVS-TUN


從一個開發的角度看負載均衡和LVS