淺談LVS

  • 一、集群的概念與分類
  • 二、lvs介紹
  • 三、lvs結(jié)構(gòu)
  • 四、LVS內(nèi)核模型
  • 五、LVS的包轉(zhuǎn)發(fā)模型
    • 1.NAT模型
    • 2.DR模型
    • 3.TUN模型
  • 六、lvs調(diào)度算法
    • 1、靜態(tài)算法(4種)
    • 2、動態(tài)算法(6種)

一、集群的概念與分類

以下內(nèi)容,個人理解,可能有錯誤與不足,望指正。

集群(cluster),從字面上就知道,集與群都是多的概念。集群就是多臺機(jī)器組合在一起共同完成一個需求。

集群(cluster)技術(shù)是一種較新的技術(shù),通過集群技術(shù),可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務(wù)調(diào)度則是集群系統(tǒng)中的核心技術(shù)。集群不是簡單的機(jī)器相加,它實(shí)現(xiàn)一種1+1遠(yuǎn)大于2的目的。
集群是一組相互獨(dú)立的、通過高速網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī),它們構(gòu)成了一個組,并以單一系統(tǒng)的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨(dú)立的服務(wù)器。集群配置是用于提高可用性和可縮放性。

集群分類:

集群分為同構(gòu)與異構(gòu)兩種,它們的區(qū)別在于:組成集群系統(tǒng)的計(jì)算機(jī)之間的體系結(jié)構(gòu)是否相同。集群計(jì)算機(jī)按功能和結(jié)構(gòu)可以分成以下幾類:
高可用性集群High-availability (HA) clusters
負(fù)載均衡集群Load balancing clusters
高性能計(jì)算集群High-performance(HPC)clusters
網(wǎng)格計(jì)算Grid computing

高可用性集群(HA)
高可用,意思是提供服務(wù)的可用,高可用,就是服務(wù)一直可用。 一般是指當(dāng)集群中有某個節(jié)點(diǎn)失效的情況下,其上的任務(wù)會自動轉(zhuǎn)移到其他正常的節(jié)點(diǎn)上。還指可以將集群中的某節(jié)點(diǎn)進(jìn)行離線維護(hù)再上線,該過程并不影響整個集群的運(yùn)行。高可用的軟件有keepalived,
負(fù)載均衡集群(LB)
負(fù)載均衡集群運(yùn)行時,一般通過一個或者多個前端負(fù)載均衡器,將工作負(fù)載分發(fā)到后端的一組服務(wù)器上,從而達(dá)到整個系統(tǒng)的高性能和高可用性。這樣的計(jì)算機(jī)集群有時也被稱為服務(wù)器群(Server Farm)。一般高可用性集群和負(fù)載均衡集群會使用類似的技術(shù),或同時具有高可用性與負(fù)載均衡的特點(diǎn)。
Linux虛擬服務(wù)器(LVS)項(xiàng)目在Linux操作系統(tǒng)上提供了最常用的負(fù)載均衡軟件。提供負(fù)載均衡的軟件很多,比如haproxy,nginx,apache,lvs
高性能計(jì)算集群(HP)
高性能計(jì)算集群采用將計(jì)算任務(wù)分配到集群的不同計(jì)算節(jié)點(diǎn)而提高計(jì)算能力,因而主要應(yīng)用在科學(xué)計(jì)算領(lǐng)域。比較流行的HPC采用Linux操作系統(tǒng)和其它一些免費(fèi)軟件來完成并行運(yùn)算。這一集群配置通常被稱為Beowulf集群。這類集群通常運(yùn)行特定的程序以發(fā)揮HPC cluster的并行能力。這類程序一般應(yīng)用特定的運(yùn)行庫,比如專為科學(xué)計(jì)算設(shè)計(jì)的MPI庫。
HPC集群特別適合于在計(jì)算中各計(jì)算節(jié)點(diǎn)之間發(fā)生大量數(shù)據(jù)通訊的計(jì)算作業(yè),比如一個節(jié)點(diǎn)的中間結(jié)果或影響到其它節(jié)點(diǎn)計(jì)算結(jié)果的情況。
網(wǎng)格計(jì)算
網(wǎng)格計(jì)算或網(wǎng)格集群是一種與集群計(jì)算非常相關(guān)的技術(shù)。網(wǎng)格與傳統(tǒng)集群的主要差別是網(wǎng)格是連接一組相關(guān)并不信任的計(jì)算機(jī),它的運(yùn)作更像一個計(jì)算公共設(shè)施而不是一個獨(dú)立的計(jì)算機(jī)。還有,網(wǎng)格通常比集群支持更多不同類型的計(jì)算機(jī)集合。
網(wǎng)格計(jì)算是針對有許多獨(dú)立作業(yè)的工作任務(wù)作優(yōu)化,在計(jì)算過程中作業(yè)間無需共享數(shù)據(jù)。網(wǎng)格主要服務(wù)于管理在獨(dú)立執(zhí)行工作的計(jì)算機(jī)間的作業(yè)分配。資源如存儲可以被所有節(jié)點(diǎn)共享,但作業(yè)的中間結(jié)果不會影響在其他網(wǎng)格節(jié)點(diǎn)上作業(yè)的進(jìn)展。

