李姍姍,高 岑,王美吉,李冬梅,焦艷菲
1(中國科學院大學 計算機控制與工程學院,北京 100049)
2(中國科學院 沈陽計算技術研究所,沈陽 110168)
3(沈陽高精數控智能技術股份有限公司,沈陽 110168)
LVS 能夠很有效地提高云平臺的高可用性,其基于IP 技術和內容請求分發的集群負載方案,能夠把多臺服務器構成一個高可用、高可伸縮和高性能的虛擬服務器集群系統.由于其開源優勢和出色的穩定性,LVS 受到了主流市場青睞.但隨著日益增長的多樣化的海量數據請求以及網絡請求中的高并發性,LVS 的調度策略逐漸無法滿足服務需求,改進原來的策略來提升LVS 的負載均衡[1,2]能力,為網絡用戶提供更高質量的服務成為當前研究的一個熱點.
負載均衡一直以來都是服務器集群一個熱門話題,為了提高集群的資源利用率,許多新策略和解決方案不斷地被提出,已經由最初的只能進行靜態調度資源到可以根據系統運作情況進行動態資源分配,再到后來的自適應分配.對此,已經有很多國內外相關的技術人員在該方面做出了突出的貢獻.例如,IBM 公司提出的Web Sphere 相關的一套Web 服務器,其提供了有效的集群解決方案和優秀的負載均衡能力.Microsoft 公司提出了具有高可用、高可伸縮性的網絡負載技術(NLB)[1]以及組件負載均衡技術(CLB)[2].在國內,諸多高校也致力于研究負載均衡策略。例如,國防科技大學章文嵩博士支持開發的Linux 虛擬服務器項目,清華大學研發的可伸展的Web 服務器集群系統.
LVS[3]主要有負載調度器、服務器池、共享存儲組成.它們通過高速LAN 相互連接,構成IPVS.當系統升級時,可以避免集群癱瘓.

