上篇介紹LVS三種實現架構,LVS作為負載均衡軟件,依靠調度器LB(Load Balancer)把客戶端發來的請求按照一定規則分發給后端的真實服務器RS(Real Server),這個規則就是預先設定好的調度算法。
在LVS中支持的調度算法主要有以下八種。
1.輪詢調度(Round-Robin,RR)
最簡單的調度算法,LB按照順序將請求依次轉發給后端的RS,並沒有考量后端RS的狀態(處理速度以及響應時間)。大部分情況下,RS的性能狀態都是各不一致的,這種算法顯然無法滿足合理利用資源的要求。
2.帶權重的輪詢調度(Weighted Round-Robin,WRR)
在輪詢算法的基礎上加上權重設置,權重越高的RS被分配到的請求越多。適用於按照服務器性能高低,配置不同的權重,以達到合理的資源利用。
3.最小連接調度(Least-Connection, LC)
把新的請求分配給連接數最少的RS。連接數少說明服務器空閑。
4.帶權重的最小連接調度(Weight Least-Connection, WLC)
在最小連接算法的基礎上加上權重設置,這樣可以人為地控制請求分配。
5.基於局部性的最小連接調度(Locality-Based Least Connection, LBLC)
針對請求報文目標IP地址的負載均衡調度。目前主要用於Cache集群系統,因為在Cache集群中客戶請求報文的目標IP地址是變化的。
算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的請求調度到同一台服務器,來提高各台服務器的訪問局部性和主存Cache命中率,提升整個集群系統的處理能力。
LBLC調度算法先根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於其一半的工作負載,則用“最小連接”的原則選出一個可用的服務器,將請求發送到該服務器。
6.帶復制的基於局部性最小連接調度(Locality-Based Least Connections with Replication, LBLCR)
也是針對請求報文目標IP地址的負載均衡調度,與LBLC算法不同之處:LBLC維護一個目標IP到一台服務器的映射,而LBLCR則需要維護一個目標IP到一組服務器的映射。
LBLCR調度算法先根據請求的目標IP地址找到對應的服務器組,按“最小連接”原則從該服務器組中選出一台服務器,若服務器沒有超載,則將請求發送到該服務器;若服務器超載,則按“最小連接”原則從整個集群中選出一台服務器,將該服務器加入到服務組中,將請求發送給這台服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。
7.目標地址散列調度(Destination Hashing, DH)
也是針對請求報文目標IP地址的負載均衡調度,但它是一種靜態映射算法,通過一個散列(hash)函數將一個目標IP地址映射到一台服務器。DH算法先根據請求的目標IP地址,作為散列鍵(hash key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且為超載,將請求發送到該服務器,否則返回空。
8.源地址散列調度(Source Hashing, SH)
該算法正好與DH調度算法相反,它根據請求的源IP地址,作為散列鍵從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。算法流程與目標地址散列調度算法基本相似,只不過將請求的目標IP地址換成請求的源IP地址。