摘要:采用LVS集群技術搭建所需的服務器,各服務器系統資源利用率經常存在很大差距。要解決該問題,必須依賴有效的負載均衡算法。該文深入研究LVS集群中常用的4種負載均衡算法,分析常用4種算法的優缺點,為搭建所需的服務器集群提供依據。
關鍵詞:集群;負載均衡;調度器
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)24-7028-02
Analysis of Load Balancing Algorithms Based on LVS Cluster
WANG Chun-juan
(Department of Computer, Shaanxi Institute of Education, Xi'an 710061, China)
Abstract: LVS Cluster is adopted to build necessary servers,the utilization rate of every server's system resources always has a very great distance with each other。Solving this problem must rely on effective load balancing algorithm。This article research the four common algorithms deeply in LVS, and analyze the advantages and disadvantages of this four common algorithms to provide the basis for building thenecessary cluster.
Key words: cluster; load balancing; director
1 LVS簡介
LVS集群是現有集群解決方案中應用最廣泛的一種,也是研究的重點,它可以建立在已有普通服務器的基礎之上,它的通用結構如圖1所示,是一組服務器通過高速的局域網或者地理分布的廣域網相互連接,這組服務器就是提供服務的真實服務器,用戶看不到提供服務的這組真實服務器,而只能看見一臺作為調度器(調度器上配置有虛擬IP地址,簡稱VIP)的服務器,該調度器負責接收大量客戶端計算機的請求,并決定哪個集群中的服務器可以應答用戶的請求。與計算機通常在網絡上交換數據包的方式相同,客戶端計算機、調度器和真實服務器是通過IP地址彼此進行通信的。在客戶端看來,訪問集群系統提供的服務就像訪問一臺高性能服務器一樣。由于調度器進行調度的過程是在Linux操作系統的內核中完成的,并且調度器上并不提供真實的服務和信息,只是一個虛擬的服務,因此簡稱為LVS(Linux Virtual Server)。
圖1LVS 集群系統通用結構
2 常用4種負載均衡調度算法及核心思想
在LVS集群中進行負載均衡的核心軟件,就是運行在調度器上的IPVS軟件,而IPVS軟件中已實現了8種調度算法,其中目標地址散列調度算法(簡稱DH)和源地址散列調度算法(簡稱SH)這2種負載均衡算法主要是用在防火墻集群中的,而基于局部性的最少鏈接算法(簡稱LBLC)和帶復制的基于局部性最少鏈接算法(簡稱LBLCR)這2種負載均衡算法主要是用在Cache集群中的,不是本文研究的重點。本文主要研究常用的4種調度算法的核心思想,并深入分析常用4種調度算法的優缺點。
1) 輪叫調度算法(Round-Robin Scheduling,RR)
RR算法存放在ip_vs_rr.c文件中,就是當調度器收到請求后,在它的服務器列表中挑出下一臺服務器,在無窮的循環中遍歷它們。
2) 加權輪叫調度算法(Weighted Round-Robin Scheduling,WRR)
WRR算法存放在ip_vs_wrr.c文件中,就是基于集群節點可處理多少負載來給每個集群節點配置一個合適的權重或等級,即權值Wi,然后將權重與循環技術一起使用,以便選擇收到新請求時要使用的下一個集群結點,而不管當前的活動連接數。具有權重2的服務器將收到具有權值1的服務器的2倍的新連接數,如果將服務器的權值Wi為0,就不在允許服務器接收任何用戶請求。
3) 最小連接調度算法(Least-Connection Scheduling,LC)
LC算法存放在ip_vs_lc.c文件中,就是當調度器收到請求后,調度器查看活動和非活動連接數量,將用戶的請求發送給連接數最小的那臺服務器。
調度器上計算當前連接數的具體方法是:對于每一個集群節點,調度器將集群節點目前正在服務的活動連接數的數量乘以256,然后加上它不活動的連接數(即最近使用的連接數),來得到每個節點的總連接數。
4) 加權最小連接調度算法(Weighted Least-Connection Scheduling,WLC)
WLC算法存放在ip_vs_wlc.c文件中,就是將最小連接方法和每個服務器的權重Wi結合起來,再進行服務器的選擇。當前每個節點總連接數的計算方法如上所示。如果將服務器的權值Wi為0,就不在允許服務器接收任何用戶請求。
加權最小連接調度的核心思想如下所示:
基本參數定義:假設有一組服務器S = {S0, S1, ..., Sn-1},W(Si)表示服務器Si的權值,C(Si)表示服務器Si的當前連接數。調度的具體過程:當前的新用戶請求會被發送服務器Sm,當且僅當服務器Sm滿足以下條件:判斷條件可以簡化為:C(Sm)*W(Si) < C(Si)*W(Sm),這說明服務器m是根據調度算法選出來的負載最輕的服務器,同時保證服務器的權值Wi為0時,服務器不被調度。
3 常用4種負載均衡算法的分析
LVS集群中已有8種負載均衡算法,但在實際負載均衡算法的應用中,RR、WRR、LC和WLC是經常使用的幾種負載均衡算法。
LVS集群中常用的負載均衡算法包括兩大類,第一:靜態負載均衡算法:它不考慮每臺服務器當前實際的負載情況,而只是根據事先定好的調度策略進行任務請求的分配,將用戶請求輪轉依次分配給各服務器,并且考慮到了權值W(Si),保證權值為0的服務器不被調度,該算法實現簡單且容易配置,但不能真正保證各服務器負載均衡。RR和WRR就屬于靜態負載均衡算法。第二:動態負載均衡算法:動態算法將服務器當前實際的連接數作為實際的負載情況,同時考慮到各服務器的處理能力并賦以相應的權值W(Si),將用戶的請求發送給連接數最小或者加權連接數最小的后臺服務器,充分利用每臺服務器的系統資源,從而減小用戶請求服務的響應時間。LC和WLC就屬于動態負載均衡算法。
下面來詳細地分析一下這4種常用負載均衡算法的優缺點。
1)RR算法
該算法簡單,它無需記錄每個服務器當前總連接數,是一種靜態算法,假設所有服務器處理性能均相同,但沒有考慮服務器的當前連接數等負載情況和響應速度,不適用于集群中服務器處理性能差距較大的情況,而且當用戶請求服務所需系統資源比較多時,該算法容易導致服務器間的負載不平衡。
2) WRR算法
該算法簡單和高效,也無需記錄每個服務器當前總連接數,是一種靜態算法,WRR算法是在RR算法的基礎上,并考慮了服務器的處理性能差異,以權值W(Si)表示各服務節點的處理能力,但仍然沒有考慮服務器的當前連接數等負載情況和響應速度,而且當有些用戶請求服務所需資源較多時,單獨的WRR算法容易導致服務器間的負載不平衡。
3)LC算法
LC算法是動態的均衡算法,它要記錄每臺服務器當前總連接數量,是一種動態算法,比RR算法和WRR算法的負載均衡效果要好一些。
在調度的過程中,以服務器的當前連接數作為衡量服務器負載的關鍵指標,但是,在各個服務器處理性能差距比較大的情況下,該算法的負載均衡效果不理想,同時,該算法只用當前連接數來衡量服務器的負載情況,沒有全面考慮服務器的負載情況,當某些用戶請求所需的系統資源比較多的情況下,也會使得集群系統的負載不均衡。
4) WLC算法
WLC算法是動態的均衡算法,它要記錄每臺服務器當前總連接數量,是一種動態算法,是常用4種負載均衡算法中負載均衡效果最好的一種算法。該算法既克服了某些調度算法只適用于各節點服務器處理能力相差不大的集群系統中,也考慮了各個服務節點的實際性能的差異,以權值W(Si)表示服務節點的處理能力,從而在各個服務結點之間合理的分配負載,是負載均衡效果最好的一種動態負載均衡算法。但是仍然存在著以下幾個不足的地方:
① 以當前連接數來表示每臺服務器節點的綜合負載不夠精確
當前連接數并不能較準確的表示服務器節點的負載情況,因為用戶請求的服務所需的時間和所要消耗的服務器資源千差萬別,它依賴于很多因素。當有些用戶的連接請求需要較多的系統資源時,比如會占用大量的內存和CPU資源,那么僅以當前連接數來衡量服務器節點的負載不夠全面和精確。
② 對每臺服務器權值W(Si)的設置不夠科學和靈活
WLC算法中用到的權值是管理員根據每臺服務器的實際硬件配置為每臺服務器指定的一個固定的整數值,是由管理員手動設置的,只能依靠經驗作大概的估計,僅憑主觀判斷設定的權值不一定能很好的反映服務器節點的實時處理能力,且不能在調度的過程中動態地修改該權值。
通過上面詳細的分析,可以發現,動態負載均衡算法要比靜態負載均衡算法更有實用性,負載均衡效果更好,而在實際的應用中WLC算法是LVS集群中默認的算法,也是這4種負載均衡算法中效果最好的算法,本文就是在WLC算法的基礎之上進行改進,即集群中的服務器需要每隔一個固定的周期向調度器匯報自己的負載情況,調度器然后根據負載情況動態地調節每臺服務器的權值,再將新的權值和已有的WLC算法結合起來,選取負載最輕的服務器節點處理用戶的請求。
4 結束語
通過上面對每一種算法的分析后,發現每種算法都有它適合的實際情況,因此采用集群搭建所需的高性能網絡服務時,可以根據已有的條件和實際的情況選擇合適的負載均衡算法,只有采用適合自己情況的算法才能達到理想的負載均衡效果。
參考文獻:
[1] 鄭靈翔,劉君堯,陳輝煌.Linux下的負載均衡集群LVS實現分析與測試[J].廈門大學學報:自然科學版,2002,41(6):726-730.
[2] 劉玉艷,沈明玉.LVS負載均衡技術在網絡中的應用[J].合肥工業大學學報:自然科學版,2007,30(12):1592-1595.
[3] 陳超.利用LVS中的IP負載均衡技術建立可伸縮性網絡服務[J].四川理工學院學報:自然科學版,2006,19(4):81-85.
[4] 周集良,彭小寧.王正華.基于集群的負載平衡調度算法研究與實現[J].計算機工程,2005,31(12):108-110.