LVS負(fù)載均衡(LVS簡(jiǎn)介、三種工作模式、十種調(diào)度算法)
原創(chuàng)chenhuyang 發(fā)布于2018-06-02 00:54:51 閱讀數(shù) 77567? 收藏
展開(kāi)
一、LVS簡(jiǎn)介
? ? ? ?LVS(Linux Virtual Server)即Linux虛擬服務(wù)器,是由章文嵩博士主導(dǎo)的開(kāi)源負(fù)載均衡項(xiàng)目没讲,目前LVS已經(jīng)被集成到Linux內(nèi)核模塊中。該項(xiàng)目在Linux內(nèi)核中實(shí)現(xiàn)了基于IP的數(shù)據(jù)請(qǐng)求負(fù)載均衡調(diào)度方案礁苗,其體系結(jié)構(gòu)如圖1所示爬凑,終端互聯(lián)網(wǎng)用戶從外部訪問(wèn)公司的外部負(fù)載均衡服務(wù)器,終端用戶的Web請(qǐng)求會(huì)發(fā)送給LVS調(diào)度器试伙,調(diào)度器根據(jù)自己預(yù)設(shè)的算法決定將該請(qǐng)求發(fā)送給后端的某臺(tái)Web服務(wù)器嘁信,比如,輪詢算法可以將外部的請(qǐng)求平均分發(fā)給后端的所有服務(wù)器疏叨,終端用戶訪問(wèn)LVS調(diào)度器雖然會(huì)被轉(zhuǎn)發(fā)到后端真實(shí)的服務(wù)器潘靖,但如果真實(shí)服務(wù)器連接的是相同的存儲(chǔ),提供的服務(wù)也是相同的服務(wù)蚤蔓,最終用戶不管是訪問(wèn)哪臺(tái)真實(shí)服務(wù)器卦溢,得到的服務(wù)內(nèi)容都是一樣的,整個(gè)集群對(duì)用戶而言都是透明的。最后根據(jù)LVS工作模式的不同单寂,真實(shí)服務(wù)器會(huì)選擇不同的方式將用戶需要的數(shù)據(jù)發(fā)送到終端用戶贬芥,LVS工作模式分為NAT模式、TUN模式宣决、以及DR模式蘸劈。
二、三種工作模式的解析尊沸。
1威沫、基于NAT的LVS模式負(fù)載均衡
? ? ? NAT(Network Address Translation)即網(wǎng)絡(luò)地址轉(zhuǎn)換,其作用是通過(guò)數(shù)據(jù)報(bào)頭的修改洼专,使得位于企業(yè)內(nèi)部的私有IP地址可以訪問(wèn)外網(wǎng)棒掠,以及外部用用戶可以訪問(wèn)位于公司內(nèi)部的私有IP主機(jī)。VS/NAT工作模式拓?fù)浣Y(jié)構(gòu)如圖2所示屁商,LVS負(fù)載調(diào)度器可以使用兩塊網(wǎng)卡配置不同的IP地址烟很,eth0設(shè)置為私鑰IP與內(nèi)部網(wǎng)絡(luò)通過(guò)交換設(shè)備相互連接,eth1設(shè)備為外網(wǎng)IP與外部網(wǎng)絡(luò)聯(lián)通棒假。
????? ?第一步,用戶通過(guò)互聯(lián)網(wǎng)DNS服務(wù)器解析到公司負(fù)載均衡設(shè)備上面的外網(wǎng)地址精盅,相對(duì)于真實(shí)服務(wù)器而言帽哑,LVS外網(wǎng)IP又稱VIP(Virtual IP Address),用戶通過(guò)訪問(wèn)VIP叹俏,即可連接后端的真實(shí)服務(wù)器(Real Server)妻枕,而這一切對(duì)用戶而言都是透明的,用戶以為自己訪問(wèn)的就是真實(shí)服務(wù)器粘驰,但他并不知道自己訪問(wèn)的VIP僅僅是一個(gè)調(diào)度器屡谐,也不清楚后端的真實(shí)服務(wù)器到底在哪里、有多少真實(shí)服務(wù)器蝌数。
? ?第二步愕掏,用戶將請(qǐng)求發(fā)送至124.126.147.168,此時(shí)LVS將根據(jù)預(yù)設(shè)的算法選擇后端的一臺(tái)真實(shí)服務(wù)器(192.168.0.1~192.168.0.3)顶伞,將數(shù)據(jù)請(qǐng)求包轉(zhuǎn)發(fā)給真實(shí)服務(wù)器饵撑,并且在轉(zhuǎn)發(fā)之前LVS會(huì)修改數(shù)據(jù)包中的目標(biāo)地址以及目標(biāo)端口,目標(biāo)地址與目標(biāo)端口將被修改為選出的真實(shí)服務(wù)器IP地址以及相應(yīng)的端口唆貌。
? ? 第三步滑潘,真實(shí)的服務(wù)器將響應(yīng)數(shù)據(jù)包返回給LVS調(diào)度器,調(diào)度器在得到響應(yīng)的數(shù)據(jù)包后會(huì)將源地址和源端口修改為VIP及調(diào)度器相應(yīng)的端口锨咙,修改完成后语卤,由調(diào)度器將響應(yīng)數(shù)據(jù)包發(fā)送回終端用戶,另外,由于LVS調(diào)度器有一個(gè)連接Hash表粹舵,該表中會(huì)記錄連接請(qǐng)求及轉(zhuǎn)發(fā)信息钮孵,當(dāng)同一個(gè)連接的下一個(gè)數(shù)據(jù)包發(fā)送給調(diào)度器時(shí),從該Hash表中可以直接找到之前的連接記錄齐婴,并根據(jù)記錄信息選出相同的真實(shí)服務(wù)器及端口信息油猫。
2、基于TUN的LVS負(fù)載均衡
? ? ? ?在LVS(NAT)模式的集群環(huán)境中柠偶,由于所有的數(shù)據(jù)請(qǐng)求及響應(yīng)的數(shù)據(jù)包都需要經(jīng)過(guò)LVS調(diào)度器轉(zhuǎn)發(fā)情妖,如果后端服務(wù)器的數(shù)量大于10臺(tái),則調(diào)度器就會(huì)成為整個(gè)集群環(huán)境的瓶頸诱担。我們知道毡证,數(shù)據(jù)請(qǐng)求包往往遠(yuǎn)小于響應(yīng)數(shù)據(jù)包的大小。因?yàn)轫憫?yīng)數(shù)據(jù)包中包含有客戶需要的具體數(shù)據(jù)蔫仙,所以LVS(TUN)的思路就是將請(qǐng)求與響應(yīng)數(shù)據(jù)分離料睛,讓調(diào)度器僅處理數(shù)據(jù)請(qǐng)求,而讓真實(shí)服務(wù)器響應(yīng)數(shù)據(jù)包直接返回給客戶端摇邦。VS/TUN工作模式拓?fù)浣Y(jié)構(gòu)如圖3所示恤煞。其中,IP隧道(IP tunning)是一種數(shù)據(jù)包封裝技術(shù)施籍,它可以將原始數(shù)據(jù)包封裝并添加新的包頭(內(nèi)容包括新的源地址及端口居扒、目標(biāo)地址及端口),從而實(shí)現(xiàn)將一個(gè)目標(biāo)為調(diào)度器的VIP地址的數(shù)據(jù)包封裝丑慎,通過(guò)隧道轉(zhuǎn)發(fā)給后端的真實(shí)服務(wù)器(Real Server)喜喂,通過(guò)將客戶端發(fā)往調(diào)度器的原始數(shù)據(jù)包封裝,并在其基礎(chǔ)上添加新的數(shù)據(jù)包頭(修改目標(biāo)地址為調(diào)度器選擇出來(lái)的真實(shí)服務(wù)器的IP地址及對(duì)應(yīng)端口)竿裂,LVS(TUN)模式要求真實(shí)服務(wù)器可以直接與外部網(wǎng)絡(luò)連接玉吁,真實(shí)服務(wù)器在收到請(qǐng)求數(shù)據(jù)包后直接給客戶端主機(jī)響應(yīng)數(shù)據(jù)。
3腻异、基于DR的LVS負(fù)載均衡
在LVS(TUN)模式下进副,由于需要在LVS調(diào)度器與真實(shí)服務(wù)器之間創(chuàng)建隧道連接,這同樣會(huì)增加服務(wù)器的負(fù)擔(dān)悔常。與LVS(TUN)類似敢会,DR模式也叫直接路由模式,其體系結(jié)構(gòu)如圖4所示这嚣,該模式中LVS依然僅承擔(dān)數(shù)據(jù)的入站請(qǐng)求以及根據(jù)算法選出合理的真實(shí)服務(wù)器鸥昏,最終由后端真實(shí)服務(wù)器負(fù)責(zé)將響應(yīng)數(shù)據(jù)包發(fā)送返回給客戶端。與隧道模式不同的是姐帚,直接路由模式(DR模式)要求調(diào)度器與后端服務(wù)器必須在同一個(gè)局域網(wǎng)內(nèi)吏垮,VIP地址需要在調(diào)度器與后端所有的服務(wù)器間共享,因?yàn)樽罱K的真實(shí)服務(wù)器給客戶端回應(yīng)數(shù)據(jù)包時(shí)需要設(shè)置源IP為VIP地址,目標(biāo)IP為客戶端IP膳汪,這樣客戶端訪問(wèn)的是調(diào)度器的VIP地址唯蝶,回應(yīng)的源地址也依然是該VIP地址(真實(shí)服務(wù)器上的VIP),客戶端是感覺(jué)不到后端服務(wù)器存在的遗嗽。由于多臺(tái)計(jì)算機(jī)都設(shè)置了同樣一個(gè)VIP地址粘我,所以在直接路由模式中要求調(diào)度器的VIP地址是對(duì)外可見(jiàn)的,客戶端需要將請(qǐng)求數(shù)據(jù)包發(fā)送到調(diào)度器主機(jī)痹换,而所有的真實(shí)服務(wù)器的VIP地址必須配置在Non-ARP的網(wǎng)絡(luò)設(shè)備上征字,也就是該網(wǎng)絡(luò)設(shè)備并不會(huì)向外廣播自己的MAC及對(duì)應(yīng)的IP地址,真實(shí)服務(wù)器的VIP對(duì)外界是不可見(jiàn)的娇豫,但真實(shí)服務(wù)器卻可以接受目標(biāo)地址VIP的網(wǎng)絡(luò)請(qǐng)求匙姜,并在回應(yīng)數(shù)據(jù)包時(shí)將源地址設(shè)置為該VIP地址。調(diào)度器根據(jù)算法在選出真實(shí)服務(wù)器后冯痢,在不修改數(shù)據(jù)報(bào)文的情況下氮昧,將數(shù)據(jù)幀的MAC地址修改為選出的真實(shí)服務(wù)器的MAC地址,通過(guò)交換機(jī)將該數(shù)據(jù)幀發(fā)給真實(shí)服務(wù)器浦楣。整個(gè)過(guò)程中袖肥,真實(shí)服務(wù)器的VIP不需要對(duì)外界可見(jiàn)。
三振劳、LVS負(fù)載均衡調(diào)度算法
? ? ? 根據(jù)前面的介紹椎组,我們了解了LVS的三種工作模式,但不管實(shí)際環(huán)境中采用的是哪種模式澎迎,調(diào)度算法進(jìn)行調(diào)度的策略與算法都是LVS的核心技術(shù)庐杨,LVS在內(nèi)核中主要實(shí)現(xiàn)了一下十種調(diào)度算法选调。
1.輪詢調(diào)度
輪詢調(diào)度(Round Robin 簡(jiǎn)稱'RR')算法就是按依次循環(huán)的方式將請(qǐng)求調(diào)度到不同的服務(wù)器上夹供,該算法最大的特點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單。輪詢算法假設(shè)所有的服務(wù)器處理請(qǐng)求的能力都一樣的仁堪,調(diào)度器會(huì)將所有的請(qǐng)求平均分配給每個(gè)真實(shí)服務(wù)器哮洽。
2.加權(quán)輪詢調(diào)度
加權(quán)輪詢(Weight Round Robin 簡(jiǎn)稱'WRR')算法主要是對(duì)輪詢算法的一種優(yōu)化與補(bǔ)充,LVS會(huì)考慮每臺(tái)服務(wù)器的性能弦聂,并給每臺(tái)服務(wù)器添加一個(gè)權(quán)值鸟辅,如果服務(wù)器A的權(quán)值為1,服務(wù)器B的權(quán)值為2莺葫,則調(diào)度器調(diào)度到服務(wù)器B的請(qǐng)求會(huì)是服務(wù)器A的兩倍匪凉。權(quán)值越高的服務(wù)器,處理的請(qǐng)求越多捺檬。
3.最小連接調(diào)度
最小連接調(diào)度(Least Connections 簡(jiǎn)稱'LC')算法是把新的連接請(qǐng)求分配到當(dāng)前連接數(shù)最小的服務(wù)器再层。最小連接調(diào)度是一種動(dòng)態(tài)的調(diào)度算法,它通過(guò)服務(wù)器當(dāng)前活躍的連接數(shù)來(lái)估計(jì)服務(wù)器的情況。調(diào)度器需要記錄各個(gè)服務(wù)器已建立連接的數(shù)目聂受,當(dāng)一個(gè)請(qǐng)求被調(diào)度到某臺(tái)服務(wù)器蒿秦,其連接數(shù)加1;當(dāng)連接中斷或者超時(shí)蛋济,其連接數(shù)減1棍鳖。
(集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用最小連接調(diào)度算法可以比較好地均衡負(fù)載碗旅。)
4.加權(quán)最小連接調(diào)度
加權(quán)最少連接(Weight Least Connections 簡(jiǎn)稱'WLC')算法是最小連接調(diào)度的超集渡处,各個(gè)服務(wù)器相應(yīng)的權(quán)值表示其處理性能。服務(wù)器的缺省權(quán)值為1扛芽,系統(tǒng)管理員可以動(dòng)態(tài)地設(shè)置服務(wù)器的權(quán)值骂蓖。加權(quán)最小連接調(diào)度在調(diào)度新連接時(shí)盡可能使服務(wù)器的已建立連接數(shù)和其權(quán)值成比例。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況川尖,并動(dòng)態(tài)地調(diào)整其權(quán)值登下。
5.基于局部的最少連接
基于局部的最少連接調(diào)度(Locality-Based Least Connections 簡(jiǎn)稱'LBLC')算法是針對(duì)請(qǐng)求報(bào)文的目標(biāo)IP地址的 負(fù)載均衡調(diào)度,目前主要用于Cache集群系統(tǒng)叮喳,因?yàn)樵贑ache集群客戶請(qǐng)求報(bào)文的目標(biāo)IP地址是變化的被芳。這里假設(shè)任何后端服務(wù)器都可以處理任一請(qǐng)求,算法的設(shè)計(jì)目標(biāo)是在服務(wù)器的負(fù)載基本平衡情況下馍悟,將相同目標(biāo)IP地址的請(qǐng)求調(diào)度到同一臺(tái)服務(wù)器畔濒,來(lái)提高各臺(tái)服務(wù)器的訪問(wèn)局部性和Cache命中率,從而提升整個(gè)集群系統(tǒng)的處理能力锣咒。LBLC調(diào)度算法先根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器侵状,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器毅整;若服務(wù)器不存在趣兄,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則使用'最少連接'的原則選出一個(gè)可用的服務(wù)器悼嫉,將請(qǐng)求發(fā)送到服務(wù)器艇潭。
6.帶復(fù)制的基于局部性的最少連接
帶復(fù)制的基于局部性的最少連接(Locality-Based Least Connections with Replication? 簡(jiǎn)稱'LBLCR')算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)戏蔑,它與LBLC算法不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射蹋凝,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。按'最小連接'原則從該服務(wù)器組中選出一一臺(tái)服務(wù)器总棵,若服務(wù)器沒(méi)有超載鳍寂,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載情龄,則按'最小連接'原則從整個(gè)集群中選出一臺(tái)服務(wù)器迄汛,將該服務(wù)器加入到這個(gè)服務(wù)器組中候味,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí)隔心,當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改白群,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度硬霍。
7.目標(biāo)地址散列調(diào)度
目標(biāo)地址散列調(diào)度(Destination Hashing 簡(jiǎn)稱'DH')算法先根據(jù)請(qǐng)求的目標(biāo)IP地址帜慢,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且并未超載唯卖,將請(qǐng)求發(fā)送到該服務(wù)器粱玲,否則返回空。
8.源地址散列調(diào)度U
源地址散列調(diào)度(Source Hashing? 簡(jiǎn)稱'SH')算法先根據(jù)請(qǐng)求的源IP地址拜轨,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器抽减,若該服務(wù)器是可用的且并未超載,將請(qǐng)求發(fā)送到該服務(wù)器橄碾,否則返回空卵沉。它采用的散列函數(shù)與目標(biāo)地址散列調(diào)度算法的相同,它的算法流程與目標(biāo)地址散列調(diào)度算法的基本相似法牲。
9.最短的期望的延遲
最短的期望的延遲調(diào)度(Shortest Expected Delay 簡(jiǎn)稱'SED')算法基于WLC算法史汗。舉個(gè)例子吧,ABC三臺(tái)服務(wù)器的權(quán)重分別為1拒垃、2停撞、3 。那么如果使用WLC算法的話一個(gè)新請(qǐng)求進(jìn)入時(shí)它可能會(huì)分給ABC中的任意一個(gè)悼瓮。使用SED算法后會(huì)進(jìn)行一個(gè)運(yùn)算
A:(1+1)/1=2? ?B:(1+2)/2=3/2? ?C:(1+3)/3=4/3? ?就把請(qǐng)求交給得出運(yùn)算結(jié)果最小的服務(wù)器戈毒。
10.最少隊(duì)列調(diào)度
最少隊(duì)列調(diào)度(Never Queue 簡(jiǎn)稱'NQ')算法,無(wú)需隊(duì)列横堡。如果有realserver的連接數(shù)等于0就直接分配過(guò)去埋市,不需要在進(jìn)行SED運(yùn)算
https://blog.csdn.net/weixin_40470303/article/details/80541639