lvs中有10種負載均衡算法,分別是:1、輪詢調度,RR算法;2、加權輪詢調度,WRR算法;3、最小連接調度,LC算法;4、加權最小連接調度,WLC算法;5、基于局部的最少連接,LBLC算法;6、帶復制的基于局部性的最少連接,LBLCR算法;7、目標地址散列調度,DH算法;8、源地址散列調度U,SH算法;9、最短期望的延遲,SED算法;10、最少隊列調度,NQ算法。
具體內容如下:
LVS負載均衡調度算法
不管實際環境中采用的是哪種模式,調度算法進行調度的策略與算法都是LVS的核心技術,LVS在內核中主要實現了以下十種調度算法。
1、輪詢調度
輪詢調度(Round Robin 簡稱'RR')算法就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是實現簡單。輪詢算法假設所有的服務器處理請求的能力都一樣的,調度器會將所有的請求平均分配給每個真實服務器。
2、加權輪詢調度
加權輪詢(Weight Round Robin 簡稱'WRR')算法主要是對輪詢算法的一種優化與補充,LVS會考慮每臺服務器的性能,并給每臺服務器添加一個權值,如果服務器A的權值為1,服務器B的權值為2,則調度器調度到服務器B的請求會是服務器A的兩倍。權值越高的服務器,處理的請求越多。
3、最小連接調度
最小連接調度(Least Connections 簡稱'LC')算法是把新的連接請求分配到當前連接數最小的服務器。最小連接調度是一種動態的調度算法,它通過服務器當前活躍的連接數來估計服務器的情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;當連接中斷或者超時,其連接數減1。
(集群系統的真實服務器具有相近的系統性能,采用最小連接調度算法可以比較好地均衡負載。)
4、加權最小連接調度
加權最少連接(Weight Least Connections 簡稱'WLC')算法是最小連接調度的超集,各個服務器相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權值。加權最小連接調度在調度新連接時盡可能使服務器的已建立連接數和其權值成比例。調度器可以自動問詢真實服務器的負載情況,并動態地調整其權值。
5、基于局部的最少連接
基于局部的最少連接調度(Locality-Based Least Connections 簡稱'LBLC')算法是針對請求報文的目標IP地址的 負載均衡調度,目前主要用于Cache集群系統,因為在Cache集群客戶請求報文的目標IP地址是變化的。這里假設任何后端服務器都可以處理任一請求,算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的請求調度到同一臺服務器,來提高各臺服務器的訪問局部性和Cache命中率,從而提升整個集群系統的處理能力。LBLC調度算法先根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于一半的工作負載,則使用'最少連接'的原則選出一個可用的服務器,將請求發送到服務器。
6、帶復制的基于局部性的最少連接
帶復制的基于局部性的最少連接(Locality-Based Least Connections with Replication 簡稱'LBLCR')算法也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統,它與LBLC算法不同之處是它要維護從一個目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。按'最小連接'原則從該服務器組中選出一一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按'最小連接'原則從整個集群中選出一臺服務器,將該服務器加入到這個服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
7、目標地址散列調度
目標地址散列調度(Destination Hashing 簡稱'DH')算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且并未超載,將請求發送到該服務器,否則返回空。
8、源地址散列調度U
源地址散列調度(Source Hashing 簡稱' ')算法先根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且并未超載,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法的相同,它的算法流程與目標地址散列調度算法的基本相似。
9、最短的期望的延遲
最短的期望的延遲調度(Shortest Expected Delay 簡稱'SED')算法基于WLC算法。舉個例子吧,ABC三臺服務器的權重分別為1、2、3 。那么如果使用WLC算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用SED算法后會進行一個運算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把請求交給得出運算結果最小的服務器。
10、最少隊列調度
最少隊列調度(Never Queue 簡稱'NQ')算法,無需隊列。如果有realserver的連接數等于0就直接分配過去,不需要在進行SED運算。