圖1 LVS 集群架構
LVS 有十種負載調度算法,其中,靜態調度算法不考慮服務器中負載狀況,動態調度算法能根據負載的變化動態的調整請求調度策略.
靜態調度算法:輪叫調度算法、加權輪叫調度算法、源地址散列算法、目標地址散列算法.
動態調度算法:最小連接數調度算法、加權最小連接調度算法、最短延遲調度調度算法、永不排隊調度算法、基于局部性的最小連接調度算法、帶復制的基于局部性最小連接調度算法.
加權最小連接算法(WLC)是目前負載效果較好,應用極為廣泛的算法.所以根據WLC 的特性,進行策略的改進.
WLC[4,5]算法根據RS 的處理能力,為RS 添加一個權值Wi來代表RS 的處理能力.當有新請求到達時,會從分派鏈表中找出連接數量與權重比值最小,且權重不為0 的RS.若找到滿足要求的RS,則返回該RS 的指針;否則返回空指針.
假設有一個集群s={s0,s1,···,sn-1},C(Si)代表節點Si的連接數,W(Si)代表節點Si的權重.所有服務器當前的總連接數為當前新的任務被分配給節點Sm,只有當節點C(Sm)×W(Si) (1)節點性能主要是與CPU、內存、I/O 設備、外部存儲等狀況有關.目前擴充外部存儲器的容量較易實現,而I/O 設備和網絡的帶寬受制于客觀條件;如果太多的這些信息計算權值,則節點的額外開銷會過多. (2)權值設置的科學性.服務器的權值是工作人員靠經驗大體估算出來的,權值設置不能很好地反映服務器的性能. (3)連接數不能準確反映出服務器資源的真實使用情況,它只代表當前服務器的請求訪問數量,不同任務對資源占用情況也不盡相同. 針對原始的負載均衡算法中人為設置的權值,負載因子越多,其對應的權值則越多,則計算結果與實際情況產生的偏差越大的情況.在改進的算法中,首先采取模擬退火算法[6,7]選擇一個最佳的負載因子來表示節點的實際負載狀態,反應節點的實際性能. 對于LVS 服務器來說,為了能達到負載均衡,首先選取CPU 使用率、內存使用率和寬帶使用率動態負載因子.通過實時采集節點的信息,選取建立節點資源模型和任務耗能模型. 節點資源模型Xi=[Xcpui,Xmemi,Xneti],其中,Xi表示第i個服務器可用的資源量,Xcpui表示CPU 能力,Xmemi表 示內存容量大小,Xneti表示帶寬大小;任務耗能模型Yi=[Ycpui,Ymemi,Yneti],其中,Yi表 示第i個服務器單位時間內能耗量,Ycpui表 示CPU 執行數量,Ymemi表示內存占用量,Yneti表示網絡數據傳輸量. 各個指標的使用率如下:CPU 使用率為Ucpu=Xcpu/Ycpu,內存使用率為Umem=Xmem/Ymem,寬帶使用率Unet=Xnet/Ynet. 計算各因子的權值向量: 算法思想:通過負載均衡器收集的節點信息,采用模擬退火算法選擇一個最佳負載因子.模擬退火算法可以較好的解決組合優化問題,并且最終結果與初始狀態無關,本文選用該算法來確定具體的權值向量.將結果放進權值向量組: α1=(αcpu1,αcpu2,···,αcpun),α2=(αmem1,αmem2,···,αmemn),α3=(αnet1,αnet2,···,αnetn),α′=(α1T,α2T,α3T),定義Ui=(Ucpui,Umemi,···,Uneti),具體的服務器負載為Li=Ui?α′;定義模型T=(L,R,S),其中:T為響應時間,L為負載情況,R為網絡請求,S為選擇函數來描述負載和請求的映射關系,目標函數定義為根據模擬退火算法:S=S A(α′,T,O)收斂時,目標函數得到最小值.算法的迭代過程: Step1.對現有解集α′中的元素進行替換,產生新解; Step2.將新解帶入目標函數,計算新的目標函數O; Step4.降溫,確定t<0.1 為算法終止條件,停止后輸出的最優解α 即為最佳負載因子的權值向量. 通過收集到的節點信息,計算每個服務器的最佳負載因子 α相對應的負載率,并給他們設置一個中間閾值,負載率大于等于80% 為欲過載區;負載率小于80%為適用區.根據任務選擇適用區,然后在適用區內選用經典WLC[8-10]算法選出一個最合適的節點. 根據本文改進的策略,結合實驗室已搭建好的OpenStack 平臺進行驗證,并且資源配置如表1. 表1 云主機的資源配置 負載均衡算法優劣一般是以集群的平均響應時間及服務器實時負載量作為評價指標.響應時間越短、負載量越穩定,說明集群的負載能力越好.為了驗證算法的有效性,本文選用WAS 壓力測試軟件,在以下兩種場景中對Linux 服務器集群進行實驗驗證. (1)在測試集群瞬時壓力的場景中,設置多梯度的不同并發量向集群系統發送一定數量的請求數據包,并且將其平均響應時間記錄下來.本文選取十個不同梯度的請求量(單位:個)為:500、1000、1500、2000、2500、3000、3500、4000、4500、5000. (2)在測試持續高負載的場景中,使用WAS 軟件模擬用戶持續向集群系統發送一定數量的請求連接,測試在該時間段內是否進行負載調整保證真實服務器的相對穩定.觀察并記錄服務器請求成功的情況.本文設置持續請求的時間為120 s. 本文采用改進后的最佳負載因子策略與傳統的WRR 算法和WLC 算法進行實驗對比,從集群角度分析,響應時間越短、服務器負載量越高,說明系統負載能力越強,在相同時間內接受和處理的請求就越多. 圖2測試結果顯示,當集群請求量數量較少時,本文改進的策略和傳統的策略平均響應時間相差不是很大.但是隨著請求量的增多、并發量的增大,本文改進策略的平均響應時間要短很多.當請求量達到5000 個時,本文策略的響應時間要比WRR 算法和WLC 算法分別少約3.7 s、7.1 s,很大程度上優化了集群系統對資源請求的處理速度,節省了響應時間,大大提高了系統資源的利用率. 圖3測試結果顯示,本文改進的算法,能夠使得服務器的在一段時間內保持實時負載率在[57%,73%]之間,而其他兩種傳統策略的實時負載率分別在[50%,85%]、[55%,82%]之間.由此可以得出,在相同一段時間內,本文改進策略更能使服務器的整體負載處于一個穩定狀態,可以將請求均衡的分配到各個服務器上,幾乎沒有出現某臺服務器負載傾斜的情況. 圖2 平均響應時間對比圖 圖3 服務器負載情況對比 由以上結果可以得出,在高并發、數據請求量巨大的集群系統中,本算法在降低系統平均響應時間和均衡各服務器節點性能上具有很大的優勢. 本文通過分析現有的算法的優點與不足,針對集群的負載因子越多對應權值越多而導致負載偏差的問題,設計出一種將模擬退火算法和WLC 算法相結合的最佳因子負載策略.通過實驗驗證了本文改進的策略能夠使得集群中的節點負載更加均衡,很大程度的提高了集群資源的利用率.該策略對于避免云平臺中服務器負載傾斜、提高其負載能力有著很大的使用價值,針對集群系統的高并發性、及負載量巨大的問題有著十分重要的意義.但是本文在集群系統出現負載傾斜時如何將系統快速的調節到均衡的狀態等方面的研究仍有不足,有待進一步研究和優化本算法.3.2 WLC 算法的影響因素
3.3 最佳負載因子調度策略

4 實驗驗證
4.1 實驗方案

4.2 實驗過程
4.3 實驗結果及分析


5 結語