謝曉燕, 張靜雯
(西安郵電大學 計算機學院, 陜西 西安 710121)
一種基于Linux集群技術的負載均衡方法
謝曉燕, 張靜雯
(西安郵電大學 計算機學院, 陜西 西安 710121)
針對單純提高硬件性能已經無法解決的網絡服務質量問題,提出一種基于Linux集群技術的負載均衡分配方法。在Linux虛擬服務器異構集群的基礎上,引入動態反饋模型來優化采集負載信息的通信機制,并通過智能分配策略來避免傳統輪詢算法對服務器資源的過度消耗。結合Linux腳本及命令進行性能測試,實驗結果表明,提出的智能分配方法比加權輪詢算法具有更好的響應時間和吞吐量。
負載均衡;Linux 虛擬服務器;調度算法
互聯網日新月異的發展帶來了3G井噴時代,客戶端的增加和網絡請求的實時性、突發性、并發性等特征帶給了服務器巨大的壓力,而單純提高硬件性能根本無法滿足需求。集群技術就是在這種情況下應運而生的。
集群的核心技術之一就是負載均衡,負載均衡通常由多臺服務器以對稱的方式組成一個服務器集群。每臺服務器都具有等價的地位,可以單獨對外提供服務而無需其他服務器的輔助。系統通過某種負載分擔技術將外部發來的請求均勻分配到對稱結構中的某一臺服務器上或是將重負載節點的任務分擔到多臺服務器上做并行處理,接受到請求的服務器獨立地回應客戶的請求。均衡負載能夠平均分配客戶請求到服務器集群,從而提供快速獲取重要數據并解決并發訪問服務問題[1-2]。
目前最常用的負載均衡技術有基于DNS的負載均衡,反向代理負載均衡,基于NAT的負載均衡。基于DNS的負載均衡雖然簡單易行但它不能穩定、可靠、高效地滿足企業對服務器的需求也不能滿足用戶對網絡訪問的及時響應和可用性;基于NAT的負載均衡雖然很好地解決了IP地址緊張的問題,但是每次NAT轉換勢必會增加NAT設備的開銷;反向代理服務器通過代理技術顯著地提高了靜態網絡的瀏覽速度,改善了網絡的訪問質量并且保證了一定的安全性,但其在工作的時候需要為每一種應用服務專門設計反向代理,這就很大程度上增加了工作量。由此可見對負載均衡技術的選擇取決于具體的環境和需求。
目前負載均衡算法的研究主要包括靜態負載均衡、動態負載均衡和自適應負載均衡[3]。在對負載均衡的應用中,Linux虛擬服務器(Linux Virtual Server,LVS)負載均衡系統因其資源共享,源碼公開和免費成為了當今的另一個研究熱點。在LVS集群系統[4]中主要研究靜態和動態兩大類調度策略:靜態調度策略是以定好的規則來分配資源,不考慮服務器的實時工作情況和負載狀況,它在實現的時候比較容易但其適應性不強。當大量請求并發時容易造成節點之間負載不均衡,使系統整體性能變低。動態調度策略主要是以服務器當前的連接數來代表服務器的負載狀況,經過具體的策略規則將請求發到合適的服務器上。
LVS作為基于Linux系統的負載調度技術,主要用于創建具有良好的可擴展性、高可靠性、高性能和高可用性集群[5],這樣的集群系統在文獻[6]中有很好的應用。在對LVS異構集群性能的集中研究中,文獻[7]采用類似于網絡管理的模式實現了動態反饋的最低利用率的最小連接數調度算法,文獻[8]也對WLC權值的靜態問題提出應該科學合理地整合硬件有效因素和協調網絡應用性能指標來綜合考慮。綜上所述,在選擇異構服務器集群算法的時候,大多都采用WLC算法直接進行解決,但是WLC算法作為一種動態算法,無論從實現復雜度還是資源消耗都遠遠大于靜態算法。
靜態輪詢調度實現簡單,響應時間比較短,但它在實現過程中均勻地將請求發送給每臺服務器,并不會根據服務器集群的差異來分配資源,因此并不適合異構服務器集群,這就使得具有權值分配的加權輪詢WRR作為對輪詢算法RR的一個優化得到廣泛的應用[9-10]。
本文擬針對LVS系統中服務器性能不一致的情況,引入動態負載反饋模型來優化通信機制,并在其基礎上開辟兩塊共享內存來實現對不同狀態服務器的處理。通過在服務器端開啟上報進程和在負載均衡器上開啟管理進程,以優化傳統的輪詢策略,實現集群節點的動態增加和屏蔽。
在LVS輪詢調度算法的實現中,當服務器的性能存在差異的時候,服務器的整體性能取決于最差服務器的性能。如果在輪詢策略中負載均衡器LD可以智能地分配請求,那么在理想狀態下框架的性能可以達到最優。這就需要負載均衡器LD清楚RS集群的負載信息。本文在實現分配的時候,服務器需要上報自己的性能信息,負載均衡器不僅需要對服務器上報的信息進行處理還要及時根據分配策略來智能分配資源,因此不妨將文中所給方法稱為智能分配算法。
在設計的LVS系統中,建立LD與RS集群的性能同步通信機制也就是動態反饋機制[11],使負載均衡器可以清楚后端RS集群的性能信息并且在分配請求的時候優先把請求分配到負載低的節點;對于負載高的RS節點,暫時停止分配請求并在每個時間周期去判斷該高負載節點是否恢復正常。具體邏輯如圖1所示。

