LVS學習

 LVS介紹

博客轉自:http://superproxy.github.io/docs/lvs/index.html

1.1 簡介

負載均衡技術有很多實現方案,有基於DNS域名輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法。本文介紹基於傳輸層的負載均衡器LVS

    LVSLinux Virtual Server的簡稱,也就是Linux虛擬服務器用現在的觀點來看就是個4層(傳輸層tcp/udp)的負責均衡器。 它是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。

LVS技術要達到的目標是:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器羣集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。

LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集羣系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。  

1.2 主要功能

LVS目前有三種IP負載均衡技術(VS/NATVS/TUNVS/DR);十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq 

 

1.3  優點

1.3.1 功能特性

1、抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生;

2、配置性比較低,這是一個缺點也是一個優點,因爲沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人爲出錯的機率;

3、工作穩定,自身有完整的雙機熱備方案;

4、無流量,保證了均衡器IO的性能不會收到大流量的影響;

5、應用範圍比較廣,可以對所有應用做負載均衡; 

1.3.2 高可用性

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

1.3.3  高可靠性

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

1.3.4  適用環境

LVS對前端Director Server目前僅支持LinuxFreeBSD系統,但是支持大多數的TCPUDP協議,支持TCP協議的應用有:HTTPHTTPS FTPSMTP,,POP3IMAP4PROXYLDAPSSMTP等等。支持UDP協議的應用有:DNSNTPICP,視頻、音頻流播放協議等。

LVSReal Server的操作系統沒有任何限制,Real Server可運行在任何支持TCP/IP的操作系統上,包括Linux,各種Unix(如FreeBSDSun SolarisHP Unix等),Mac/OSWindows等。 

1.4 缺點

需要網絡環境的支持

不能針對上層協議分析

如果做成硬件會更完美

1.5 類似產品

1.5.1 介紹

  現在網絡中常見的負載均衡主要分爲兩種:一種是通過硬件來進行進行,常見的硬件有比較昂貴的NetScalerF5RadwareArray等商用的負載均衡器,也有類似於LVSNginxHAproxy的基於Linux的開源的負載均衡策略

商用負載均衡裏面NetScaler從效果上比F5的效率上更高。對於負載均衡器來說,不過商用負載均衡由於可以建立在四~七層 協議之上,因此適用 面更廣所以有其不可替代性,他的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網絡服務來說暫時還沒有需要使用。

另一種負載均衡的方式是通過軟件:比較常見的有LVSNginxHAproxy等,其中LVS是建立在四層協議上面的,而另外NginxHAproxy是建立在七層協議之上的,下面分別介紹關於

Nginx的特點是:

1、工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構;

2Nginx對網絡的依賴比較小;

3Nginx安裝和配置比較簡單,測試起來比較方便;

4、也可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的併發;

5Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測;

6Nginx對請求的異步處理可以幫助節點服務器減輕負載;

7Nginx能支持httpEmail,這樣就在適用範圍上面小很多;

8、不支持Session的保持、對Big request header的支持不是很好,另外默認的只有Round-robinIP-hash兩種負載均衡算法。

HAProxy的特點是:

1HAProxy是工作在網絡7層之上。

2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作

3、支持url檢測後端的服務器出問題的檢測會有很好的幫助。

4、更多的負載均衡策略比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權參數哈希(Weighted Parameter Hash)已經實現

5、單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度。

6HAProxy可以對Mysql進行負載均衡,對後端的DB節點進行檢測和負載均衡。 

 

1.5.2 軟負載均衡器性能對比

lvs2815.png 

上圖是網上的數據,LVS的實際性能可能沒有展示出來,肯定要比Nginx的併發量高。

 

 LVS原理篇

2.1 工作模式

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

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

 

注意:

director server ld lvs負責均衡器、調度器都是同一個概念

realserver 、後端服務器也代表一個意思。

2.1.1 轉發機制

2.1.1.1  三種轉發機制

