LVS-負載均衡器理論篇

LVS作爲負載均衡器
1 什麼是LVS? 

  LVS全稱Linux Virtural Server ,它是有章文嵩(現滴滴)主持的自由軟件項目,LVS是一個負載均衡/高可用性集羣,主要針對大業務的網絡應用,它建立在一個主控服務器,以及若干真實服務器所組成的集羣上,Real-Server 負責實際提供服務,主控服務器根據指定的調度算法對Real-Server進行控制。集羣的結構對於用戶來說是透明的,客戶端只與單個IP(集羣系統的虛擬IP)進行通信,從客戶的角度講只是單個服務器提供服務。LVS應用的範例:騰訊的CDB,大型網站的MySQL集羣,HTTPS/HTTPs應用,FTP,DNS。Telnet,SMTP等應用協議。

2 LVS拓撲

 如圖1-1

3 LVS體系結構 一般情況下LVS集羣採用3層數據結構

 【】負載調度器(Load balancer):它是整個集羣對外的前端機,負責將用戶的請求發送到一組服務器上執行,而用戶認爲服務來自一個IP地址,(此處不適用於CDN加速過的源站)。 

 【】服務器池(Server Pool):它是一組真正執行客戶請求的服務器,執行的服務有Web、 Mail、FTP、DNS。 

 【】共享存儲(Shared Storage):它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

  負載調度器是服務器集羣系統的唯一入口點(Simple Entry Point),採用IP負載均衡技術和基於內容的請求分發技術,或將2者相結合。在IP負載均衡技術中,要求服務器池中有相同的內容提供相同的服務,當用戶的請求到達時,調度器只是根據服務器的負載情況和設定的調度算法從服務器池中選出一個服務器,將該請求轉發到選出的服務器上,並記錄這一次調度。當這個請求的其它報文到達時,也會被轉發到前面選出的服務器上。在基於內容的請求分發技術中,服務器可以提供不同的服務,當用戶請求到達時,調度器可根據請求的內容選擇執行請求的服務器。

  優點:調度開銷小,高吞吐率,這一操作在操作系統的核心空間中完成的。服務器池的節點數目是可變的,可以隨着系統的負載增加節點的數量,來滿足不斷增長的業務量。
  共享存儲通常是數據庫,網絡文件系統或者分佈式文件系統(HDFS) Hadoop 實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS. 可能出現的問題:當不同的服務器上的應用程序同時訪問分佈式文件系統上的同一資源時,只有解決應用程序的訪問衝突才能使得資源處於一致狀態。此時需要一個分佈式鎖管理器。 負載調度器、服務器池和共享存儲系統之間通過高速網絡相連接。

  40GB交換網絡和10GB網絡。主要爲了避免當系統規模擴大時網速成爲整個系統的瓶頸。集羣系統監視器是爲了監視系統的狀態。還可以進行系統監測,並進行系統的配置和管理。 

  3.1 通過NAT實現虛擬服務器(VS/NAT) NAT(Network Address Translation,NAT) 

    譯爲:網絡地址轉換協議。將私有地址轉換成公網地址 NAT原理是報文頭(目標地址、源地址和端口等)被正確改寫後,客戶端相信它們連接的是同一個IP地址而不同的IP地址的服務器組也認爲它們是與客戶直接相連的。由此,可以用NAT方法將不同IP地址的 並行網絡服務變成一個在同一IP地址的虛擬服務。 用戶通過虛擬服務器的IP地址(Virtural IP Address)訪問網絡服務時,請求報文到達調度器,調度器根據連接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址和端口(VIP Addr) 寫成選定服務器的地址和端口,最後將修改好的報文發送給選出的服務器。同時調度器在連接Hash表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原先選定的服務器地址和端口,執行同樣的改寫操作,並將報文傳給原選選定的服務器。當來自真實的服務器的響應報文經過調度器時,調度器將報文的源地址和源端口改爲VIP的地址和端口。再把報文發給客戶。 那麼Hash表中的狀態怎麼更新呢?這個是根據TCP的連接狀態。
   在默認情況下:SYN-Timeout:1min ESTABLISHED:15min FIN-Timeout:1min UDP-Timeout:5min,當連接終止或者超時時,調度器會將這個 連接從連接的Hash表中刪除。 最終:用戶所看到的只是VIP地址,而服務器集羣的結構對用戶而言是透明的,針對改寫後的報文應用增量調整Checksum的算法調整TCP Checksum的值,避免掃描整個報文來計算Checksum的開銷。

   3.2 通過IP隧道實現虛擬服務器(VS/Tunnel) VS/NAT和IP隧道的區別: 

    在VS/NAT的集羣系統中,請求和響應的數據報文都需要通過負載調度器,根據應用服務有這麼一個特點,請求報文較短而響應報文往往包含大量的數據,如果能將請求和響應分開處理,即負載調度器只負責調度請求,而響應直接返回給用戶。這樣將提高整個集羣系統的吞吐量。 IP隧道(IP tunneling)是將一個IP報文封裝到另一個IP報文中的技術,這可以使得目前爲一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技術也稱爲IP封裝技術,主要用於移動主機和私網,其中隧道是靜態建立的,隧道一端有一個IP地址,另一端也有一個唯一的地址。利用IP隧道技術將請求報文封裝並轉發給後端服務器,響應報文能從後端服務器直接返回給客戶, 此時的後端服務是一組
