王雪蓮 鄭曉薇 劉青昆
1內(nèi)蒙古師范大學(xué)公共管理學(xué)院 呼和浩特 010022
2遼寧師范大學(xué)計算機與信息技術(shù)學(xué)院 大連 116029
LVS集群負載調(diào)度機制的研究
王雪蓮1鄭曉薇2劉青昆2
1內(nèi)蒙古師范大學(xué)公共管理學(xué)院 呼和浩特 010022
2遼寧師范大學(xué)計算機與信息技術(shù)學(xué)院 大連 116029
實現(xiàn)一個高效集群系統(tǒng)需要解決的關(guān)鍵問題之一是負載均衡,目前很多負載均衡項目是基于LVS開發(fā)的。本文就負載均衡集群LVS的體系結(jié)構(gòu)、負載均衡技術(shù)和負載調(diào)度算法做了介紹,分析了原有調(diào)度算法存在的不足,提出并構(gòu)建了帶反饋的集群負載動態(tài)調(diào)度機制,提高了集群的整體效率。
LVS;負載;調(diào)度;動態(tài)權(quán)值
隨著網(wǎng)絡(luò)快速發(fā)展和網(wǎng)絡(luò)用戶日益增加,單臺服務(wù)器難以滿足大量用戶的需求,而集群的出現(xiàn)緩解了這一問題。集群系統(tǒng)具有可伸縮性、高性價比、高可用性的特點,因此得到了廣泛的應(yīng)用[1]。而負載均衡是集群性能提高的關(guān)鍵因素之一,具有較高的研究價值和應(yīng)用前景。
論文在異構(gòu)集群服務(wù)器的環(huán)境下,對較為典型的負載均衡集群LVS的負載調(diào)度機制進行相關(guān)研究,對其進行改進,提出并構(gòu)建了帶反饋的集群負載動態(tài)調(diào)度機制,提高了集群的整體效率。
LVS(Linux Virtual Server)全稱虛擬服務(wù)器,LVS集群由國防科技大學(xué)章文嵩博士研發(fā)的,主要解決的是集群的負載均衡。LVS在兩個層次上實現(xiàn)了負載均衡,分別是基于IP層的IPVS和基于應(yīng)用層的KTCPVS內(nèi)容請求分發(fā)的均衡技術(shù),此處主要討論基于IP層上的負載均衡。
2.1 體系結(jié)構(gòu)
LVS集群體系結(jié)構(gòu)一般采用三層結(jié)構(gòu),由前端調(diào)度器層、中間服務(wù)器集群層和后端存儲系統(tǒng)層組成[2]。調(diào)度器是整個集群的前端機,是集群的唯一入口。當(dāng)有客戶請求時,首先要經(jīng)過調(diào)度器,它根據(jù)調(diào)度算法負責(zé)將客戶請求分配到服務(wù)器集群中的某一臺,是分配服務(wù)器的決策者??蛻粽J(rèn)為服務(wù)是來自一個集群IP地址,即所謂的虛擬IP,集群內(nèi)部對客戶來說是透明的。該集群中某一臺執(zhí)行完請求后將數(shù)據(jù)返回給客戶。多個服務(wù)器結(jié)構(gòu)緩減了集群的負載,體現(xiàn)了集群的可伸縮性。后端存儲系統(tǒng)為服務(wù)器集群提供相同的服務(wù),使得服務(wù)器集群有相同的內(nèi)容。
2.2 基于IP層的負載均衡技術(shù)
LVS在IP層實現(xiàn)了 3種方式的負載均衡技術(shù):網(wǎng)絡(luò)地址轉(zhuǎn)換、IP隧道模式、直接路由[3]。
(1)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,簡稱NAT)。核心思想是用地址翻譯實現(xiàn)虛擬服務(wù)。客戶通過虛擬IP訪問集群時,請求包先到達調(diào)度器,然后調(diào)度器根據(jù)調(diào)度算法從真實服務(wù)器組中選擇一臺目標(biāo)服務(wù)器,同時將請求包中的虛擬IP轉(zhuǎn)換為目標(biāo)服務(wù)器的IP,并將包中的目標(biāo)端口轉(zhuǎn)換為目標(biāo)服務(wù)器的相應(yīng)端口,轉(zhuǎn)發(fā)給目標(biāo)真實服務(wù)器。該真實服務(wù)器響應(yīng)請求后,在應(yīng)答客戶時,調(diào)度器將應(yīng)答包中的真實服務(wù)器中的IP、源端口轉(zhuǎn)換為虛擬服務(wù)器的IP源地址和端口,并將應(yīng)答包發(fā)給客戶。
(2)IP隧道模式(IP Tunneling,簡稱TUN)。在LVS中利用IP隧道技術(shù)將請求包封裝轉(zhuǎn)發(fā)給后端服務(wù)器,響應(yīng)包從服務(wù)器直接返回給客戶。IP隧道的模式是將原有的IP包封裝在另一個IP包的技術(shù),其中隧道都是靜態(tài)建立的。由于LVS后端有多個服務(wù)器,不可能靜態(tài)地建立一一對應(yīng)的隧道,依據(jù)IP隧道協(xié)議,調(diào)度器根據(jù)調(diào)度算法動態(tài)選擇一個服務(wù)器,將請求包封裝并轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器,該服務(wù)器收到后解析出原來的目標(biāo)地址VIP的包。由于服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上,因此處理該請求,再根據(jù)路由表將響應(yīng)包直接返回給客戶。
(3)直接路由(Direct Routing,簡稱DR)。和IP隧道相似之處是請求和響應(yīng)仍然分開處理。調(diào)度器通過將MAC地址改為選出服務(wù)器的MAC地址,處理客戶到服務(wù)器端的連接。當(dāng)調(diào)度器收到客戶請求包時,根據(jù)調(diào)度算法動態(tài)選擇一臺目標(biāo)服務(wù)器,不修改也不封裝IP報文,而將包含目標(biāo)MAC地址改為目標(biāo)服務(wù)器的MAC地址后轉(zhuǎn)發(fā)出去。當(dāng)服務(wù)器發(fā)現(xiàn)包中的目標(biāo)VIP是本地的網(wǎng)絡(luò)設(shè)備,服務(wù)器處理該包,并根據(jù)路由表將響應(yīng)包直接返回給客戶。
2.3 調(diào)度算法
在調(diào)度器上操作系統(tǒng)的內(nèi)核層IPVS調(diào)度模塊有十種調(diào)度算法,其中常用的四種調(diào)度算法:輪轉(zhuǎn)法(RR)、加權(quán)輪轉(zhuǎn)(WRR)、最小連接(LC)、加權(quán)最小連接(WLC)[4]。
輪轉(zhuǎn)調(diào)度算法(Round-Robin,簡稱RR),以輪轉(zhuǎn)的方式依次將請求分配到不同的服務(wù)器上。
加權(quán)輪轉(zhuǎn)調(diào)度算法(Weighted Round-Robin,簡稱WRR),根據(jù)權(quán)值的高低順序按照輪轉(zhuǎn)的方式將任務(wù)求分配到各個節(jié)點。
最小連接調(diào)度算法(Least-Connection,簡稱LC),把新請求分配到當(dāng)前連接數(shù)最小的服務(wù)器。
加權(quán)最小連接調(diào)度算法(Weighted Least-Connection,簡稱WLC),Ci表示服務(wù)器i的當(dāng)前連接數(shù) (i=0,1, … ,n-1),Wi為服務(wù)器的權(quán)值,將請求分配給所有服務(wù)器中集合{Ci/Wi}最小的服務(wù)器。
2.4 LVS存在的不足
在LVS常用的四種調(diào)度算法中,其中RR、LC 都沒有考慮服務(wù)器間處理能力差異,當(dāng)各節(jié)點任務(wù)執(zhí)行時間差別較大時,易造成節(jié)點失衡,導(dǎo)致集群效率下降。RR算法沒有反映服務(wù)器運行時的狀態(tài),LC算法連接數(shù)不能準(zhǔn)確反映當(dāng)前負載。WLC、WRR算法都是基于有性能差異的服務(wù)器,WRR和RR類似都沒有反映服務(wù)器當(dāng)前狀態(tài),屬于靜態(tài)調(diào)度。WLC和LC相似之處是把連接數(shù)作為當(dāng)前服務(wù)器負載狀況,屬于簡單的動態(tài)調(diào)度,但沒有反饋機制,沒有實現(xiàn)真正的動態(tài)調(diào)度,負載均衡效果不理想。相比較而言,上述四種算法中WLC是最占優(yōu)勢的,但是由于LVS調(diào)度機制的局限性,該算法也存在不足。反映在以下幾點:(1)用單一的連接數(shù)反映當(dāng)前負載,沒有考慮當(dāng)前服務(wù)器的其他使用資源和網(wǎng)絡(luò)情況。因為不同的連接完成任務(wù)所消耗網(wǎng)絡(luò)流量和服務(wù)器資源是不同的,所以單一的連接數(shù)并不能準(zhǔn)確地反映當(dāng)前節(jié)點負載,還應(yīng)該考慮其他負載信息。(2)服務(wù)器的權(quán)值問題。權(quán)值是反映服務(wù)器處理能力的一個量化指標(biāo),管理員設(shè)定權(quán)值并不能準(zhǔn)確的反映各個服務(wù)器間處理能力的差異;而且隨著負載的增加各個服務(wù)器的處理能力并沒有改變,易造成節(jié)點失衡。當(dāng)負載的增加超過服務(wù)器的剩余處理能力,服務(wù)器還不斷接受請求,這樣勢必導(dǎo)致服務(wù)器癱瘓。但該算法沒有考慮服務(wù)器的剩余處理能力和過載的情況。(3)對服務(wù)器的健康狀態(tài)考慮不足。當(dāng)某個服務(wù)器在運行中出現(xiàn)故障時,仍然分配任務(wù)給服務(wù)器,而沒有自動去探測服務(wù)器是否失效,造成了不必要的系統(tǒng)開銷。針對上述問題,構(gòu)建了帶反饋的LVS集群負載動態(tài)調(diào)度機制:調(diào)度器監(jiān)控服務(wù)器的負載和剩余處理能力,以便提高集群的性能。
帶反饋的LVS集群負載動態(tài)調(diào)度機制需要解決好下面幾個關(guān)鍵問題:一是構(gòu)造負載均衡模型,二是性能指標(biāo)和負載指標(biāo)的確定,三是動態(tài)權(quán)值的計算。
3.1 負載均衡模型
圖2.1 帶反饋的負載動態(tài)調(diào)度機制模型
負載均衡模型是基于Linux的LVS集群,負載均衡技術(shù)采用直接路由,通過實時監(jiān)控服務(wù)器負載,并且獲得當(dāng)前節(jié)點的動態(tài)剩余處理能力,用動態(tài)權(quán)值表示節(jié)點剩余處理能力,隨著負載增大權(quán)值在減小,負載與權(quán)值成反比,能及時發(fā)現(xiàn)服務(wù)器失效。
在調(diào)度器上運行負載均衡調(diào)度模塊、接收模塊和探測宕機模塊。接收模塊負責(zé)監(jiān)聽服務(wù)器端連接,被動接收各服務(wù)器負載信息和動態(tài)權(quán)值;探測宕機模塊周期性地主動探測服務(wù)器是否有效,當(dāng)某個服務(wù)器發(fā)生意外故障時,更新服務(wù)器表,把權(quán)值設(shè)置為0,即節(jié)點置為不可用。調(diào)度模塊根據(jù)動態(tài)反饋負載的調(diào)度算法WLC負責(zé)將客戶請求分配到服務(wù)器集群中的某一臺。服務(wù)器節(jié)點上運行發(fā)送模塊,將本地節(jié)點監(jiān)控信息經(jīng)過計算獲得當(dāng)前節(jié)點負載,進一步計算獲得動態(tài)權(quán)值,如果節(jié)點過載,則設(shè)定節(jié)點不可用,將節(jié)點信息不是周期性而是自適應(yīng)傳送給調(diào)度器,實現(xiàn)了動態(tài)權(quán)值,最終構(gòu)成了一個帶反饋的LVS集群負載動態(tài)調(diào)度機制,調(diào)度器上WLC算法可以根據(jù)反饋動態(tài)權(quán)值實現(xiàn)任務(wù)動態(tài)調(diào)度。
該模型采用集中式控制的二級模型,由后臺服務(wù)器間接控制調(diào)度器,即決策節(jié)點是否可用由后臺服務(wù)器決定而不必由調(diào)度器來控制。采用集中式為了便于節(jié)點的管理,將部分任務(wù)分給后臺服務(wù)器,減輕了調(diào)度器負擔(dān),提高了調(diào)度器分配效率。帶反饋的負載動態(tài)調(diào)度機制模型如圖2.1。
3.2 性能指標(biāo)和負載指標(biāo)
在構(gòu)建的帶反饋的LVS集群負載動態(tài)調(diào)度機制中,由于各個服務(wù)器的固有硬件性能不同,即是硬件異構(gòu)的集群,因此要考慮服務(wù)器間處理能力的性能差異,選取關(guān)鍵的CPU主頻、內(nèi)存容量、網(wǎng)絡(luò)帶寬性能指標(biāo)來表示硬件性能。
影響負載的因素有很多,選取關(guān)鍵的負載指標(biāo)對負載調(diào)度算法很重要。通過實驗表明,對于高可用集群系統(tǒng),使用資源利用率作為負載指標(biāo)的負載平衡系統(tǒng)在性能上優(yōu)于使用隊列長度作為負載指標(biāo)的系統(tǒng)[5]。為此優(yōu)先使用資源利用率作為負載指標(biāo),因此調(diào)度算法中負載指標(biāo)選擇了與上述性能指標(biāo)相對應(yīng)的服務(wù)器關(guān)鍵資源的利用率:CPU利用率、內(nèi)存利用率、網(wǎng)絡(luò)帶寬利用率。另一方面,由于服務(wù)器接受客戶請求時要增加連接數(shù),所以服務(wù)器當(dāng)前連接數(shù)也能體現(xiàn)當(dāng)前部分負載。將上述CPU、內(nèi)存、網(wǎng)絡(luò)帶寬利用率、連接數(shù)作為負載指標(biāo)綜合考慮來反映當(dāng)前服務(wù)器負載。響應(yīng)時間是集群性能的關(guān)鍵指標(biāo),很多研究者將其作為負載指標(biāo),但是當(dāng)用戶增多網(wǎng)絡(luò)繁忙的時候獲取響應(yīng)時間勢必增大了網(wǎng)絡(luò)開銷,造成網(wǎng)絡(luò)堵塞,本文沒有把響應(yīng)時間作為負載指標(biāo)是為了盡量在本地獲取負載指標(biāo)而減少需要的網(wǎng)絡(luò)開銷。
3.3 服務(wù)器負載和動態(tài)權(quán)值
在集群服務(wù)器上運行發(fā)送模塊,該模塊通過后臺守護進程udpforksend實現(xiàn)節(jié)點信息的獲取,守護進程udpforksend定義一個結(jié)構(gòu)體變量nodeinfo表示節(jié)點信息,含有負載指標(biāo)、當(dāng)前負載、節(jié)點ID號、動態(tài)權(quán)值。
節(jié)點啟動后初始化各節(jié)點處理性能參數(shù):CPU主頻、內(nèi)存容量、網(wǎng)絡(luò)帶寬。
獲得上述節(jié)點性能指標(biāo)后,通過公式(1)計算出節(jié)點綜合處理能力Ci:
其中Rcpu、Rmem、Rnet為比例系數(shù),表示各項指標(biāo)的重要程度,Rcpu+Rmem+Rnet=1;Ccpu、Cmem、Cnet分別表示CPU、內(nèi)存、網(wǎng)絡(luò)帶寬的處理性能。通過獲得綜合處理能力Ci來反映該節(jié)點的固有硬件處理能力。
獲取負載指標(biāo)后,節(jié)點當(dāng)前負載值可由公式(2)獲得:
LOADi= Rcpu*Lcpu+Rmem*Lmem+Rnet*Lnet ;(2)
其中Lcpu、Lmem、Lnet分別表示CPU利用率、內(nèi)存利用率、網(wǎng)絡(luò)利用率。
再根據(jù)公式(1)得到的Ci,由公式(3)獲得節(jié)點當(dāng)前動態(tài)權(quán)值:
本文就LVS集群的體系結(jié)構(gòu)、負載均衡技術(shù)和負載調(diào)度算法做了介紹,分析了原有調(diào)度算法存在的不足,提出并構(gòu)建了帶反饋的集群負載動態(tài)調(diào)度機制,提高了集群的整體效率。
[1]朱璇,鄭緯民,汪東升,楊廣文.單一系統(tǒng)映象在機群管理中的實現(xiàn).計算機工程與應(yīng)用.2002
[2]黃曦.Web服務(wù)器集群負載均衡技術(shù)的應(yīng)用研究[D].碩士學(xué)位論文.重慶大學(xué).2004
[3]章文嵩.http://www.linuxvirtualserver.org/
[4]王霜,修保新,肖衛(wèi)東.Web服務(wù)器集群的負載均衡算法研究[J].計算機工程與應(yīng)用.2004,40(25):78-80
[5]鞠九濱等.機群計算[M].長春:吉林大學(xué)出版社.1999
10.3969/j.issn.1001-8972.2011.005.011