天天看點

lvs

文章來源于:http://atong.blog.51cto.com/2393905/1348602

一、叢集簡介

什麼是叢集

計算機叢集簡稱叢集是一種計算機系統,它通過一組松散內建的計算機軟體和/或硬體連接配接起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一台計算機。叢集系統中的單個計算機通常稱為節點,通常通過區域網路連接配接,但也有其它的可能連接配接方式。叢集計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下叢集計算機比單個計算機,比如工作站或超級計算機性能價格比要高得多。

叢集就是一組獨立的計算機,通過網絡連接配接組合成一個組合來共同完一個任務

LVS在企業架構中的位置:

lvs

以上的架構隻是衆多企業裡面的一種而已。綠色的線就是使用者通路請求的資料流向。使用者-->LVS負載均衡伺服器--->apahce伺服器--->mysql伺服器&memcache伺服器&共享存儲伺服器。并且我們的mysql、共享存儲也能夠使用LVS再進行負載均衡。

---------------小結-------------------------

叢集:就是一組互相獨立的計算機,通過高速的網絡組成一個計算機系統,每個叢集節點都是運作其自己程序的一個獨立伺服器。對網絡使用者來講,網站後端就是一個單一的系統,協同起來向使用者提供系統資源,系統服務。

-------------------------------------------

為什麼要使用叢集

叢集的特點

1)高性能performance。一些需要很強的運算處理能力比如天氣預報,核試驗等。這就不是幾台計算機能夠搞定的。這需要上千台一起來完成這個工作的。

2)價格有效性

通常一套系統叢集架構,隻需要幾台或數十台伺服器主機即可,與動則上百王的專用超級計算機具有更高的成本效益。

3)可伸縮性

當伺服器負載壓力增長的時候,系統能夠擴充來滿足需求,且不降低服務品質。

4)高可用性

盡管部分硬體和軟體發生故障,整個系統的服務必須是7*24小時運作的。

叢集的優勢

1)透明性

如果一部分伺服器當機了業務不受影響,一般耦合度沒有那麼高,依賴關系沒有那麼高。比如NFS伺服器當機了其他就挂載不了了,這樣依賴性太強。

2)高性能

通路量增加,能夠輕松擴充。

3)可管理性

整個系統可能在實體上很大,但很容易管理。

4)可程式設計性

在叢集系統上,容易開發應用程式,門戶網站會要求這個。

叢集分類及不同分類的特點

計算機叢集架構按照功能和結構一般分成以下幾類:

1)負載均衡叢集(Loadbalancingclusters)簡稱LBC

2)高可用性叢集(High-availabilityclusters)簡稱HAC

3)高性能計算叢集(High-perfomanceclusters)簡稱HPC

4)網格計算(Gridcomputing)

網絡上面一般認為是有三個,負載均衡和高可用叢集式我們網際網路行業常用的叢集架構。

(1)負載均衡叢集

   負載均衡叢集為企業提供了更為實用,成本效益更高的系統架構解決方案。負載均衡叢集把很多客戶集中通路的請求負載壓力可能盡可能平均的分攤到計算機叢集中處理。客戶請求負載通常包括應用程度處理負載和網絡流量負載。這樣的系統非常适合向使用同一組應用程式為大量使用者提供服務。每個節點都可以承擔一定的通路請求負載壓力,并且可以實作通路請求在各節點之間動态配置設定,以實作負載均衡。

   負載均衡運作時,一般通過一個或多個前端負載均衡器将客戶通路請求分發到後端一組伺服器上,進而達到整個系統的高性能和高可用性。這樣計算機叢集有時也被稱為伺服器群。一般高可用性叢集和負載均衡叢集會使用類似的技術,或同時具有高可用性與負載均衡的特點。

負載均衡叢集的作用

1)分擔通路流量(負載均衡)

2)保持業務的連續性(高可用)

(2)高可用性叢集

一般是指當叢集中的任意一個節點失效的情況下,節點上的所有任務自動轉移到其他正常的節點上,并且此過程不影響整個叢集的運作,不影響業務的提供。

   類似是叢集中運作着兩個或兩個以上的一樣的節點,當某個主節點出現故障的時候,那麼其他作為從 節點的節點就會接替主節點上面的任務。從節點可以接管主節點的資源(IP位址,架構身份等),此時使用者不會發現提供服務的對象從主節點轉移到從節點。

   高可用性叢集的作用:當一個機器當機另一台進行接管。比較常用的高可用叢集開源軟體有:keepalive,heardbeat。

