LVS是什么?
LVS是基于4層的負載均衡技術(shù),它是Linux內(nèi)核的一個模塊。
LVS的四種模式:
1)NAT模式
客戶端訪問LVS時,LVS通過重寫請求報文的目標地址,且根據(jù)預(yù)設(shè)的調(diào)度算法,將請求分派給后端真實服務(wù)器,真實服務(wù)器接收到請求處理后,發(fā)出響應(yīng)報文也需要通過LVS返回,返回時需要修改報文的源地址,然后返回給客戶,完成整個負載調(diào)度過程。
NAT 模式就是使用 SNAT(目標地址轉(zhuǎn)換,改變的是目標地址) 和 DNAT(源地址轉(zhuǎn)換,改變的是源地址) 技術(shù)完成報的轉(zhuǎn)發(fā),NAT 方式可支持任何的操作系統(tǒng),以及私有網(wǎng)絡(luò),并且只需一個 Internet IP 地址,非常節(jié)省成本,但是整個系統(tǒng)的性能受到限制。
因為執(zhí)行 NAT 每次需要重寫數(shù)據(jù)包,有一定的延遲,另外,大部分應(yīng)用有 80%的數(shù)據(jù)是從服務(wù)器流向客戶機,也就是用戶的請求非常短,而服務(wù)器的回應(yīng)非常大,對LVS形成很大壓力,容易成為瓶頸。
2)IP TUN模式
IP TUN(IP Tunneling 即 IP隧道)當 LVS 分配請求到不同的 real server,real server 處理請求后直接回應(yīng)給用戶,這樣 LVS 僅處理客戶機與服務(wù)器的一半連接。IP TUN 技術(shù)極大地提高了 LVS 的調(diào)度處理能力,同時也極大地提高了系統(tǒng)能容納的最大節(jié)點數(shù),可以超過 100 個節(jié)點。
real server 可以在任何 LAN 或 WAN 上運行,這意味著允許地理上的分布,這在災(zāi)難恢復中有重要意義。但此模式要求所有服務(wù)器必須支持 IP 隧道協(xié)議,因此只能在 linux 下使用,在 windows 無法使用此模式下,關(guān)鍵步驟:LB會重新封裝從客戶端發(fā)來的包,封裝后的包目標IP為其中一個Real Server。
3)DR模式
DR(即 Direct Routing 直接路由)與 IP TUN 類似,負載均衡器僅處理一半的連接,避免了新的性能瓶頸,同樣增加了系統(tǒng)的可伸縮性,DR 與 IP TUN 相比,沒有 IP 封裝的開銷,但由于采用物理層(修改 MAC地址)技術(shù),所有服務(wù)器都必須在同一個局域網(wǎng) DR 與 IP TUN 相比,沒有 IP 封裝的開銷,但由于采用數(shù)據(jù)鏈路層(修改 MAC地址)技術(shù),所有服務(wù)器都必須在一個物理網(wǎng)段。
此模式下,關(guān)鍵步驟:LB會修改從客戶端發(fā)過來的包里的MAC地址,將MAC地址修改為其中某一個Real Server的mac地址。
4)FULL NAT模式
這種模式為NAT模式的升級版。 傳統(tǒng)的NAT模式,LB和RS必須在同一個VLAN下,否則LB無法作為RS的網(wǎng)關(guān)。 這引發(fā)的兩個問題是:
同一個 VLAN的限制導致運維不方便,跨VLAN的RS無法接入。
當RS橫向擴容時,總有一天其上的單點LB會成為瓶頸。
Full-NAT解決的是LB和RS跨VLAN的問題,而跨VLAN問題解決后,LB和RS不再存在VLAN上的從屬關(guān)系,可以做到多個LB對應(yīng)多個RS,解決水平擴容的問題。 Full-NAT相比NAT的主要改進是,在SNAT/DNAT的基礎(chǔ)上,加上另一種轉(zhuǎn)換,轉(zhuǎn)換過程如下:
在包從LB轉(zhuǎn)到 RS 的過程中,源地址從客戶端IP被替換成了LVS 的內(nèi)網(wǎng)IP。內(nèi)網(wǎng)IP之間可以通過多個交換機跨VLAN通信。
當RS處理完接收到的包,返回時,會將這個包返回給LB的內(nèi)網(wǎng)IP,這一步也不受限于 VLAN。
LB收到包后,在NAT模式修改源地址的基礎(chǔ)上,再把RS發(fā)來的包中的目標地址從LB內(nèi)網(wǎng)IP改為客戶端的 IP。
Full-NAT主要的思想是把網(wǎng)關(guān)和其下機器的通信,改為了普通的網(wǎng)絡(luò)通信,從而解決了跨VLAN 的問題。采用這種方式,LB和RS的部署在VLAN上將不再有任何限制,大大提高了運維部署的便利性。
LVS的十種調(diào)度算法:
LVS的調(diào)度算法分為靜態(tài)與動態(tài)兩類。
1)靜態(tài)算法(4種):只根據(jù)算法進行調(diào)度 而不考慮后端服務(wù)器的實際連接情況和負載情況
① RR:輪詢調(diào)度(Round Robin) 調(diào)度器通過”輪詢”調(diào)度算法將外部請求按順序輪流分配到集群中的真實服務(wù)器上,它均等地對待每一臺服務(wù)器,而不管服務(wù)器上實際的連接數(shù)和系統(tǒng)負載?
② WRR:加權(quán)輪詢(Weight RR) 調(diào)度器通過“加權(quán)輪叫”調(diào)度算法根據(jù)真實服務(wù)器的不同處理能力來調(diào)度訪問請求。這樣可以保證處理能力強的服務(wù)器處理更多的訪問流量。調(diào)度器可以自動問詢真實服務(wù)器的負載情況,并動態(tài)地調(diào)整其權(quán)值。
③ DH:目標地址hash(Destination Hash ) 根據(jù)請求的目標IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空。
④ SH:源地址 hash(Source Hash) 根據(jù)請求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空?
2)動態(tài)算法(6種):前端的調(diào)度器會根據(jù)后端真實服務(wù)器的實際連接情況來分配請求
① LC:最少鏈接(Least Connections) 動態(tài)地將網(wǎng)絡(luò)請求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實服務(wù)器具有相近的系統(tǒng)性能,采用”最小連接”調(diào)度算法可以較好地均衡負載。
② WLC:加權(quán)最少連接(默認采用的就是這種)(Weighted Least Connections) 在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用“加權(quán)最少鏈接”調(diào)度算法優(yōu)化負載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動連接負載?調(diào)度器可以自動問詢真實服務(wù)器的負載情況,并動態(tài)地調(diào)整其權(quán)值。
③ SED:最短延遲調(diào)度(Shortest Expected Delay ) 在WLC基礎(chǔ)上改進,Overhead = (ACTIVE+1)*256/加權(quán),不再考慮非活動狀態(tài),把當前處于活動狀態(tài)的數(shù)目+1來實現(xiàn),數(shù)目最小的,接受下次請求,+1的目的是為了考慮加權(quán)的時候,非活動連接過多缺陷:當權(quán)限過大的時候,會導致空閑服務(wù)器一直處于無連接狀態(tài)。
④NQ永不排隊/最少隊列調(diào)度(Never Queue Scheduling NQ) 無需隊列。如果有臺 realserver的連接數(shù)=0就直接分配過去,不需要再進行sed運算,保證不會有一個主機很空閑。在SED基礎(chǔ)上無論+幾,第二次一定給下一個,保證不會有一個主機不會很空閑著,不考慮非活動連接,才用NQ,SED要考慮活動狀態(tài)連接,對于DNS的UDP不需要考慮非活動連接,而httpd的處于保持狀態(tài)的服務(wù)就需要考慮非活動連接給服務(wù)器的壓力。
⑤ LBLC:基于局部性的最少鏈接(locality-Based Least Connections) 基于局部性的最少鏈接”調(diào)度算法是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)?該算法根據(jù)請求的目標IP地址找出該目標IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒有超載,將請求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務(wù)器,將請求發(fā)送到該服務(wù)器?
⑥ LBLCR:帶復制的基于局部性最少連接(Locality-Based Least Connections with Replication) 帶復制的基于局部性最少鏈接”調(diào)度算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統(tǒng)?它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務(wù)器的映射,而LBLC算法維護從一個目標IP地址到一臺服務(wù)器的映射?該算法根據(jù)請求的目標IP地址找出該目標IP地址對應(yīng)的服務(wù)器組,按”最小連接”原則從服務(wù)器組中選出一臺服務(wù)器,若服務(wù)器沒有超載,將請求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按“最小連接”原則從這個集群中選出一臺服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請求發(fā)送到該服務(wù)器?同時,當該服務(wù)器組有一段時間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復制的程度。
審核編輯:劉清
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8963瀏覽量
85086 -
Mac
+關(guān)注
關(guān)注
0文章
1095瀏覽量
51339 -
LVS
+關(guān)注
關(guān)注
1文章
35瀏覽量
9910 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
316瀏覽量
21608 -
STUN
+關(guān)注
關(guān)注
0文章
2瀏覽量
5869
原文標題:LVS四種工作模式和十種算法
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論