摘 要:在Linux內核中實現負載均衡調度算法都是靜態的,沒有動態調節機制。這里在介紹LVS集群原理和已有方法的基礎上,提出一種實時獲取真實服務器的性能數據、計算和評估真實服務器負載,并動態地調節服務器權值的方法。經測試,使用該方法能夠達到良好的負載均衡效果,進而能有效地提高集群的性能。
關鍵詞:集群;LVS;負載均衡;動態反饋
中圖分類號:TP393 文獻標識碼:A 文章編號:1004373X(2008)1805403
Analysis and Research of Dynamic Feedback Load Balancing Based on LVS System
WANG Chunjuan,LIU Minyu
(Shaanxi Institute of Education,Xi′an,710061,China)
Abstract:All of the load balancing scheduling algorithms in the LVS kernel are static,and there isn′t dynamic mechanism to adjust the loads of the real servers,on the basis of introducing the theory of LVS cluster and the existing methods,this article puts forward a method,which can get the performance data of the real servers,calculate and evaluate the loads of the real servers and adjust the weight of the real servers.This method can well solve the load balancing and improve the performance of the cluster.
Keywords:cluster;LVS;load balancing;dynamic feedback
1 引 言
人類社會正在進入以網絡為中心的信息時代,人們需要更快捷、更可靠、功能更豐富的網絡服務。萬維網的流行促進互聯網使用的指數級增長,現在很多站點收到前所未有的訪問負載,經常擔心系統如何被擴展來滿足不斷增長的性能需求,同時系統如何保持24x7的可用性。未來的應用將需要更高的吞吐率、更好的交互性、更高的安全性,這要求服務平臺具有更強的處理能力和更高的可用性。
通過高性能網絡或局域網互聯的服務器集群正成為實現高可伸縮的、高可用網絡服務的有效結構。Linux虛擬服務器(Linux Virtual Server,LVS)[1],可以完成基于IP層和基于內容請求分發的負載均衡調度,使得服務器集群的結構對客戶是透明的,客戶訪問集群提供的網絡服務就像訪問一臺高性能、高可用的服務器一樣。本文在分析現有LVS負載均衡調度算法的基礎上,并考慮服務器的實時負載和響應情況,提出一種動態反饋的負載均衡調度方法,從而提高整個集群的性能。
2 基于LVS的集群負載均衡技術
2.1 LVS集群的體系結構
近年來,國內外對網絡服務器的負載均衡問題進行廣泛而深入的研究。LVS是于1998年創建和開發的Linux集群項目,它屬于松耦合集群系統,在IP層上實現系統單一映像,它使用負載均衡器作為集群的惟一入口,通過負載均衡器,客戶端把整個集群系統看成一個獨立的主機,客戶端的訪問都是針對該VIP(virtual IP address)地址的。一般來講,LVS集群采用調度器(LB)、服務器池(RS)和數據庫(DB)三層結構,經高速網絡互聯為一個整體,如圖1所示。
圖1 LVS集群的通用體系結構客戶通過調度器IP地址訪問網絡服務時,請求報文到達調度器,調度器根據服務器負載情況或請求的內容,執行相應的調度算法從服務器池中選出1臺服務器,以不同的轉發方式將請求報文發送給選出的服務器,真實服務器處理請求報文后,將響應報文直接發送給客戶或者經調度器轉發給客戶。LVS實現的基于IP負載均衡技術的3種虛擬服務器方法如下[2]。
(1) VSNAT(Virtual ServerNetwork Address Translation)模式,通過地址轉換實現虛擬服務器。通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給后端的真實服務器,真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
(2) VSTUN(Virtual ServerIP Tunneling)模式,通過IP隧道技術實現虛擬服務器。調度器把請求報文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。
(3) VSDR(Virtual ServerDirect Routing)模式,通過直接路由實現虛擬服務器。負載均衡器通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。
2.2 LVS的負載均衡調度算法
通過研究發現,按調度算法的狀態特點可以將調度算法概括為2類:靜態調度算法和動態調度算法。靜態調度算法是指調度策略事先確定,而不考慮集群系統運行時的狀態;動態負載均衡算法就是服務器集群調度器周期性地從后端服務器獲取當前的負載狀態,并根據這些狀態來動態調整后續的分配策略。LVS中提供8種靜態調度算法[3]:輪叫、加權輪叫、最小連接、加權最小連接、基于局部性的最少鏈接、帶復制的基于局部性最少鏈接、目標地址散列和源地址散列。
3 動態反饋負載均衡模型的研究與實現
3.1 動態反饋負載均衡的模型
靜態調度算法是利用事先設定好的服務器的信息調度,決策過程的依據都是事先設定好的,如權值等,因而不能動態反映服務器的負載情況。當客戶通過TCP/UDP連接訪問服務器時,由于網絡服務的服務時間不同、訪問分布的不均勻性及服務所需資源千差萬別,靜態調度算法不能實時地反映后端服務器的負載情況,無法保證服務器真正地實現均衡[4]。動態算法的主要思想是根據負反饋理論[5],獲得服務器的真實負載情況并作出評估,將評估的結果作為系統的反饋來修正負載均衡算法的參數。系統模型如圖2所示。
圖2只是表示一個服務器的反饋情況,在實際情況中,每個服務器都會向調度器反饋負載情況L(L較大表示負載較大,反之則較小)。其中,F(W,L)表示權值和負載關系的權值調節模塊,根據服務器當前負載情況L和當前權值W計算得出新權值W′,調度器則根據服務器新的權值信息W′分配用戶的請求。服務器池由多臺服務器組成,負責對客戶請求做出響應并向權值調節模塊反饋負載信息。
圖2 動態反饋負載均衡模型權值代表服務器的處理能力,通過反饋調整過的新權值W′,其反映了服務器的實時處理能力。而在LVS的各種調度算法中,權值是事先設定好的,根據加權輪叫調度算法或加權最小連接調度算法,權值大的服務器會分配到相對較多的請求。這就可能出現負載相對不均衡的情況: 當權值較大的服務器得到較多請求時的處理能力反而比權值小的服務器的處理能力小。這時,可采用如圖2所示動態反饋模型來解決負載相對的不均衡問題,即當某個服務器的L較大時,可降低W,從而能充分發揮服務器的處理能力,較好地達到均衡負載的作用。
3.2 動態反饋負載均衡的實現
根據圖2模型引入動態反饋負載均衡機制,對真實服務器的權值進行動態調整,由于動態負載均衡模塊需要定時收集后端真實服務器的實時負載信息,因此,要在調度器中加上負載查詢與接收模塊、負載信息處理與評估模塊和內核通信模塊。加入動態負載均衡模塊后,基于Linux內核的動態負載均衡流程如圖3所示。
圖3 動態負載均衡流程3.2.1 負載采集模塊
動態調度算法需要獲得各服務器的系統性能和負載信息,包括CPU占用率、CPU利用率、磁盤可用空間、內存以及I/O利用率等。在Linux系統中,這些信息的獲取可通過簡單網絡管理協議SNMP來實現,在所有RS的用戶空間運行SNMP代理進程,SNMP將負責接收和處理調度器發出的SNMP請求。由于影響服務器自身性能的因素很多,負載采集不可能收集所有的信息,在此,只選取了一般應用中影響服務器性能的5個關鍵指標[6]: CPU占用率L(Ci)、請求響應時間L(Ti)、內存占用率L(Mi)、磁盤I/O占用率L(Di)、網絡帶寬占有率L(Bi)。
3.2.2 負載處理模塊
該模塊負責處理負載采集模塊存儲的每個RS的負載信息,因為服務器的各種性能信息對服務器的處理能力影響都不一樣,根據其不同的影響力,對每個因素設定一個影響因子,不同的服務器影響因子將不相同。例如,在Web服務器集群中,對服務器RSi的主要負載因素[L(Ci),L(Ti),L(Mi),L(Di),L(Bi)]引入影響因子Qi進行計算,當Qi=[qi1,qi2,qi3,qi4,qi5]=[0.4,0.3,0.1,0.1,0.1] 時,認為服務器的CPU負載和請求響應時間較其他參數重要一些;若當前的系數Qi不能很好地反映應用的負載,系統管理員可以對系數不斷地進行修正,直到找到貼近當前應用的一組系數。通過下式可得出服務器RSi的綜合負載值AGGREGATELOADi=Qi×[L(Ci),L(Ti),L(Mi),L(Di),L(Bi)]T。
3.2.3 負載查詢與評估模塊
根據每個RS當前的權值和負載處理模塊計算出的負載信息計算出一個新的權值,當負載值表示服務器比較忙時,新計算出的權值會比當前權值小,反之會比當前權值大。算出新權值后,通過內核通信模塊用新的權值更新內核中相應服務器的權值信息。
結合節點的初始權值和查詢的綜合負載值計算新的權值結果,即可引入如下權值計算公式:
wi←wi+A*30.95-AGGERGATELOADi,當AGGERGATELOADi≠0.95
wi,當AGGERGATELOADi≠0.95
在上式中,0.95是想要達到的系統利用率,A是一個可調整的系數,當綜合負載值為0.95時,服務器權值不變;當綜合負載值大于0.95時,權值變小;當綜合負載值小于0.95時,權值變大。這樣將使權值調整到一個穩定點,當系統達到理想的利用率時,權值是不變的。
在LB端程序中,存在一個雙向鏈表dlist,用于存放需要定期更新的RS的信息。每當LB接收到由RS服務器發送的信息,首先判斷是否第一次收到此RS的信息。如果是,則將此RS加入dlist鏈表;如果此RS原先已在dlist 鏈表中存在,則更新收到的內容。
動態反饋機制本身也需要系統開銷,因此不可能對用戶的所有請求都對服務器端的負載情況進行查詢,可采用每隔一定的時間間隔T,由負載查詢進程再查詢各個服務器的情況,并相應調整服務器的權值。這樣周期性地進行,通過一個動態反饋機制,使得服務器保持較好的利用率。
3.2.4 內核通信模塊
由于IPVS模塊工作在內核中,因此,內核通信模塊負責負載查詢與接收模塊與內核的交互。
主要有2個任務:
(1) 完成負載查詢與評估模塊取得內核RS鏈表;
(2) 把負載查詢與評估模塊生成的新的權值信息傳入內核IPVS模塊中。
4 性能測試
這里使用VSNAT方式構造一個LVS集群,集群內有3臺服務器,配置分別為雙CPU 服務器、單CPU服務器和普通PC,再使用2臺PC作為客戶端對集群進行模擬加壓測試,使用的工具是Linux下的Httperf,其中一臺用以模擬正常請求數據流,另一臺則模擬突發請求數據流。選擇的對比測試算法為加權輪叫法,性能對比測試結果如圖4、圖5所示,可以看出采用動態反饋負載均衡算法可以較好地平衡負載,尤其是在突發較嚴重的情況下更能夠充分利用各服務器的資源,從而有效提高集群的整體性能。
圖4 加權輪叫法測試結果圖5 動態反饋法測試結果
5 結 語
集群負載均衡策略是提高集群整體性能的關鍵,考慮到用戶請求間的差異性和集群內部節點服務器間性能的差異性,通過動態地計算節點的權值來合理分配用戶請求,以平衡節點的負載,充分利用各節點的資源。實踐證明,采用動態負載均衡算法可以有效提高集群的性能,尤其是在集群內部節點服務器性能不一的情況下,效果尤其明顯。
參 考 文 獻
[1]劉玉艷,沈明玉.LVS負載均衡技術在網絡服務中的應用[J].合肥工業大學學報:自然科學版,2007,30(12):1 5921 595.
[2]秦劉,蘭巨龍,楊帥.動態反饋負載均衡在LVS集群中的設計與實現[J].計算機技術與應用,2007(9):116119.
[3]王晉鵬,潘龍法,李降龍.LVS集群中的動態反饋調度算法[J].計算機工程,2005,31(19):4042.
[4]龔梅,王鵬,吳躍.一種集群系統的透明動態反饋負載均衡算法[J].計算機應用,2007,27(11):2 6622 665.
[5]郭全生,舒繼武,毛希平.基于LVS系統的負載動態平衡設計與實現[J].計算機研究與發展,2004,41(6):923929.
[6]田紹亮,左明,吳紹偉.一種改進的基于動態反饋的負載均衡算法[J].計算機工程與設計,2007,28(3):572573.
[7]宋安軍,王曉峰,彭勤科,等.計算機集群監控系統任務模型的研究\\.現代電子技術,2007,30(5):115116.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文