二、lvs介紹

? Internet的快速增長使多媒體網(wǎng)絡(luò)服務(wù)器面對的訪問數(shù)量快速增加,服務(wù)器需要具備提供大量并發(fā)訪問服務(wù)的能力,因此對于大負(fù)載的服務(wù)器來講, CPU、I/O處理能力很快會成為瓶頸。由于單臺服務(wù)器的性能總是有限的,簡單的提高硬件性能并不能真正解決這個問題。為此,必須采用多服務(wù)器和負(fù)載均衡技術(shù)才能滿足大量并發(fā)訪問的需要。Linux 虛擬服務(wù)器(Linux Virtual Servers,LVS) 使用負(fù)載均衡技術(shù)將多臺服務(wù)器組成一個虛擬服務(wù)器。它為適應(yīng)快速增長的網(wǎng)絡(luò)訪問需求提供了一個負(fù)載能力易于擴(kuò)展,而價格低廉的解決方案 。

? lvs( Linux Virtual Server),意即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群系統(tǒng)。本項(xiàng)目在1998年5月由章文嵩博士成立,是中國國內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。已經(jīng)是整合在linux內(nèi)核中 , LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。調(diào)度器具有很好的吞吐率,將請求均衡地轉(zhuǎn)移到不同的服務(wù)器上執(zhí)行,且調(diào)度器自動屏蔽掉服務(wù)器的故障,從而將一組服務(wù)器構(gòu)成一個高性能的、高可用的虛擬服務(wù)器。整個服務(wù)器集群的結(jié)構(gòu)對客戶是透明的,而且無需修改客戶端和服務(wù)器端的程序。為此,在設(shè)計(jì)時需要考慮系統(tǒng)的透明性、可伸縮性、高可用性和易管理性。由于lvs是工作的網(wǎng)路4層(網(wǎng)絡(luò)層)基礎(chǔ)上,相比于haproxy和nginx等工作在7層上,性能更好,當(dāng)然,也有自己的弊端,對一些應(yīng)用層上的更細(xì)顆粒度的過濾就相對弱一點(diǎn)。

三、lvs結(jié)構(gòu)

? LVS由前端的負(fù)載均衡器(Load Balancer,LB)和后端的真實(shí)服務(wù)器(Real Server,RS)群組成。RS間可通過局域網(wǎng)或廣域網(wǎng)連接。LVS的這種結(jié)構(gòu)對用戶是透明的,用戶只能看見一臺作為LB的虛擬服務(wù)器(Virtual Server),而看不到提供服務(wù)的RS群。當(dāng)用戶的請求發(fā)往虛擬服務(wù)器,LB根據(jù)設(shè)定的包轉(zhuǎn)發(fā)策略和負(fù)載均衡調(diào)度算法將用戶請求轉(zhuǎn)發(fā)給RS。RS再將用戶請求結(jié)果返回給用戶。

? LVS是整合在linux中,配合linux的iptables一起工作的,LVS集群采用IP負(fù)載均衡技術(shù)和基于內(nèi)容請求分發(fā)技術(shù)。

在上圖中,Director Server就是調(diào)度器,負(fù)責(zé)將請求分發(fā)到后面的RS(Real Sever),RS處理具體的邏輯。

四、LVS內(nèi)核模型

lvs工作的內(nèi)核模式中,lvs借助iptable的鉤子函數(shù)。

1.當(dāng)客戶端的請求到達(dá)負(fù)載均衡器的內(nèi)核空間時,首先會到達(dá)PREROUTING鏈。

2.當(dāng)內(nèi)核發(fā)現(xiàn)請求數(shù)據(jù)包的目的地址是本機(jī)時,將數(shù)據(jù)包送往INPUT鏈。

3.LVS由用戶空間的ipvsadm和內(nèi)核空間的IPVS組成,ipvsadm用來定義規(guī)則,IPVS利用ipvsadm定義的規(guī)則工作,IPVS工作在INPUT鏈上,當(dāng)數(shù)據(jù)包到達(dá)INPUT鏈時,首先會被IPVS檢查,如果數(shù)據(jù)包里面的目的地址及端口沒有在規(guī)則里面,那么這條數(shù)據(jù)包將被放行至用戶空間。

