LVS負(fù)載均衡的模式和算法總結(jié)
前面我們介紹了Lvs負(fù)載均衡的狀態(tài)監(jiān)控和故障處理,但是很多朋友可能對(duì)lvs負(fù)載均衡的一些基本內(nèi)容不太清楚。所以,我們特意總結(jié)了一下它的基礎(chǔ)知識(shí),包括他的三種工作模式以及八種算法。
三種LVS負(fù)載均衡模式
調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP負(fù)載均衡技術(shù)是效率最高的,IP虛擬服務(wù)器軟件(IPVS)是在linux內(nèi)核中實(shí)現(xiàn)的。
LVS負(fù)載均衡模式1.NAT模式
NAT用法本來(lái)是因?yàn)榫W(wǎng)絡(luò)IP地址不足而把內(nèi)部保留IP地址通過(guò)映射轉(zhuǎn)換成公網(wǎng)地址的一種上網(wǎng)方式(原地址NAT)。如果把NAT的過(guò)程稍微變化,就可以成為負(fù)載均衡的一種方式。原理其實(shí)就是把從客戶(hù)端發(fā)來(lái)的IP包的IP頭目的地址在DR上換成其中一臺(tái)REALSERVER的IP地址并發(fā)至此REALSERVER,而REALSERVER則在處理完成后把數(shù)據(jù)經(jīng)過(guò)DR主機(jī)發(fā)回給客戶(hù)端,DR在這個(gè)時(shí)候再把數(shù)據(jù)包的原IP地址改為DR接口上的IP地址即可。期間,無(wú)論是進(jìn)來(lái)的流量,還是出去的流量,都必須經(jīng)過(guò)DR。
LVS負(fù)載均衡模式2.IP隧道模式
隧道模式則類(lèi)似于VPN的方式,使用網(wǎng)絡(luò)分層的原理,在從客戶(hù)端發(fā)來(lái)的數(shù)據(jù)包的基礎(chǔ)上,封裝一個(gè)新的IP頭標(biāo)記(不完整的IP頭,只有目的IP部)發(fā)給REALSERVER,REALSERVER收到后,先把DR發(fā)過(guò)來(lái)的數(shù)據(jù)包的頭給解開(kāi),還原其數(shù)據(jù)包原樣,處理后,直接返回給客戶(hù)端,而不需要再經(jīng)過(guò)DR。需要注意的是,由于REALSERVER需要對(duì)DR發(fā)過(guò)來(lái)的數(shù)據(jù)包進(jìn)行還原,也就是說(shuō)必須支持IPTUNNEL協(xié)議。所以,在REALSERVER的內(nèi)核中,必須編譯支持IPTUNNEL這個(gè)選項(xiàng)。IPTUNNEL也在Net working options里面。
LVS負(fù)載均衡模式3.直接路由模式
直接路由模式比較特別,很難說(shuō)和什么方面相似,前2種模式基本上都是工作在網(wǎng)絡(luò)層上(三層),而直接路由模式則應(yīng)該是工作在數(shù)據(jù)鏈路層上(二層)。其原理為,DR和REALSERVER都使用同一個(gè)IP對(duì)外服務(wù)。但只有DR對(duì)ARP請(qǐng)求進(jìn)行響應(yīng),所有REALSERVER對(duì)本身這個(gè)IP的ARP請(qǐng)求保持靜默。也就是說(shuō),網(wǎng)關(guān)會(huì)把對(duì)這個(gè)服務(wù)IP的請(qǐng)求全部定向給DR,而DR收到數(shù)據(jù)包后根據(jù)調(diào)度算法,找出對(duì)應(yīng)的REALSERVER,把目的MAC地址改為REALSERVER的MAC并發(fā)給這臺(tái)REALSERVER。這時(shí)REALSERVER收到這個(gè)數(shù)據(jù)包,則等于直接從客戶(hù)端收到這個(gè)數(shù)據(jù)包無(wú)異,處理后直接返回給客戶(hù)端。由于DR要對(duì)二層包頭進(jìn)行改換,所以DR和REALSERVER之間必須在一個(gè)廣播域,也可以簡(jiǎn)單的理解為在同一臺(tái)交換機(jī)上。
LVS負(fù)載均衡的八種調(diào)度算法
LVS已實(shí)現(xiàn)了以下八種調(diào)度算法:
LVS負(fù)載均衡算法1.輪叫調(diào)度(Round-RobinScheduling)
調(diào)度器通過(guò)"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
LVS負(fù)載均衡算法2.加權(quán)輪叫調(diào)度(WeightedRound-RobinScheduling)
調(diào)度器通過(guò)"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪(fǎng)問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪(fǎng)問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢(xún)真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
LVS負(fù)載均衡算法3.最小連接調(diào)度(Least-ConnectionScheduling)
調(diào)度器通過(guò)"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。
LVS負(fù)載均衡算法4.加權(quán)最小連接調(diào)度(WeightedLeast-ConnectionScheduling)
在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問(wèn)詢(xún)真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值
LVS負(fù)載均衡算法5.基于局部性的最少鏈接(Locality-BasedLeastConnectionsScheduling)
基于局部性的最少鏈接"調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(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ù)器。
LVS負(fù)載均衡算法6.帶復(fù)制的基于局部性最少鏈接(Locality-BasedLeastConnectionswithReplicationScheduling)
帶復(fù)制的基于局部性最少鏈接"調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按"最小連接"原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按"最小連接"原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度
LVS負(fù)載均衡算法7.目標(biāo)地址散列調(diào)度(DestinationHashingScheduling)
目標(biāo)地址散列"調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空
LVS負(fù)載均衡算法8.源地址散列調(diào)度(SourceHashingScheduling)
源地址散列"調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(HashKey)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。