LVS 之 調度算法介紹
1 概述
LVS中ipvs scheduler總共有10中調度算法:RR,WRR,LC,WLC,LBLC,LBLCR,DH,SH,SED,NQ,
VS根據其調度時是否考慮各RS當前的負載狀態,分成兩大類:靜態方法和動態方法,其中,算法越復雜,會影響服務器的效率(性能)
2 靜態方法
靜態方法僅根據算法本身進行調度,關心的是起點公平。相對LVS而言的,而不關心RS是否可以處理請求,如RS的負載狀態。
有如下4類算法
RR:roundrobin:
輪詢,後端RS均攤所有的請求
WRR:Weighted RR:
加權輪詢,根據權值來分配請求的數量
SH:Source Hashing:
源地址hash,實現session sticky
但是,這種方式問題比較多,如源地址是nat後的公網地址,如果該地址對應的後端機器很多,這樣同一ip的訪問可能會對同一服務器造成負擔。
DH:Destination Hashing:
目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶運營商
3 動態方法
動態主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value較小的RS將被調度
動態調度關心的是最終的結果,要考慮到後端服務器RS的負載情況
有如下6類算法
LC:least connections
適用於長連接應用
Overhead=activeconns*256+inactiveconns
活動連接表示正在傳送數據
非活動連接表示建立連接了,但是沒有傳送數據
WLC:Weighted LC:
WLC是默認調度方法
Overhead=(activeconns*256+inactiveconns)/weight
這裏如果是第一次連接,活動和非活動連接的值都是0.,這樣同LC和WL的算法計算結果都是0,需要通過SED來解決這個問題。因為初始+1,就會有數值的對比
SED:Shortest Expection Delay:
初始連接高權重優先,Overhead=(activeconns+1)*256/weight
NQ:
第一輪均勻分配,後續SED,解決了第一次分配不均勻的問題。使得所有的服務器都會執行一定的任務
LBLC:Locality-Based LC:
動態的DH算法,使用場景:根據負載狀態實現正向代理
LBLCR:LBLC with Replication:
帶復制功能的LBLC,解決LBLC負載不均衡問題,從負載重的復制到負載輕的RS
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1975009
LVS 之 調度算法介紹