4.如果數(shù)據(jù)包里面的目的地址及端口在規(guī)則里面,那么這條數(shù)據(jù)報(bào)文將被修改目的地址為事先定義好的后端服務(wù)器,并送往POSTROUTING鏈。

5.最后經(jīng)由POSTROUTING鏈發(fā)往后端服務(wù)器。

五、LVS的包轉(zhuǎn)發(fā)模型

1.NAT模型:

這里的NAT(network address Translate)模式,相當(dāng)于iptables中的NAT模式,就是在director server中修改了ip包中的地址信息。

1.客戶端將請求發(fā)往前端的負(fù)載均衡器,請求報(bào)文源地址是CIP(客戶端IP),后面統(tǒng)稱為CIP),目標(biāo)地址為VIP(負(fù)載均衡器前端地址,后面統(tǒng)稱為VIP)。

2.負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請求的是在規(guī)則里面存在的地址,那么它將客戶端請求報(bào)文的目標(biāo)地址改為了后端服務(wù)器的RIP地址并將報(bào)文根據(jù)算法發(fā)送出去。

3.報(bào)文送到Real Server后,由于報(bào)文的目標(biāo)地址是自己,所以會響應(yīng)該請求,并將響應(yīng)報(bào)文返還給LVS。

4.然后lvs將此報(bào)文的源地址修改為本機(jī)并發(fā)送給客戶端。注意:在NAT模式中,Real Server的網(wǎng)關(guān)必須指向LVS,否則報(bào)文無法送達(dá)客戶端。

優(yōu)點(diǎn):RS不需要公網(wǎng)ip,RS與外界公網(wǎng)是分開的

? 請求進(jìn)出都是通過Director Server,進(jìn)行地址轉(zhuǎn)換,對數(shù)據(jù)統(tǒng)計(jì),審計(jì)過濾等。

缺點(diǎn):

? 數(shù)據(jù)進(jìn)出都是經(jīng)過DS,對DS的壓力很大。

2.DR模型

DR(direct route)直接路由


? DR模型就是解決NAT中DS負(fù)載壓力大的問題,由圖中可以看出,數(shù)據(jù)的請求才會經(jīng)過DS,數(shù)據(jù)返回是直接由RS返回給用戶。

1.客戶端將請求發(fā)往前端的負(fù)載均衡器,請求報(bào)文源地址是CIP,目標(biāo)地址為VIP。

2.負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請求的是在規(guī)則里面存在的地址,那么它將客戶端請求報(bào)文的源MAC地址改為自己DIP的MAC地址,目標(biāo)MAC改為了RIP的MAC地址,并將此包發(fā)送給RS。

3.RS發(fā)現(xiàn)請求報(bào)文中的目的MAC是自己,就會將次報(bào)文接收下來,處理完請求報(bào)文后,將響應(yīng)報(bào)文通過lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。

? 注意:需要設(shè)置lo接口的VIP不能響應(yīng)本地網(wǎng)絡(luò)內(nèi)的arp請求。

優(yōu)點(diǎn): 一個DS可以負(fù)載更多的RS

缺點(diǎn):

RS需要公網(wǎng)ip和內(nèi)網(wǎng)ip

3.TUN模型

TUN模型就是DR模型上加了一層隧道。

1.客戶端將請求發(fā)往前端的負(fù)載均衡器,請求報(bào)文源地址是CIP,目標(biāo)地址為VIP。

2.負(fù)載均衡器收到報(bào)文后,發(fā)現(xiàn)請求的是在規(guī)則里面存在的地址,那么它將在客戶端請求報(bào)文的首部再封裝一層IP報(bào)文,將源地址改為DIP,目標(biāo)地址改為RIP,并將此包發(fā)送給RS。

3.RS收到請求報(bào)文后,會首先拆開第一層封裝,然后發(fā)現(xiàn)里面還有一層IP首部的目標(biāo)地址是自己lo接口上的VIP,所以會處理次請求報(bào)文,并將響應(yīng)報(bào)文通過lo接口送給eth0網(wǎng)卡直接發(fā)送給客戶端。

注意:需要設(shè)置lo接口的VIP不能在共網(wǎng)上出現(xiàn)。

六、lvs調(diào)度算法

調(diào)度算法就是,前端一個請求到達(dá)DS,DS將這個請求發(fā)送給后端哪個RS.

LVS的調(diào)度算法分為靜態(tài)與動態(tài)兩類。

1、靜態(tài)算法(4種)

只根據(jù)算法進(jìn)行調(diào)度 而不考慮后端服務(wù)器的實(shí)際連接情況和負(fù)載情況

