摘要:負載均衡是實現集群中多臺服務器協同工作的重要方法,該文在分析已有方法的基礎上,提出了一種動態的負載均衡算法,調度器定時接收每個服務器上報的性能參數,并計算出每一個服務器的負載所占的比例,再根據每一個服務器負載所占比例的多少來分配用戶的請求,從而達到負載均衡和提高集群整體性能的目的。
關鍵詞:集群;負載均衡;調度器
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)26-1623-02
Analysis and Research of Load Balancing Algorithm Based on Web Cluster System
WANG Chun-juan
(Department of Computer,Shanxi Institute of Education, Xi'an 710061, China)
Abstract:Load balancing is an important way to cooperate with every server in the cluster,on the basis of analyzing the existing methods,this article puts forward a dynamic load balancing algorithm,the director receive the performance data of every server and calculate the load's proportions of every server,and then distribute the user's requests according to the load's proportions of every server,consequently solve the load balancing problem and improve the performance of the cluster.
Key words: cluster; load balancing; director
1 引言
人類社會正在進入以網絡為中心的信息時代,人們需要更快捷、更可靠、功能更豐富的網絡服務。現在很多站點收到前所未有的訪問負載,經常擔心系統如何被擴展來滿足不斷增長的性能需求,同時系統如何保持24x7的可用性。未來的應用將需要更高的吞吐率、更好的交互性、更高的安全性,這要求服務平臺具有更強的處理能力和更高的可用性。
通過高性能網絡或局域網互聯的服務器集群正成為實現高可伸縮的、高可用網絡服務的有效結構,服務器集群的結構對客戶是透明的,客戶訪問集群提供的網絡服務就如同訪問一臺高性能、高可用的服務器一樣。但實際的情況是集群中的每個服務器的負載差異很大,這就不能最大限度發揮每個服務器的能力,因此,集群的整體性能就不高。本文在分析現有負載均衡算法的基礎上,提出根據服務器的實時負載所占比例的情況來分配用戶的請求,來提高整個集群的整體性能。
2 常見的負載均衡算法
通過研究發現,按調度算法的狀態特點可以將調度算法概括為2類:靜態調度算法和動態調度算法。靜態調度算法是指調度策略事先確定,而不考慮集群系統運行時的狀態;動態負載均衡算法就是服務器集群調度器周期性地從后端服務器獲取當前的負載狀態,并根據這些狀態來動態調整后續的分配策略。LVS中提供幾種靜態調度算法如下所示。
1) 循環:當收到新的請求時,調度器在它的服務器清單中挑出下一臺服務器,在無窮的循環中遍歷每一臺服務器。
2) 帶權重的循環:基于集群節點可以處理多個負載來分配給每個集群節點一個權重或等級,然后將該權重與循環技術一塊使用,以便選擇收到新的請求時要使用的下一個節點,而不管仍然活動的連接數量。
3) 目的地散列:始終將相同IP地址的請求發送給集群中的相同服務器
4) 最小連接:把新的用戶請求分配到當前連TCP連接數最小的服務器。
5) 帶權重的最小連接:該算法與帶權重的循環算法類似,它將用戶請求分配給當前Ti/Wi值為最小的服務器。其中,Wi(i=1,2,…,n)為各服務器的權值,Ti(i=1,2,…,n)為每個服務器當前的TCP連接數。
6) 基于位置的最小連接:調度器將要發送到特定IP地址的所有請求發送到相同的透明代理服務器(集群節點),在該算法中,集群節點是位于客戶端計算機和Internet之間的透明代理或Web緩存服務器。
3 動態反饋負載均衡算法的分析與研究
3.1 算法的設計思想
該算法的設計思想是:各個服務器每隔一個固定周期(10-15s)定時向調度器匯報該服務器當前的性能參數,一般只選取了影響服務器性能的五個關鍵參數: CPU占用率、請求響應時間、內存占用率、磁盤I/O占用率、網絡帶寬占用率,當調度器收到這些參數后,并結合每臺服務器的最大處理能力Ci,計算出每臺服務器的當前負載所占的比例Pi,負載所占的比例越小,說明服務器的剩余的處理能力越大,每當有新的用戶服務請求到達時,把這些用戶請求按比例分配給后端的每臺服務器,我們可以給負載所占比例設置一個閾值,比如95%,當負載所占的比例到達95%時,可認為該服務器已經過載,不能給這個服務器分配用戶的請求,同時,如果每一臺服務器上述5個關鍵參數中任意一項參數值超過閾值,將不再給這個服務器分配用戶請求。
3.2 算法的具體描述
根據下圖2所示的流程圖,設集群系統中有n臺服務器,定義:
服務器集群集合:S={S1,S2,…,Sn};
1) 第i臺服務器的性能參數Li[j] (1≤i≤n, 1≤j≤5):表示第i臺服務器的CPU占用率、請求響應時間、內存占用率、磁盤I/O占用率、網絡帶寬占用率的性能參數值;
由于集群系統為用戶提供很多種不同的服務,且每一種服務所占用的系統資源的程度不一樣,則:
2) 第i臺服務器各項性能參數權值Wi[j] (1≤i≤n, 1≤j≤5):表示第i臺服務器的CPU占用率、請求響應時間、內存占用率、磁盤I/O占用率、網絡帶寬占用率的權值;
3) 第i臺服務器的綜合負載:load[i]=f(Li[j],Wi[j];
4) 第i臺服務器的最大處理能力為Ci;
5) 第i臺服務器的負載占用比例值:Pi=load[i]/Ci。
各個服務器每隔一個固定周期(10-15s)定時向調度器匯報該服務器當前的性能參數后。
1) 首先設定5項性能參數單項閾值(如:CPU占用率閾值為90%),系統的總負載閾值(如:閾值為95%)
2) 判斷各服務器定時上報的5項性能參數,并且判斷5項性能參數中是否存在單項值超過了預先設置的單項閾值,
若存在,則令Pi=系統的總負載閾值。
不存在,則計算每一臺服務器的Pi(1≤i≤n)值,方法如上面所示。
3) 判斷Pi是否大于等于系統總負載閾值:若大于等于,則令Pi=100%。
5) 根據各個服務器的分發權重,將用戶的請求按照這個權重比例依次分發。
3.3 算法的分析
該算法的中心思想就是按照每個服務器當前剩余的處理能力進行用戶請求分配,若服務器剩余的處理能力越大,分配的用戶請求越多,這樣就能最大限度地提高每臺服務器的使用效率,從而提高集群的整體處理性能。該算法有以下的特點:
1) 通過對單項性能參數的判斷,排除因單項性能參數達到閾值而引起的負載不均衡問題。
2) 重點突出服務器負載計算的重要性和可擴展性(反應服務器的真實負載情況)。
3) 按照服務器剩余能力劃分用戶請求分發權重,然后按照該權重進行用戶請求分發,最終達到集群負載真正的均衡。
4) 重點突出分發算法的合理性對系統的影響。
4 結束語
集群負載均衡是提高集群整體性能的關鍵,考慮到集群內部節點服務器間性能的差異性,通過動態地計算服務器節點的負載所占的比例來合理分配用戶的請求,以平衡各個服務器的負載,充分利用各個服務器的資源。
參考文獻:
[1] 劉玉艷,沈明玉.LVS負載均衡技術在網絡服務中的應用[J].合肥工業大學學報(自然科學版),2007,30(12):1592-1595.
[2] 秦劉,蘭巨龍,楊帥,等.動態反饋負載均衡在LVS集群中的設計與實現[J].計算機技術與應用,2007(9):116-119.
[3] 龔梅,王鵬,吳躍.一種集群系統的透明動態反饋負載均衡算法[J].計算機應用,2007,27(11):2662-2665.
[4] 鞠光明.服務器負載均衡調度研究[J].江蘇技術師范學院學報,2007,13(2):11-14.
[5] 魏臻,王雪輝,周霞.基于內容識別的Web集群負載均衡算法的研究[J].計算機工程與設計,2006,27(18):3410-3412.
[6] 王晉鵬,潘龍法,李降龍.LVS集群中的動態反饋調度算法[J].計算機工程,2005,31(19):40-42.