VS/NAT: 即(Virtual Server via Network Address Translation

也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改成選定的Real Server的相應端口,最後將報文請求發送到選定的Real Server。在服務器端得到數據後,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然後把數據發送給用戶,完成整個負載調度過程。

可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱爲瓶頸。

 VS/TUN :即(Virtual Server via IP Tunnelingl 

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

 VS/DR: 即(Virtual Server via Direct Routingl 

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

2.1.1.2 三種轉發機制流程

2.1.1.2.1 NAT

lvs4185.png 

 

1. 客戶端發起請求到load balancer的虛擬ip

2. load banlancer把客戶請的目標地址改寫爲其中一個real server的,源地址改成不變。

3. realserver接受請求,並返回給load banlancer響應

4. load banlancer接受到響應,修改目標地址爲不變,源地址改成自己的。

5. 客戶端接受loader banlancer的響應

 

注意:

如果客戶端和realserver在同一個網段,不會執行nat轉換,realserver直接返回響應,客戶端也會拒收此報文。

2.1.1.2.2 TUNNEL

lvs4442.png 

 

1. 客戶端發起請求到load balancer的虛擬ip

2. load banlancer把客戶的請求包包裹,然後轉發給其中的一個real server

3. realserver接受請求,解包。得到客戶端發來的原始包。

4. realserver處理,把結果通過vip直接返回給客戶端。

5. 客戶端接受real server的響應。 

注意:

a. load balancerrealserver 直接通過ip tunnel技術重新封裝、解包

b. load balancer和 realserver 使用相同的vip

c. load balnacerrealserver可以不再同一個網絡

2.1.1.2.3  DR

lvs4728.png 

 

1. 客戶端發起請求到load balancer的虛擬ip

2. load banlancer把客戶發送的包,修改源mac地址爲vip的,目的mac地址爲realserver的,然後發送給realserver

3. realserver接受請求,並處理,然後把結果通過vip直接返回給客戶端。

4. 客戶端接受real server的響應。 

注意

a. load balancer和 realserver 使用相同的vip

b. load balancerrealserver必須在同一個網絡,因爲load balancer需要知道realservermac地址。  

2.1.1.2.4 LVS-DR工作原理詳解 (51CTO)

如下圖所示:VS/DR的體系結構:

lvs5040.png 

我將結合這幅原理圖及具體的實例來講解一下LVS-DR的原理,包括數據包、數據幀的走向和轉換過程。

官方的原理說明:Director接收用戶的請求,然後根據負載均衡算法選取一臺realserver,將包轉發過去,最後由realserver直接回復給用戶。

實例場景設備清單:

lvs5179.png 

說明:我這裏爲了方便,client是與vip同一網段的機器。如果是外部的用戶訪問,將client替換成gateway即可,因爲IP包頭是不變的,變的只是源mac地址。

① client向目標vip發出請求,Director接收。此時IP包頭及數據幀頭信息如下:

lvs5312.png 

② VS根據負載均衡算法選擇一臺active的realserver(假設是192.168.57.122),將此RIP所在網卡的mac地址作爲目標mac地址,發送到局域網裏。此時IP包頭及數據幀頭信息如下:

lvs5417.png 

③ realserver(192.168.57.122)在局域網中收到這個幀,拆開後發現目標IP(VIP)與本地匹配,於是處理這個報文。隨後重新封裝報文,發送到局域網。此時IP包頭及數據幀頭信息如下:

lvs5520.png 

④ 如果client與VS同一網段,那麼client(192.168.57.135)將收到這個回覆報文。如果跨了網段,那麼報文通過gateway/路由器經由Internet返回給用戶。

 

說明:

lvs的作者對這個寫了詳細的描述,請參考 http://www.linuxvirtualserver.org/zh/lvs3.html LVS集羣中的IP負載均衡技術

 

2.1.1.3 三種轉發機制的優缺點

 

◆Virtual Server via NAT

VS/NAT 的優點是服務器可以運行任何支持TCP/IP的操作系統,它只需要一個IP地址配置在LVS主機上,服務器組可以用私有的IP地址。缺點是它的擴充能力有限,當服務器結點數目升到20時,LVS主機本身有可能成爲系統的新瓶頸,因爲在VS/NAT中請求和響應封包都需要通過負載平衡LVS主機。在 Pentium 166主機上測得重寫封包的平均延時爲60us,假設TCP封包的平均長度爲536 Bytes,則LVS主機的最大吞吐量爲8.93 MBytes/s。再假設每臺服務器的吞吐量爲600KBytes/s,這樣一個LVS主機可以帶動16臺服務器。

◆Virtual Server via IP Tunneling

在VS/TUN 的集羣系統中,負載平衡LVS主機只將請求分配到不同的實際服務器,實際服務器將應答的資料直接返回給用戶。這樣,負載平衡LVS主機就可以處理巨量的請求,而不會成爲系統的瓶頸。即使負載平衡LVS主機只有100Mbps的全雙工網卡,虛擬服務器的最大吞吐量可以達到幾Gbps。所以,VS/TUN可以極大地增加負載平衡LVS主機分配的服務器數量,它可以用來構建高性能超級服務器。VS/TUN技術對服務器的要求是所有的服務器必須支持"IP Tunneling"或者"IP Encapsulation"協議。目前,VS/TUN 的後端服務器主要運行Linux操作系統。因爲"IP Tunneling"正成爲各個操作系統的標準協議,所以VS/TUN也會適用運行其它操作系統的後端服務器。

◆Virtual Server via Direct Routing

同VS/TUN 一樣,VS/DRLVS主機只處理客戶到服務器端的連接,響應資料可以直接從獨立的網絡路由返回給客戶。這可以極大地提高LVS集羣系統的伸縮性。同 VS/TUN相比,這種方法沒有IP隧道的開銷,但是要求負載平衡LVS主機與實際服務器都有一塊網卡連在同一物理網段上,服務器網絡設備或者設備別名不作 ARP 響應。

 

2.1.1.4 結論


VS/NAT

VS/TUN

VS/DR

服務器(OS)

任意

支持隧道

多數(支持Non-arp )

服務器網絡

私有網絡

局域網/廣域網

局域網

服務器數目(100M網絡)

10~20

100

多(100)

服務器網關

負載均衡器

自己的路由

自己的路由

效率

一般

最高

三種IP負載均衡技術中特別是後兩種技術VS/TUN,VS/DR極大地提高系統的伸縮性 

2.1.2 調度算法

Director在接收到來自於Client的請求時,會基於"schedule"從RealServer中選擇一個響應給Client。ipvs支持以下調度算法:(1、2爲靜態調度算法,3、4、5、6、7、8爲動態調度算法)

1、 輪詢(round robin, rr)

2.  加權輪詢(Weighted round robin, wrr)——

新的連接請求被輪流分配至各RealServer;算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用於服務器組中處理性能不一的情況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。

2、目標地址散列調度(Destination Hashing,dh)

算 法也是針對目標IP地址的負載均衡,但它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先 根據請求的目標IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

 

3、源地址散列調度(Source Hashing,sh)

算 法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它採用的散列函數與目標地址散列調度算法 的相同。除了將請求的目標IP地址換成請求的源IP地址外,它的算法流程與目標地址散列調度算法的基本相似。在實際應用中,源地址散列調度和目標地址散列 調度可以結合使用在防火牆集羣中,它們可以保證整個系統的唯一出入口。

 

 

4、最少連接(least connected, lc), 加權最少連接(weighted least connection, wlc)——

新的連接請求將被分配至當前連接數最少的RealServer;最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;當連接中止或超時,其連接數減一。

lc:256*A+I=當前連接數  wlc:(256*A+I)/W=當前連接數   【A:活動連接數  I:非活動連接數 W:權重值】

5、基於局部性的最少鏈接調度(Locality-Based Least Connections Scheduling,lblc)——

針對請求報文的目標IP地址的負載均衡調度,目前主要用於Cache集羣系統,因爲在Cache集羣中客戶請求報文的目標IP地址是變化的。這裏假設任何後端服務器都可以處理任一請求,算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的請求調度到同一臺服務器,來提高各臺服務器的訪問局部性和主存Cache命中率,從而整個集羣系統的處理能力。LBLC調度算法先根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於其一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。

6、帶複製的基於局部性最少鏈接調度(Locality-Based Least Connections with Replication Scheduling,lblcr)

——也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而 LBLC算法維護從一個目標IP地址到一臺服務器的映射。對於一個“熱門”站點的服務請求,一臺Cache 服務器可能會忙不過來處理這些請求。這時,LBLC調度算法會從所有的Cache服務器中按“最小連接”原則選出一臺Cache服務器,映射該“熱門”站點到這臺Cache服務器,很快這臺Cache服務器也會超載,就會重複上述過程選出新的Cache服務器。這樣,可能會導致該“熱門”站點的映像會出現在所有的Cache服務器上,降低了Cache服務器的使用效率。LBLCR調度算法將“熱門”站點映射到一組Cache服務器(服務器集合),當該“熱門”站點的請求負載增加時,會增加集合裏的Cache服務器,來處理不斷增長的負載;當該“熱門”站點的請求負載降低時,會減少集合裏的Cache服務器數目。這樣,該“熱門”站點的映像不太可能出現在所有的Cache服務器上,從而提供Cache集羣系統的使用效率。LBLCR算法先根據請求的目標IP地址找出該目標IP地址對應的服務器組;按“最小連接”原則從該服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載;則按“最小連接”原則從整個集羣中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

7、 最短的期望的延遲(Shortest Expected Delay Scheduling ,sed)

sed: (A+1)/w=當前連接數

8、最少隊列調度(Never Queue Scheduling ,nq)

無需隊列。如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算

四、關於LVS追蹤標記fwmark

如果LVS放置於多防火牆的網絡中,並且每個防火牆都用到了狀態追蹤的機制,那麼在迴應一個針對於LVS的連接請求時必須經過此請求連接進來時的防火牆,否則,這個響應的數據包將會被丟棄

 

說明:作者寫了詳細的調度算法優缺點可以查看

http://www.linuxvirtualserver.org/zh/lvs4.html  LVS集羣的負載調度 

 

參考資料

http://www.ibm.com/developerworks/cn/linux/cluster/l-lvsinst/index.html  入門

http://www.ultramonkey.org/papers/lvs_tutorial/html/     實踐大全

http://www.linuxvirtualserver.org/zh/     中文官網

http://www.linuxvirtualserver.org    英文官網

http://www.linuxvirtualserver.org/zh/lvs3.html LVS集羣中的IP負載均衡技術

http://www.linuxvirtualserver.org/zh/lvs4.html  LVS集羣的負載調度

http://ixdba.blog.51cto.com/2895551/552947    高手篇

http://hi.baidu.com/buttlewolf/item/8486d6fca03c434e932af2ea  幾種配置方案

http://ixdba.blog.51cto.com/2895551/552947

http://blog.163.com/lucky_yjw/blog/static/6947908920120654622166/  命令詳解

http://os.51cto.com/art/201202/319979.htm  LVS負責均衡教程

http://linux.chinaunix.net/techdoc/net/2009/07/21/1125256.shtml   LVS+Keepalived實現高可用集羣

http://network.51cto.com/art/201004/196878.htm    三種轉發機制的優缺點

http://machael.blog.51cto.com/829462/211587/    ipvsadm命令參考,線上配置

http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html  LVS負載均衡中arp_ignorearp_annonuce參數配置的含義

 

http://www.doc88.com/p-239796984871.html  紅帽lvs配置 推薦


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