.RR:輪叫調(diào)度(Round Robin)
  調(diào)度器通過”輪叫”調(diào)度算法將外部請求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對待每一臺服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載?輪流分配請求。

②.WRR:加權(quán)輪叫(Weight RR)
  調(diào)度器通過“加權(quán)輪叫”調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來調(diào)度訪問請求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問流量。調(diào)度器可以自動問詢真實(shí)服務(wù)器的負(fù)載情況,并動態(tài)地調(diào)整其權(quán)值。

③.DH:目標(biāo)地址散列調(diào)度(Destination Hash )
  根據(jù)請求的目標(biāo)IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空。

④.SH:源地址 hash(Source Hash)
  源地址散列”調(diào)度算法根據(jù)請求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空?

2、動態(tài)算法(6種)

前端的調(diào)度器會根據(jù)后端真實(shí)服務(wù)器的實(shí)際連接情況來分配請求

①.LC:最少鏈接(Least Connections)
  調(diào)度器通過”最少連接”調(diào)度算法動態(tài)地將網(wǎng)絡(luò)請求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用”最小連接”調(diào)度算法可以較好地均衡負(fù)載。

②.WLC:加權(quán)最少連接(默認(rèn)采用的就是這種)(Weighted Least Connections)
  在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接”調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動連接負(fù)載?調(diào)度器可以自動問詢真實(shí)服務(wù)器的負(fù)載情況,并動態(tài)地調(diào)整其權(quán)值。

③.SED:最短延遲調(diào)度(Shortest Expected Delay )
  在WLC基礎(chǔ)上改進(jìn),Overhead = (ACTIVE+1)*256/加權(quán),不再考慮非活動狀態(tài),把當(dāng)前處于活動狀態(tài)的數(shù)目+1來實(shí)現(xiàn),數(shù)目最小的,接受下次請求,+1的目的是為了考慮加權(quán)的時候,非活動連接過多缺陷:當(dāng)權(quán)限過大的時候,會倒置空閑服務(wù)器一直處于無連接狀態(tài)。

.NQ永不排隊(duì)/最少隊(duì)列調(diào)度(Never Queue Scheduling NQ)
  無需隊(duì)列。如果有臺 realserver的連接數(shù)=0就直接分配過去,不需要再進(jìn)行sed運(yùn)算,保證不會有一個主機(jī)很空間。在SED基礎(chǔ)上無論+幾,第二次一定給下一個,保證不會有一個主機(jī)不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態(tài)連接,對于DNS的UDP不需要考慮非活動連接,而httpd的處于保持狀態(tài)的服務(wù)就需要考慮非活動連接給服務(wù)器的壓力。

⑤.LBLC:基于局部性的最少鏈接(locality-Based Least Connections)
  基于局部性的最少鏈接”調(diào)度算法是針對目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒有超載,將請求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用“最少鏈接”的原則選出一個可用的服務(wù)器,將請求發(fā)送到該服務(wù)器?

⑥. LBLCR:帶復(fù)制的基于局部性最少連接(Locality-Based Least Connections with Replication)
  帶復(fù)制的基于局部性最少鏈接”調(diào)度算法也是針對目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護(hù)從一個目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個目標(biāo)IP地址到一臺服務(wù)器的映射?該算法根據(jù)請求的目標(biāo)IP地址找出該目標(biāo)IP地址對應(yīng)的服務(wù)器組,按”最小連接”原則從服務(wù)器組中選出一臺服務(wù)器,若服務(wù)器沒有超載,將請求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接”原則從這個集群中選出一臺服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請求發(fā)送到該服務(wù)器?同時,當(dāng)該服務(wù)器組有一段時間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 當(dāng)前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù),集群是將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù),這些...
    jiangmo閱讀 13,252評論 3 36
  • 本文部分觀點(diǎn)圖片采用于:http://chenx1242.blog.51cto.com 隨著智能機(jī)的逐漸普及,大量...
    BossHuang閱讀 3,400評論 0 16
  • 轉(zhuǎn)載:https://blog.csdn.net/moonpure/article/details/5283913...
    SkTj閱讀 3,635評論 0 10
  • Linux系統(tǒng)之lvs集群 集群的基本思想 由于現(xiàn)代化業(yè)務(wù)上線的需求, 單服務(wù)器已經(jīng)不能滿足業(yè)務(wù)的需要, 業(yè)務(wù)服務(wù)...
    魏鎮(zhèn)坪閱讀 3,912評論 0 14
  • 子言慕雨。予棄傘之。 子言好陽。予拒蔭之。 子言喜風(fēng)。推窗...
    張十四閱讀 261評論 0 0

友情鏈接更多精彩內(nèi)容