而非一個,所以不可能靜態建立一一對應的隧道,而是動態的選擇一臺服務器,將請求報文封裝並轉發給選出的服務器,這樣利用IP隧道的原理將一組服務器上的網絡服務組成在一個IP地址上的虛擬網絡服務。

   3.3 通過直接路由實現虛擬服務器(VS/DR) VS/DR模式:

    調度器和服務器組都必須在物理上有一個網卡通過局域網相連,VIP地址和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文,所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外是不可見的,只是用於處理目標地址爲VIP的網絡請求. VS/DR和上面2中方式的調度和管理一樣,但是它的報文轉發方法不同,它將報文直接路由給目標服務器。在VS/DR中,調度器根據各個服務器的負載情況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址修改爲選出的服務器MAC,再將修改後的數據幀在服務器組所在的局域網內發送。(這也是LVS/DR要求服務器在同一個局域網的原因),因爲數據幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數據幀,從中可以獲得IP報文,當服務器發現報文的目標地址(VIP)是在本地的網絡設備上,服務器處理這個報文後,會根據路由表將響應報文直接返回給客戶.在VS/DR中,根據默認的TCP/IP協議棧處理,請求報文的目標地址爲VIP,響應報文的源地址肯定也爲VIP,所以響應報文不需要做修改,可以直接返回給客戶。用戶得到正常的服務,結果對用戶是透明的。 VS/DR負載調度器與VS/TUN一樣,只處於從客戶到服務器的半連接中,按照半連接的TCP有限狀態機 進行狀態轉移。

   3.4 三種模式的優缺點: 

    3.4.1 VS/NAT模式 

      優點:VS/NAT只需要一個IP地址配置在調度器上,服務器組可以用私有的IP地址。
      缺點:伸縮能力有限。調度器會是一個問題。解決方法:採用混合模式,VS/TUN和VS/DR模式. 在DNS混合集羣系統中,有若干個VS/NAT負載調度器,每個負載調度器帶有自己的服務器集羣, 同時這些負載調度器又通過RR-DNS組成簡單的域名(RR-DNS:Round-Robin Domain Name System)。

     3.4.2 VS/TUN模式
      優點:負載調度器只將請求調度到不同的後端服務器,後端將響應直接返回給客戶。 這樣可以提高整個集羣的吞吐量,VS/TUN對服務器有要求必須支持IPTuneneling或IP Encapsulation協議,目前IP Tunneling正在成爲標準協議(GRE協議)
     3.4.3 VS/DR模式
      優點:負載調度器只將請求調度到不同的後端服務器,後端將響應直接返回給客戶。(方式不同)後端通過網絡路由(OSPF等等)返回給客戶。與VS/TUN模式相比沒有IP隧道開銷,但是要求服務器上有2塊網卡且必須連接在同一個物理網段上,服務器的設備名稱不作ARP響應,或者能將報文重定向到本地的Socket端口上。三種模式中VS/DR模式轉發效率是最高的.

4 LVS的算法方式

    4.1 輪詢調度(RR:Round Robin) 調度器通過用戶的請求順序依次調度
    4.2 加權調度(wrr:Weighted Round Robin) 根據服務器配置的權重來調度
    4.3 目標地址散列(Destionation Hashing) 根據請求的目標地址,作爲散列Key從靜態列表找出對應的服務器,該服務器可用並且沒有超載,就調度。否則返回空。
    4.4 源地址散列(Source Hashing) 根據請求的源IP地址,作爲散列Key從靜態列表找出對應的服務器, 該服務器可用並且沒有超載,就調度。否則返回空。
    4.5 最少連接(Least Connections) 據服務器的最少連接數來調度
    4.6 加權最少連接(WeightedLeast Connections) 根據配置較高權值服務器負載情況,動態修改其權值。
    簡單算法:(active*256+inactive)/weight【(活動的連接數+1)/除以權重】(誰的小,挑誰)
    4.7 基於局部性的最少連接(Locality-Based Least Connections) 根據請求的目標IP地址找出該目標IP地址最近使用的服務器,該服務器可用並且沒有超載,就調度。如果超載或者不可用,則用最少連接的原則選出一個可用的服務器,將請求發送到該服務器。
    4.8 LBLCR(Locality-Based Least Connections withReplication):帶複製的基於局部性最少鏈接 帶複製的基於局部性最少鏈接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,該服務器可用並且沒有超載,就調度.若服務器超載,則按“最小連接”原則選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。
    4.9 SED(Shortest Expected Delay):最短期望延遲,基於WLC
    簡單算法:(active+1)*256/weight 【(活動的連接數+1)*256/除以權重】 3.5.10 NQ(never queue):永不排隊(改進的sed)
以上前4種算法爲靜態調度,後6種是動態調度。

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