圖1 LVS系統框架
對LVS框架做如下優化。
(1) 在RS集群的每個節點開啟agent進程,用來上報RS節點的負載信息;在負載均衡器上增加一個獨立的模塊monitor,用來接收agent的數據,并判讀RS的健康情況。
(2) LD需要額外開辟兩塊共享內存來存放輸出結果,存放“可用的RS”和“不可用的RS”。LD分配請求的時候需從“可用RS池”讀取RS信息并轉發請求。
(3) RS處理請求的同時,agent會實時監控服務器節點負載情況,按周期上報給LD的monitor模塊,monitor模塊根據agent上報的信息通過規則來判斷RS是否可以繼續處理更多的請求。
(4) 如果該RS負載信息正常,則把其放入“可用RS池”,等待LD的請求分配;如果該RS負載信息異常,則放入“不可用RS池”。同時LD還需要對“不可用RS池”的 RS節點進行監測。
傳統的輪詢算法在面對服務器性能一樣的時候,通常能較好地分配任務請求,但是當服務器性能不一樣的時候,往往不能使服務器資源利用最大化,這就使集群系統的整體性能受到影響。以下結合服務器的參數指標分析系統在不同情況下的服務器集群性能。
(1) 在一個具有n個服務器的集群中,服務器i的性能指標有很多[12],包括當前連接數、CPU使用率、內存使用率、輸入/輸出設備,網絡帶寬等等。在此假定CPU使用率為C,內存使用率為M,磁盤使用率為D,網卡使用率為W。在Web服務集群中,處理單次請求所需要的資源使用率分別為w,x,y,z。任何一個指標達到性能瓶頸都會影響服務器的處理性能,所以服務器i(i=1,2,…,n)的并發處理能力取決于函數
f(i)=min{Ci/w,Mi/x,Di/y,Wi/z} 。
為要保證集群有服務器,n應是大于0 的數。Ci,Mi,Di,Wi為服務器i當前使用率也就是i的動態參數。


當且僅當


(2) 在系統穩定且狀態良好的時候,集群理想處理性能為各個真實服務器處理性能的總和。
(3) 在系統不穩定的時候,假設服務器i到達性能瓶頸并處在短暫屏蔽狀態,則服務器i的處理性能約等于f(i),當且僅當


而此時集群中其它服務器的性能可以寫成βf(i),即為除i外其它真實服務器性能的總和。β取值范圍可表示為

此時系統仍然具有的理論處理能力為
F(x)-f(i)-βf(i)。
(4) 如果在短暫的屏蔽后,服務器i性能恢復正常,則系統目前的處理能力仍然為各個真實服務器處理能力的和。如果服務器i就此宕機,則此時系統具有的最大處理能力為F(x)-f(i)。
(5) 集群x的性能可表示為

