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