轉自:http://xuchengji.blog.51cto.com/160472/324502
目前LVS主要有三種請求轉寄方式和八種調度演算法。根據請求轉寄方式的不同,所構架叢集的網路拓撲、安裝方式、效能表現也各不相同。用LVS主要可以架構三種形式的叢集,分別是LVS/NAT、LVS/TUN和LVS/DR,可以根據需要選擇其中一種。在選定轉寄方式的情況下,採用哪種調度演算法將決定整個負載平衡的效能表現,不同的演算法適用於不同的應用場合,有時可能需要針對特殊場合,自行設計調度演算法。LVS的演算法是逐漸豐富起來的,最初LVS只提供4 種調度演算法,後來發展到以下八種:
1.輪叫調度(Round Robin)
調度器通過“輪叫”調度演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的串連數和系統負載。
2.加權輪叫(Weighted Round Robin)
調度器通過“加權輪叫”調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的伺服器能處理更多的訪問流量。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
3.最少連結(Least Connections)
調度器通過“最少串連”調度演算法動態地將網路請求調度到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統效能,採用“最小串連”調度演算法可以較好地均衡負載。
4.加權最少連結(Weighted Least Connections)
在叢集系統中的伺服器效能差異較大的情況下,調度器採用“加權最少連結”調度演算法最佳化負載平衡效能,具有較高權值的伺服器將承受較大比例的活動串連負載。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
5.基於局部性的最少連結(Locality-Based Least Connections)
“基於局部性的最少連結”調度演算法是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統。該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用“最少連結” 的原則選出一個可用的伺服器,將請求發送到該伺服器。
6.帶複製的基於局部性最少連結(Locality-Based Least Connections with Replication)
“帶複製的基於局部性最少連結”調度演算法也是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統。它與LBLC演算法的不同之處是它要維護從一個目標 IP地址到一組伺服器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射。該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按“最小串連”原則從伺服器組中選出一台伺服器,若伺服器沒有超載,將請求發送到該伺服器;若伺服器超載,則按“最小串連”原則從這個叢集中選出一台伺服器,將該伺服器加入到伺服器組中,將請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。
7.目標地址散列(Destination Hashing)
“目標地址散列”調度演算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。
8.源地址散列(Source Hashing)
“源地址散列”調度演算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。
瞭解這些演算法原理能夠在特定的應用場合選擇最適合的調度演算法,從而儘可能地保持Real Server的最佳利用性。當然也可以自行開發演算法,不過這已超出本文範圍,請參考有關演算法原理的資料。
以下網上找到的另外兩種演算法:
9. 最短的期望的延遲(Shortest Expected Delay Scheduling SED)
基於wlc演算法。這個必須舉例來說了
ABC三台機器分別權重123 ,串連數也分別是123。那麼如果使用WLC演算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed演算法後會進行這樣一個運算
A:(1+1)/1
B:(1+2)/2
C:(1+3)/3
根據運算結果,把串連交給C 。
10.最少隊列調度(Never Queue Scheduling NQ)
無需隊列。如果有台realserver的串連數=0就直接分配過去,不需要在進行sed運算。