通過對服務器集群性能的研究結合對輪詢算法的理解可知,輪詢調度并不適合異構服務器集群。帶有權值的輪詢算法能夠很好地解決異構服務器集群性能不一的情況,它根據靜態配置的權值來分配工作請求。但是在所有權值算法中,都有如下兩個問題無法避免:其一就是各個服務器間的性能無法完美的符合M∶N,其次就是即使在權值比接近完美的時候,個別服務器會因為突發地運行某些服務或者處理異常的請求導致權值比失去平衡;而且當系統運行一段時間或增加節點時勢必需要重新配置,增加了集群的維護成本。此外,如果權值分配不合理則會使系統性能得不到充分的利用甚至還會引發服務器宕機;即使在權值分配理想的情況下,由于它無法動態地獲取服務器的真實狀況,因此無法根據服務器的具體性能變化而及時動態合理地分配請求。智能分配策略可以動態地監測每臺服務器的負載信息,靈活增加節點以及屏蔽不可用的節點,具體實現如圖2所示。

圖2 系統流程
業務通過外網把請求發送到負載均衡器LD的外網卡,LD接收到請求后查詢“可用的RS池”,通過策略將請求發送給合適的RS進行處理。處理完成后通過RS本身外網卡把處理結果直接反饋給用戶,這里采用的是LVS-DR方式。RS上部署的agent進程會定期把RS的性能數據和負載狀況上報到LD“存儲RS負載模塊”,然后通過規則進行判斷。如果該RS可用,則把該RS的信息更新到“可用的RS池”,否則把該RS放到“暫不可用的RS池”,同時把該RS的信息在“可用的RS池”中去掉相當于屏蔽這個節點,等待一個周期后再由agent上報數據進行判斷。當需要動態增加一個節點的時候,只需要為其開啟agent進程就可以正常上報信息了。
通過虛擬機來實現系統的搭建和測試,在負載參數的采集過程中由于CPU使用率、內存使用率以及磁盤使用率數據波動不大,選擇網卡來驗證算法,當網卡超過規定的閾值時就自動進行屏蔽。實驗平臺選擇Redhat企業版本,其中Linux內核版本為2.6,采用Linux系統管理工具和shell腳本來共同完成。測試拓撲圖如圖3所示。

圖3 測試拓撲圖
通過測試獲取基于LVS-DR方式的Web服務的吞吐量及響應時間,通過對WRR算法和智能分配算法分別進行壓測來驗證服務集群的性能,其中后端服務器的參數信息如表1。

