天天看點

LVS的三種負載均衡技術,八大負載排程算法

1、LVS項目簡介

LVS是Linux Virtual Server的簡寫,意即Linux虛拟伺服器,是一個虛拟的伺服器叢集系統。本項目在1998年5月由章文嵩博士成立,是中國國内最早出現的自由軟體項目之一。章文嵩博士目前工作于阿裡集團,主要從事叢集技術、作業系統、對象存儲與資料庫的研究。

2、LVS功能及其原理

    針對高可伸縮、高可用網絡服務的需求,我們給出了基于IP層和基于内容請求分發的負載平衡排程解決方法,并在Linux核心中實作了這些方法,将一組伺服器構成一個實作可伸縮的、高可用網絡服務的虛拟伺服器。

    虛拟伺服器的體系結構如下圖所示,一組伺服器通過高速的區域網路或者地理分布的廣域網互相連接配接,在它們的前端有一個負載排程器(Load Balancer)。負載排程器能無縫地将網絡請求排程到真實伺服器上,進而使得伺服器叢集的結構對客戶是透明的,客戶通路叢集系統提供的網絡服務就像訪 問一台高性能、高可用的伺服器一樣。客戶程式不受伺服器叢集的影響不需作任何修改。系統的伸縮性通過在服務機群中透明地加入和删除一個節點來達到,通過檢 測節點或服務程序故障和正确地重置系統達到高可用性。由于我們的負載排程技術是在Linux核心中實作的,我們稱之為Linux虛拟伺服器(Linux Virtual Server)。

<a href="http://s3.51cto.com/wyfs02/M02/57/BC/wKiom1SjjvKRXIh5AADF0kYkg48593.jpg" target="_blank"></a>

圖:虛拟伺服器的結構

在1998年5月,我成立了Linux Virtual Server的自由軟體項目,進行Linux伺服器叢集的開發工作。同時,Linux Virtual Server項目是國内最早出現的自由軟體項目之一。

Linux Virtual Server項目的目标 :使用叢集技術和Linux作業系統實作一個高性能、高可用的伺服器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

目前,LVS項目已提供了一個實作可伸縮網絡服務的Linux Virtual Server架構,如下圖所示。在LVS架構中,提供了含有三種IP負載均衡技術的IP虛拟伺服器軟體IPVS、基于内容請求分發的核心Layer-7交 換機KTCPVS和叢集管理軟體。可以利用LVS架構實作高可伸縮的、高可用的Web、Cache、Mail和Media等網絡服務;在此基礎上,可以開 發支援龐大使用者數的、高可伸縮的、高可用的電子商務應用。

<a href="http://s3.51cto.com/wyfs02/M02/57/BA/wKioL1Sjj8Hi3812AAApx3_kgj4118.gif" target="_blank"></a>

圖:Linux虛拟伺服器架構

3、LVS的三種IP負載均衡技術

在排程器的實作技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡位址轉換(Network Address Translation)将一組伺服器構成一個高性能的、高可用的虛拟伺服器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡排程器産品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,我們提出通過IP隧道實作虛拟伺服器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實作虛拟伺服器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。是以,IPVS軟體實作了這三種IP負載均衡技術,它們的大緻原理如下(我們将在其他章節對其工作原 理進行較長的描述),

Virtual Server via Network     Address Translation(VS/NAT)

    通過網絡位址轉換,排程器重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真實伺服器;真實伺服器的響應封包通過排程器時,封包的源位址被重寫,再傳回給客戶,完成整個負載排程過程。

Virtual Server via IP Tunneling(VS/TUN)

    采用NAT技術時,由于請求和響應封包都必須經過排程器位址重寫,當客戶請求越來越多時,排程器的處理能力将成為瓶頸。為了解決這個問題,排程器把請求報 文通過IP隧道轉發至真實伺服器,而真實伺服器将響應直接傳回給客戶,是以排程器隻處理請求封包。由于一般網絡服務應答比請求封包大許多,采用 VS/TUN技術後,叢集系統的最大吞吐量可以提高10倍。

Virtual Server via Direct Routing(VS/DR)

      VS/DR通過改寫請求封包的MAC位址,将請求發送到真實伺服器,而真實伺服器将響應直接傳回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協定的要求,但是要求排程器與真實伺服器都有一塊網卡連 在同一實體網段上。

4、LVS的八大負載排程算法

針對不同的網絡服務需求和伺服器配置,IPVS排程器實作了如下八種負載排程算法:

輪叫(Round Robin)

   排程器通過"輪叫"排程算法将外部請求按順序輪流配置設定到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連接配接數和系統負載。

權重輪叫(Weighted Round     Robin)

    排程器通過"權重輪叫"排程算法根據真實伺服器的不同處理能力來排程通路請求。這樣可以保證處理能力強的伺服器處理更多的通路流量。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。

最少連結(Least     Connections)

    排程器通過"最少連接配接"排程算法動态地将網絡請求排程到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統性能,采用"最小連接配接"排程算法可以較好地均衡負載。

權重最少連結(Weighted Least     Connections)

    在叢集系統中的伺服器性能差異較大的情況下,排程器采用"權重最少連結"排程算法優化負載均衡性能,具有較高權值的伺服器将承受較大比例的活動連接配接負載。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。

基于局部性的最少連結(Locality-Based Least Connections)

         "基于局部性的最少連結" 排程算法是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。該算法根據請求的目标IP位址找出該目标IP位址最近使用的伺服器,若該伺服器 是可用的且沒有超載,将請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處于一半的工作負載,則用"最少連結"的原則選出一個可用的服務 器,将請求發送到該伺服器。

帶複制的基于局部性最少連結(Locality-Based Least Connections with Replication)

    "帶複制的基于局部性最少連結"排程算法也是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。它與LBLC算法的不同之處是它要維護從一個 目标IP位址到一組伺服器的映射,而LBLC算法維護從一個目标IP位址到一台伺服器的映射。該算法根據請求的目标IP位址找出該目标IP位址對應的服務 器組,按"最小連接配接"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,将請求發送到該伺服器,若伺服器超載;則按"最小連接配接"原則從這個叢集中選出一 台伺服器,将該伺服器加入到伺服器組中,将請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,将最忙的伺服器從伺服器組中删除,以降低複制的 程度。

目标位址散列(Destination     Hashing)

    "目标位址散列"排程算法根據請求的目标IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。

源位址散列(Source Hashing)

    "源位址散列"排程算法根據請求的源IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。

本文轉自 dengaosky 51CTO部落格,原文連結:http://blog.51cto.com/dengaosky/1964508,如需轉載請自行聯系原作者