LVS負載均衡理論以及算法概要


一、 LVS簡介

LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。LVS 是一個實現負載均衡集群的開源軟件項目,LVS 架構從邏輯上可分為調度層、Server 集群層和共享存儲。

負載均衡(LB) 集群的架構和原理很簡單,就是當用戶的請求過來時,會直接分發到 Director Server 上,然后它把用戶的請求根據設置好的調度算法,智能均衡地分發到后端真正服務器 (real server) 上。為了避免不同機器上用戶請求得到的數據不一樣,需要用到了共享存儲,這樣保證所有用戶請求的數據是一樣的。

二、 LVS體系結構

使用LVS架設的服務器集群系統有三個部分組成:最前端的負載均衡層,用Load Balancer表示,中間的服務器群組層,用Server Array表示,最底端的數據共享存儲層,用Shared Storage表示,在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。
LVS體系結構如圖1所示:

​ 圖 LVS的體系結構

下面對LVS的各個組成部分進行詳細介紹:

Load Balancer層

位於整個集群系統的最前端,有一台或者多台負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。

Server Array層

由一組實際運行應用服務的機器組成,Real Server可以是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。

Shared Storage層

是為所有Real Server提供共享存儲空間內容一致性的存儲區域,在物理上,一般有磁盤陣列設備組成,為了提供內容的一致性,一般可以通過NFS網絡文件系統共享數據,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以采用集群文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。

從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的操作系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就可以支持LVS功能,而FreeBSD作為Director Server的應用還不是很多,性能也不是很好。對於Real Server,幾乎可以是所有的系統平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

三、 LVS集群的特點

1. IP負載均衡與負載調度算法

1.1 IP負載均衡技術

負載均衡技術有很多實現方案,有基於DNS域名輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度算法中,執行效率最高的是IP負載均衡技術

LVS的IP負載均衡技術是通過IPVS模塊來實現的,IPVS是LVS集群系統的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然后由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。

當用戶的請求到達負載調度器后,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:

VS-NAT: 即(Virtual Server via Network Address Translation)

也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改成選定的Real Server的相應端口,最后將報文請求發送到選定的Real Server。在服務器端得到數據后,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然后把數據發送給用戶,完成整個負載調度過程。
可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸

示意圖:

NAT模式詳細解釋,可以參考我的這兩篇文章:

LVS負載均衡NAT模式原理介紹以及配置實戰

VS-TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技術實現虛擬服務器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS-TUN方式中,調度器采用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網絡。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。

圖示:

TUN模式詳細解釋,可以參考我的這兩篇文章:

LVS負載均衡IP隧道模式原理介紹以及配置實戰

VS-DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技術實現虛擬服務器。它的連接調度和管理與VS-NAT和VS-TUN中的一樣,但它的報文轉發方法又有不同,VS-DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS-TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上

DR模式詳細解釋,可以參考我的這兩篇文章:

LVS負載均衡之DR模式原理介紹

1.2 負載調度算法

上面我們談到,負載調度器是根據各個服務器的負載情況,動態地選擇一台Real Server響應用戶請求,那么動態選擇是如何實現呢,其實也就是我們這里要說的負載調度算法,根據不同的網絡服務需求和服務器配置,IPVS實現了如下八種負載調度算法,這里我們詳細講述最常用的四種調度算法,剩余的四種調度算法請參考其它資料。

輪詢調度(Round Robin)
“輪叫”調度也叫1:1調度,調度器通過“輪叫”調度算法將外部用戶請求按順序1:1的分配到集群中的每個Real Server上,這種算法平等地對待每一台Real Server,而不管服務器上實際的負載狀況和連接狀態。

加權輪叫調度(Weighted Round Robin)
“加權輪叫”調度算法是根據Real Server的不同處理能力來調度訪問請求。可以對每台Real Server設置不同的調度權值,對於性能相對較好的Real Server可以設置較高的權值,而對於處理能力較弱的Real Server,可以設置較低的權值,這樣保證了處理能力強的服務器處理更多的訪問流量。充分合理的利用了服務器資源。同時,調度器還可以自動查詢Real Server的負載情況,並動態地調整其權值。

最少鏈接調度(Least Connections)
“最少連接”調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集群系統的真實服務器具有相近的系統性能,采用“最小連接”調度算法可以較好地均衡負載。

加權最少鏈接調度(Weighted Least Connections)

“加權最少鏈接調度”是“最少連接調度”的超集,每個服務節點可以用相應的權值表示其處理能力,而系統管理員可以動態的設置相應的權值,缺省權值為1,加權最小連接調度在分配新連接請求時盡可能使服務節點的已建立連接數和其權值成正比。

基於局部性的最少鏈接(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)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

2. 高可用性

LVS是一個基於內核級別的應用軟件,因此具有很高的處理性能,用LVS構架的負載均衡集群系統具有優秀的處理能力,每個服務節點的故障不會影響整個系統的正常使用,同時又實現負載的合理均衡,使應用具有超高負荷的服務能力,可支持上百萬個並發連接請求。如配置百兆網卡,采用VS/TUN或VS/DR調度技術,整個集群系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。

3. 高可靠性

LVS負載均衡集群軟件已經在企業、學校等行業得到了很好的普及應用,國內外很多大型的、關鍵性的web站點也都采用了LVS集群軟件,所以它的可靠性在實踐中得到了很好的證實。有很多以LVS做的負載均衡系統,運行很長時間,從未做過重新啟動。這些都說明了LVS的高穩定性和高可靠性。

4. 適用環境

LVS對前端Director Server目前僅支持Linux和FreeBSD系統,但是支持大多數的TCP和UDP協議,支持TCP協議的應用有:HTTP,HTTPS ,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。支持UDP協議的應用有:DNS,NTP,ICP,視頻、音頻流播放協議等。
LVS對Real Server的操作系統沒有任何限制,Real Server可運行在任何支持TCP/IP的操作系統上,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows等。

5. 開源軟件

LVS集群軟件是按GPL(GNU Public License)許可證發行的自由軟件,因此,使用者可以得到軟件的源代碼,並且可以根據自己的需要進行各種修改,但是修改必須是以GPL方式發行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM