1. 程式人生 > >LVS的調度算法-個人理解

LVS的調度算法-個人理解

Linux、LVS、ipvs

1、LVS的調度算法

我們對LVS的調度算法分為兩類:靜態算法和動態算法。


1.1、靜態算法

僅根據算法本身進行調度,而不考慮後端真實服務器的實際連接情況和負載情況。


1.1.1 輪詢(RR)--Round Robin

負載調度器將用戶請求按順序輪流分配到後端的真實服務器上。

它均等的對待每一臺真實服務器,而不管服務器實際的連接數和系統負載。權重值相同,權重值若為0則表示真實服務器不可用。


1.1.2 加權輪詢(WRR)--Weighted Round Robin

負載調度器會根據權重值來判斷後端真實服務器的性能,優先將請求分配到後端性能較好的真實服務器上。

假如主機A的權重值為2、主機B的權重值為1,則主機A的性能是B的兩倍,調度順序會變為AAB,權重值若為0則表示真實服務器不可用。


1.1.3 源地址散列(SH)--Source Hash

這種調度算法一般用於需要會話保持的WEB集群中。

當用戶請求時,負載調度器會將同一個來源IP的請求轉發給同一臺真實服務器處理。

當用戶第一次請求時,負載調度器會根據輪詢算法按順序將請求轉發到後端的真實服務器上,並會將用戶請求的源IP+轉發到後端的真實服務器對應關系以散列鍵=值的方式存放到一張散列表(哈希表)中,當用戶再一次請求時,負載調度器會根據請求的源IP,匹配散列表中對應關系,將請求分發到後端的同一臺真實服務器上。若後端的真實服務器超載或不可用,則會返回空。


1.1.4 目標地址散列(DH)--Destination Hash

當用戶請求時,負載調度器始終會將請求發往以真實服務器為目標IP的真實服務器上。

若後端的真實服務器超載或不可用,則會返回空。

這種調度算法一般用於後端真實服務器為緩存服務器的場景下,我們希望將所有請求可以一直都匹配到緩存,通過緩存服務器直接返回響應給用戶,這種調度算法就基本失去了負載均衡的意義,基本上不會用。


1.2、動態算法

根據算法及真實服務器當前的負載狀態進行調度。


1.2.1 最少連接(LC)--Least Connection

負載調度器會將用戶請求分配到後端連接數最少的真實服務器上;

當所有的真實服務器連接數都為0時則會按照輪詢按順序將請求轉發至後端;

負載調度器會記錄每個真實服務器已建立的連接數,當一個請求被調度到後端某臺真實服務器上時,則活動連接數(Active)+1,當連接中止或超時,活動連接數-1,即非活動連接(InActive)+1,當非活動連接超過空閑等待時間,則-1。權重值若為0則表示真實服務器不可用。


1.2.2 加權的最少連接(WLC)--Weighted Least Connection

負載調度器會將用戶請求分配到後端連接數最少、性能最優的真實服務器上;

當所有的真實服務器連接數都為0時則會按照輪詢按順序將請求轉發至後端,不管權重值大小。

負載調度器會記錄每個真實服務器已建立的連接數,同時也可以通過權重值來判斷真實服務器的性能。


1.2.3 最少期望延遲(SED)--Shortest Expected Delay Scheduling

負載調度器會將用戶請求分配到後端連接數最少、性能最優的真實服務器上;

當所有的真實服務器連接數都為0時則會根據權重值來判斷真實服務器的性能,並將請求轉發至後端。

SED算法彌補了WLC算法的不足。


1.2.4 永不排隊(NQ)--Never Queue

在主機A權重值為1,主機B權重值為5的環境下,如果根據SED算法分配請求的話,則可能前4次請求都會交給主機A處理,而主機B為空閑狀態,這並不是我們期望所看到的,所以NQ算法又是SED算法的改進;

當所有的真實服務器連接數都為0時則會根據權重值來判斷真實服務器的性能,並將請求轉發至後端;

當有新的用戶請求,有一臺真實服務器活動連接數為0時,則會立即轉發、無需排隊等待;

當所有的真實服務器都在處理連接時,則負載調度器會將用戶請求分配到後端連接數最少、性能最優的真實服務器上。


1.2.5 基於局部性的最少連接(LBLC)--locality Based Least Connections

這種算法是DH算法的改進算法,一般也應用於後端真實服務器是緩存服務器的場景下,彌補了DH算法的不足,其實基本上也不常用,可以實現後端緩存服務器的高可用。

當用戶請求時,負載調度器始終會將請求發往以真實服務器為目標IP的真實服務器上。

若後端的真實服務器超載或不可用,則會將請求轉發到後端最少連接的可用的真實服務器上。


1.2.6 帶復制的基於局部性的最少連接(LBLCR)--Locality Based Least Connections with Replication

LBLCR算法是LBLC算法的升級版。LBLC維護一臺為目標的真實服務器,而LBLCR則維護一組為目標的真實服務器,實現目標的負載均衡,目前主要用於緩存集群。

當用戶請求時,負載調度器從一組真實服務器中找出一臺連接數最少的服務器處理請求。

若服務器超載時,則負載調度器會按照最少連接數原則從真實服務器中選出一臺服務器,將其加入到組中並處理請求,當組一段時間沒有發生變動,則會將最忙的真實服務器從組中刪除。


LVS的調度算法-個人理解