Lvs十種調度算法
最近在網上看到很多lvs調度算法的文章,然後自己以自己的理解整理了一下,如有錯誤,請指正,謝謝!
Lvs調度算法分爲靜態和動態兩類
靜態算法(4種):只根據算法進行調度 而不考慮後端真實服務器的實際連接情況和負載情況
1:輪詢調度(Round Robin)簡稱: RR
調度器(lvs)把外部的請求按請求順序分配給集羣中的真實服務器,均等的對待每一臺服務器
2:加權輪詢(Weighted Round Robun) 簡稱:WRR
帶權重的輪詢方式,調度器(lvs)把外部的請求按請求順序分配給真實服務器,但是是根據權重的大小來分配的
3:目標地址散列(Destination Hashinf )簡稱: DH
調度器(lvs)把相同請求或者把同一用戶的請求轉發到集羣中同一臺真實服務器上
例如:客戶端A第一個請求假如給了真是服務器web1,那麼也就是說,接下來客戶端A所有
的請求都會交給web1
優點:有緩存
4:源地址散列(Source Hashing) 簡稱: SH
假如公司有兩臺防火牆讓員工上網,則會把某個員工往外的訪問及向內返回的請求結果定向到同一臺防火牆上面,方便防火牆做狀態檢測
從哪個接口出去,就從哪個接口回來
動態算法(6種):前端的調度器會根據後端真實服務器的實際連接情況來分配請求
5:最少鏈接(Least Connections) 簡稱: LC
通俗點來說:也就是誰的連接數少,就把下個請求分配給誰
計算的方法是: 活動連接數 * 256 + 非活動連接數
然後計算出結果,誰的值小,下個請求就分配給誰
活動鏈接數:當前有數據包傳輸的連接
非活鏈接數:當前連接出於建立狀態,但是沒有數據傳輸
6:加權最少連接(默認採用的就是這種)(Weighted Least Connections) 簡稱:WLC
在最少連接(LC)調度 算法上加了權重
計算方法: 活動鏈接數 * 256 + 非活動連接數
——————————————————————
權重
7:最短的期望的延遲(Shortest Expected Delay Scheduling ) 簡稱:SED
SED:只考慮活動連接數
基於WLC算法,也就是在WLC算法上做的微調,對WLC做優化
計算方法:
(活動連接數 + 1 )* 256
——————————————————
權重
8:最少隊列調度(Never Queue Seheduling ) 簡稱:NQ
NQ:只考慮活動連接數,無需隊列,如果集羣中有臺真實服務器的連接數=0的話,就直接分配過去,不需要再進行sed運算
基於sed 算法,對sed的改進
9:基於局部性的最少鏈接(Locality-Based Least Connections) (LBLC)
LBLC 緩存服務器集羣,主要用於cache集羣系統,基於本地的最小連接,把請求傳遞到負載小的服務器上
10:帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)簡稱:LBLCR
LBLCR 帶複製調度的緩存服務器集羣。例如:某頁面緩存在服務器A上,被訪問次數極高,而集羣中其他緩存服務器的負載較低,監視是否訪問同一頁面,如果是訪問同一頁面, 服務器A把緩存共享給集羣中其他的機器, 調度器則把請求分到其他服務器