(3)高性能計算叢集

 高性能計算叢集采用将計算任務配置設定到叢集的不同計算節點兒提高計算能力,因而主要應用在科學計算領域。比較流行的HPC采用Linux作業系統和其它一些免費軟體來完成并行運算。這一叢集配置通常被稱為Beowulf叢集。這類叢集通常運作特定的程式以發揮HPCcluster的并行能力。這類程式一般應用特定的運作庫, 比如專為科學計算設計的MPI庫。

   HPC叢集特别适合于在計算中各計算節點之間發生大量資料通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。

常用叢集軟硬體

常用開源叢集軟體有:lvs,keepalived,haproxy,nginx,apache,heartbeat

常用商業叢集硬體有:F5,Netscaler,Radware,A10等

二、LVS負載均衡叢集介紹

負載均衡叢集的作用:提供一種廉價、有效、透明的方法,來擴充網絡裝置和伺服器的負載帶寬、增加吞吐量,加強網絡資料處理能力、提高網絡的靈活性和可用性。

1)把單台計算機無法承受的大規模的并發通路或資料流量分擔到多台節點裝置上分别處理,減少使用者等待響應的時間,提升使用者體驗。

2)單個重負載的運算分擔到多台節點裝置上做并行處理,每個節點裝置處理結束後,将結果彙總,傳回給使用者,系統處理能力得到大幅度提高。

3)7*24小時的服務保證,任意一個或多個裝置節點裝置當機,不能影響到業務。在負載均衡叢集中,所有計算機節點都應該提供相同的服務,叢集負載均衡擷取所有對該服務的如站請求。

LVS介紹

LVS是linux virtual server的簡寫linux虛拟伺服器,是一個虛拟的伺服器叢集系統,可以再unix/linux平台下實作負載均衡叢集功能。該項目在1998年5月由章文嵩博士組織成立。

以下是LVS官網提供的4篇文章:(非常詳細,我覺得有興趣還是看官方文檔比較正宗吧!!)

http://www.linuxvirtualserver.org/zh/lvs1.html

http://www.linuxvirtualserver.org/zh/lvs2.html

http://www.linuxvirtualserver.org/zh/lvs3.html

http://www.linuxvirtualserver.org/zh/lvs4.html

IPVS發展史

早在2.2核心時,IPVS就已經以核心更新檔的形式出現。

從2.4.23版本開始ipvs軟體就是合并到linux核心的常用版本的核心更新檔的集合。

從2.4.24以後IPVS已經成為linux官方标準核心的一部分

lvs

   從上圖可以看出lpvs是工作在核心層,我們不能夠直接操作ipvs,vs負載均衡排程技術是在linux核心中實作的。是以,被稱之為linux虛拟伺服器。我們使用該軟體配置lvs的時候,不能直接配置核心中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理。通過keepalived也可以管理LVS。

LVS體系結構與工作原理簡單描述

LVS叢集負載均衡器接受服務的所有入展用戶端的請求,然後根據排程算法決定哪個叢集節點來處理回複用戶端的請求。

LVS虛拟伺服器的體系如下圖所示,一組伺服器通過高速的區域網路或者地理分布的廣域網互相連接配接,在這組伺服器之前有一個負載排程器(load balance)。負載排程器負責将客戶的請求排程到真實伺服器上。這樣這組伺服器叢集的結構對使用者來說就是透明的。客戶通路叢集系統就如隻是通路一台高性能,高可用的伺服器一樣。客戶程式不受伺服器叢集的影響,不做任何修改。

就比如說:我們去飯店吃飯點菜,客戶隻要跟服務員點菜就行。并不需要知道具體他們是怎麼配置設定工作的,是以他們内部對于我們來說是透明的。此時這個服務員就會按照一定的規則把他手上的活,配置設定到其他人員上去。這個服務員就是負載均衡器(LB)而後面這些真正做事的就是伺服器叢集。

lvs
lvs

客戶請發送向負載均衡伺服器發送請求。負載均衡器接受客戶的請求,然後先是根據LVS的排程算法(8種)來決定要将這個請求發送給哪個節點伺服器。然後依據自己的工作模式(3種)來看應該如何把這些客戶的請求如何發送給節點伺服器,節點伺服器又應該如何來把響應資料包發回給用戶端。

恩,那這樣我們就隻要接下來搞懂LVS的3中工作模式,8種排程算法就可以了。

LVS的三種工作模式:

1)VS/NAT模式(Network address translation)

2)VS/TUN模式(tunneling)

3)DR模式(Direct routing)

1、NAT模式-網絡位址轉換

        Virtualserver via Network address translation(VS/NAT)