表1 服務器性能對比表
針對上表服務器性能不統一的情況,智能分配算法通過優化輪詢算法RR來避免靜態算法中權值的選擇。用RI表示RS1的性能,Ri表示RS2的性能,通過表1可以大致地認為2Ri ab -n 2000 -c 4 http://192.168.0.254/a.file來實現,其中-n和-c分別表示一共要發送的請求數和一次并發的請求數。整個命令表示對192.168.0.254下的a.file文件發送2 000個請求,每次并發4個。 通過調整-c后面的參數來調整并發的數目。多次測試后,通過ipvsadm命令可以查看WRR的連接數比例基本為3∶1。對智能分配算法和加權輪詢算法WRR從1至17不斷調整并發數,分別比較其響應時間和吞吐量,結果如圖4所示。 (a) 響應時間 (b) 吞吐量 通過圖4對加權輪詢算法WRR進行分析,WRR算法在并發為4的時候,吞吐量達到最大值,該點也正好符合權值3∶1的分配。同時在并發為8,12的時候吞吐量也略有毛刺。并發為14的時候性能較好的RS1首先出現失敗率徒增,原因是RS1與RS2的性能關系是2Ri 同樣,通過上圖對智能分配算法進行分析。 (1) 并發為1到13之間,兩種算法的響應時間和吞吐量相差不大,WRR算法按照3∶1給RS1和RS2分配請求,智能分配算法仍按照輪詢算法來分配請求。因此RS1和RS2的性能都正常。通過測試,在并發為6的時候,智能分配算法吞吐量達到最佳,系統性能基本上為F(x)。 (2) 在并發為14和15的時候,RS1性能比RS2好,系統運行基本正常。隨著并發數繼續增加,RS2漸漸出現性能問題。在并發為16的時候,智能分配算法已暫停給RS2分配請求了,此時系統的性能為 F(x)=f(i)+βf(i), 其中f(i)為RS2的性能,可以看出此時智能分配算法的響應時間曲線與吞吐量曲線優于WRR算法。 (3) 當并發數達到17的時候,RS2宕機了。智能分配算法和WRR算法均出現了大量的失敗,吞吐量有所下降。圖中智能分配算法的響應時間在并發數17的時候會超過WRR算法,可能是因為當并發請求繼續增加的時候,系統進行算法判斷、處理中斷的代價增大造成了響應時間的延長。 綜上所述,對于整體系統而言,智能分配算法在響應時間上比WRR算法短,吞吐量比WRR算法高,在整體性能上比加權輪詢算法WRR優。 在LVS輪詢算法的基礎上引入了動態反饋機制,避免了靜態分配所造成的負載分配不均衡。通過對比輪詢算法最常用的優化策略,即加權輪詢算法,提出了智能分配策略,既避免了輪詢算法對異構服務器集群資源的浪費,也避免了加權輪詢算法中權值靜態分配所造成的不適應性。 使用Linux腳本對智能分配方法進行了測試,測試結果表明,智能分配策略比加權輪詢算法具有更好的響應時間及吞吐量。通過對比加權輪詢算法WRR和智能分配算法的響應時間與吞吐量,可以明顯地看出智能分配算法的整體響應時間比加權輪詢算法WRR低,吞吐量比加權輪詢算法WRR高。由此可見,智能分配算法的整體性能優于加權輪詢算法,它是輪詢算法的一個很好的優化策略。 [1] 湯君.基于集群的動態反饋負載均衡系統的研究與應用[D].天津:天津大學,2008:11-12. [2] 朱志祥,許輝輝,王雄.基于云計算的彈性負載均衡方案[J].西安郵電大學學報,2013,18(6):43-47. [3] Valeria C, Michele C, Philips Y. Dynamic Load Balancing on Web-Server Systems[J]. IEEE Internet Computing,1999,3(3):28-29. [4] 崔小燕.Linux集群系統分析[J].西安郵電學院學報,2006,11(5):103-106. [5] 李莉,盧春,楊柯.LVS:優秀的服務器集群解決方案[J].信息安全與通信保密,2011(9):74-77. [6] Xu Yang, Xie Xiaoyao, Xia Daoxun. Research and Design on LVS Cluster System[C]//2009 IEEE International Workshop on Open-source Software for Scientific Computation. Guiyang: IEEE, 2009:68-72. [7] 謝茂濤,宋中山.LVS集群系統負載均衡策略的研究[J].計算機工程與科學,2006,28(8):30-39. [8] 劉玉艷.LVS負載均衡技術在網絡服務中的應用研究[D].合肥:合肥工業大學,2007:34-35. [9] 李慧玲,周繼成.加權輪詢算法在TCP非對稱網絡中的應用及其性能分析[J].計算機工程與技術,2000(3):10-11. [10] 張鵬,俞伯峰,龐琳,等.基于公平服務多維加權輪詢調度的IPTV組播流量控制策略[J].計算機應用,2008,28(7):1832-1834. [11] 田紹亮,左明,吳紹偉.一種改進的基于動態反饋的負載均衡算法[J].計算機工程與設計,2007,28(3):572-573. [12] 劉武釗.集群計算機系統負載均衡技術研究[D].哈爾濱:哈爾濱工程大學,2008:19-22. [責任編輯:王輝] A method of load balancing based on Linux cluster XIE Xiaoyan, ZHANG Jingwen (School of Computer Science and Technology, Xi’an University of Posts and Telecommunications, Xi’an 710121, China) The rapid increase of concurrent request brings great burden on the server. Simply raising the performance of hardware cannot fundamentally solve the problem and on the contrary it will increase overhead cost. Therefore load balancing is becoming one of hot research topics. The proposed method in this paper is based on the LVS heterogeneous cluster. It adopts dynamic feedback mechanism to optimize the communication mechanisms of load information collection, and gives an intelligent allocation method to improve the overall system performance. The experiment results show that the proposed method can significantly improve throughput and decrease response time compared with the weighted round robin algorithm. load balancing, Linux virtual server, dispatch algorithm 10.13682/j.issn.2095-6533.2014.03.013 2014-03-11 陜西省自然科學基礎研究計劃資助項目(2012JQ8029);陜西省教育廳科研計劃資助項目(12JK0938) 謝曉燕(1972-),女,副教授,從事網絡及服務計算研究。E-mail:35731599@qq.com 張靜雯(1989-),女,碩士研究生,研究方向為計算機網絡和多媒體技術。E-mail:773684821@qq.com TP399 A 2095-6533(2014)03-0064-05

4 結 語