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