這個是通過網絡位址轉換的方法來實作排程的。首先排程器(LB)接收到客戶的請求資料包時(請求的目的IP為VIP),根據排程算法決定将請求發送給哪個後端的真實伺服器(RS)。然後排程就把用戶端發送的請求資料包的目标IP位址及端口改成後端真實伺服器的IP位址(RIP),這樣真實伺服器(RS)就能夠接收到客戶的請求資料包了。真實伺服器響應完請求後,檢視預設路由(NAT模式下我們需要把RS的預設路由設定為LB伺服器。)把響應後的資料包發送給LB,LB再接收到響應包後,把包的源位址改成虛拟位址(VIP)然後發送回給用戶端。

排程過程IP包詳細圖:

lvs

原理圖簡述:

1)用戶端請求資料,目标IP為VIP

2)請求資料到達LB伺服器,LB根據排程算法将目的位址修改為RIP位址及對應端口(此RIP位址是根據排程算法得出的。)并在連接配接HASH表中記錄下這個連接配接。

3)資料包從LB伺服器到達RS伺服器webserver,然後webserver進行響應。Webserver的網關必須是LB,然後将資料傳回給LB伺服器。

4)收到RS的傳回後的資料,根據連接配接HASH表修改源位址VIP&目标位址CIP,及對應端口80.然後資料就從LB出發到達用戶端。

5)用戶端收到的就隻能看到VIP\DIP資訊。

NAT模式優缺點:

1、NAT技術将請求的封包和響應的封包都需要通過LB進行位址改寫,是以網站通路量比較大的時候LB負載均衡排程器有比較大的瓶頸,一般要求最多之能10-20台節點

2、隻需要在LB上配置一個公網IP位址就可以了。

3、每台内部的節點伺服器的網關位址必須是排程器LB的内網位址。

4、NAT模式支援對IP位址和端口進行轉換。即使用者請求的端口和真實伺服器的端口可以不一緻。

2、TUN模式

virtual server via ip tunneling模式:采用NAT模式時,由于請求和響應的封包必須通過排程器位址重寫,當客戶請求越來越多時,排程器處理能力将成為瓶頸。為了解決這個問題,排程器把請求的封包通過IP隧道轉發到真實的伺服器。真實的伺服器将響應處理後的資料直接傳回給用戶端。這樣排程器就隻處理請求入站封包,由于一般網絡服務應答資料比請求封包大很多,采用VS/TUN模式後,叢集系統的最大吞吐量可以提高10倍。

VS/TUN的工作流程圖如下所示,它和NAT模式不同的是,它在LB和RS之間的傳輸不用改寫IP位址。而是把客戶請求包封裝在一個IP tunnel裡面,然後發送給RS節點伺服器,節點伺服器接收到之後解開IP tunnel後,進行響應處理。并且直接把包通過自己的外網位址發送給客戶不用經過LB伺服器。

Tunnel原理流程圖:

lvs

原理圖過程簡述:

1)客戶請求資料包,目标位址VIP發送到LB上。

2)LB接收到客戶請求包,進行IP Tunnel封裝。即在原有的標頭加上IP Tunnel的標頭。然後發送出去。

3)RS節點伺服器根據IP Tunnel標頭資訊(此時就又一種邏輯上的隐形隧道,隻有LB和RS之間懂)收到請求包,然後解開IP Tunnel標頭資訊,得到客戶的請求包并進行響應處理。

4)響應處理完畢之後,RS伺服器使用自己的出公網的線路,将這個響應資料包發送給用戶端。源IP位址還是VIP位址。(RS節點伺服器需要在本地回環接口配置VIP,後續會講)

3、DR模式(直接路由模式)

Virtual server via direct routing (vs/dr)

DR模式是通過改寫請求封包的目标MAC位址,将請求發給真實伺服器的,而真實伺服器響應後的處理結果直接傳回給用戶端使用者。同TUN模式一樣,DR模式可以極大的提高叢集系統的伸縮性。而且DR模式沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必要必須支援IP隧道協定的要求。但是要求排程器LB與真實伺服器RS都有一塊網卡連接配接到同一實體網段上,必須在同一個區域網路環境。

DR模式是網際網路使用比較多的一種模式。

DR模式原理圖:

lvs

DR模式原理過程簡述:

VS/DR模式的工作流程圖如上圖所示,它的連接配接排程和管理與NAT和TUN中的一樣,它的封包轉發方法和前兩種不同。DR模式将封包直接路由給目标真實伺服器。在DR模式中,排程器根據各個真實伺服器的負載情況,連接配接數多少等,動态地選擇一台伺服器,不修改目标IP位址和目标端口,也不封裝IP封包,而是将請求封包的資料幀的目标MAC位址改為真實伺服器的MAC位址。然後再将修改的資料幀在伺服器組的區域網路上發送。因為資料幀的MAC位址是真實伺服器的MAC位址,并且又在同一個區域網路。那麼根據區域網路的通訊原理,真實複位是一定能夠收到由LB發出的資料包。真實伺服器接收到請求資料包的時候,解開IP標頭檢視到的目标IP是VIP。(此時隻有自己的IP符合目标IP才會接收進來,是以我們需要在本地的回環借口上面配置VIP。另:由于網絡接口都會進行ARP廣播響應,但叢集的其他機器都有這個VIP的lo接口,都響應就會沖突。是以我們需要把真實伺服器的lo接口的ARP響應關閉掉。)然後真實伺服器做成請求響應,之後根據自己的路由資訊将這個響應資料包發送回給客戶,并且源IP位址還是VIP。

DR模式小結:

1、通過在排程器LB上修改資料包的目的MAC位址實作轉發。注意源位址仍然是CIP,目的位址仍然是VIP位址。

2、請求的封包經過排程器,而RS響應處理後的封包無需經過排程器LB,是以并發通路量大時使用效率很高(和NAT模式比)

3、因為DR模式是通過MAC位址改寫機制實作轉發,是以所有RS節點和排程器LB隻能在一個區域網路裡面

4、RS主機需要綁定VIP位址在LO接口上,并且需要配置ARP抑制。

5、RS節點的預設網關不需要配置成LB,而是直接配置為上級路由的網關,能讓RS直接出網就可以。

6、由于DR模式的排程器僅做MAC位址的改寫,是以排程器LB就不能改寫目标端口,那麼RS伺服器就得使用和VIP相同的端口提供服務。

官方三種負載均衡技術比較總結表:

工作模式 VS/NAT VS/TUN VS/DR
Real server(節點伺服器) Config dr gw Tunneling Non-arp device/tie vip
Server Network Private LAN/WAN LAN
Server number(節點數量) Low 10-20 High 100
Real server gateway Load balance Own router
優點 位址和端口轉換 Wan環境加密資料 性能最高
缺點 效率低 需要隧道支援 不能跨域LAN

LVS排程算法

最好參考此文章:http://www.linuxvirtualserver.org/zh/lvs4.html

Lvs的排程算法決定了如何在叢集節點之間分布工作負荷。當director排程器收到來自用戶端通路VIP的上的叢集服務的入站請求時,director排程器必須決定哪個叢集節點應該處理請求。Director排程器用的排程方法基本分為兩類:

固定排程算法:rr,wrr,dh,sh

動态排程算法:wlc,lc,lblc,lblcr

算法 說明
rr 輪詢算法,它将請求依次配置設定給不同的rs節點,也就是RS節點中均攤配置設定。這種算法簡單,但隻适合于RS節點處理性能差不多的情況
wrr 權重輪訓排程,它将依據不同RS的權值配置設定任務。權值較高的RS将優先獲得任務,并且配置設定到的連接配接數将比權值低的RS更多。相同權值的RS得到相同數目的連接配接數。
Wlc 權重最小連接配接數排程,假設各台RS的全職依次為Wi,目前tcp連接配接數依次為Ti,依次去Ti/Wi為最小的RS作為下一個配置設定的RS
Dh 目的位址哈希排程(destination hashing)以目的位址為關鍵字查找一個靜态hash表來獲得需要的RS
SH 源位址哈希排程(source hashing)以源位址為關鍵字查找一個靜态hash表來獲得需要的RS
Lc 最小連接配接數排程(least-connection),IPVS表存儲了所有活動的連接配接。LB會比較将連接配接請求發送到目前連接配接最少的RS.
Lblc 基于位址的最小連接配接數排程(locality-based least-connection):将來自同一個目的位址的請求配置設定給同一台RS,此時這台伺服器是尚未滿負荷的。否則就将這個請求配置設定給連接配接數最小的RS,并以它作為下一次配置設定的首先考慮。

LVS排程算法的生産環境選型:

1、一般的網絡服務,如http,mail,mysql等常用的LVS排程算法為:

a.基本輪詢排程rr

b.權重最小連接配接排程wlc

c.權重輪詢排程wrc

2、基于局部性的最小連接配接lblc和帶複制的給予局部性最小連接配接lblcr主要适用于web cache和DB cache

3、源位址散列排程SH和目标位址散列排程DH可以結合使用在防火牆叢集中,可以保證整個系統的出入口唯一。

實際适用中這些算法的适用範圍很多,工作中最好參考核心中的連接配接排程算法的實作原理,然後根據具體的業務需求合理的選型。

-----------------後續自我小結--------------------------------------------------

基本上lvs的原理部分就到這裡,個人還是覺得像要對LVS有一個比較全面的認識,還是需要去将官方文檔認真的看過一遍。主要部分還是在于3種工作方式和8種排程算法。以及實際工作種什麼樣的生産環境适用哪種排程算法。

-------------------------------------------------------------------------------

繼續閱讀