《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > 動(dòng)態(tài)反饋負(fù)載均衡在LVS集群中的設(shè)計(jì)與實(shí)現(xiàn)

動(dòng)態(tài)反饋負(fù)載均衡在LVS集群中的設(shè)計(jì)與實(shí)現(xiàn)

2008-07-14
作者:秦 劉, 蘭巨龍, 楊 帥, 智

??? 摘 要: 在Linux內(nèi)核中實(shí)現(xiàn)的負(fù)載均衡" title="負(fù)載均衡">負(fù)載均衡調(diào)度算法都是靜態(tài)的,沒有動(dòng)態(tài)調(diào)節(jié)機(jī)制。介紹了LVS集群原理,分析了LVS調(diào)度算法的不足,提出了一種通過實(shí)時(shí)獲取真實(shí)服務(wù)器" title="真實(shí)服務(wù)器">真實(shí)服務(wù)器的性能數(shù)據(jù)、計(jì)算和評估真實(shí)服務(wù)器負(fù)載,并根據(jù)結(jié)果調(diào)節(jié)服務(wù)器權(quán)值" title="權(quán)值">權(quán)值的方法。經(jīng)測試,利用該方法能夠有效防止服務(wù)器負(fù)載傾斜,達(dá)到良好高負(fù)載均衡的效果。
??? 關(guān)鍵詞: 負(fù)載均衡 LVS 集群 負(fù)反饋

?

??? 近年來,Internet的迅速發(fā)展使得人們已經(jīng)習(xí)慣從網(wǎng)絡(luò)上獲取任何想要的資源,在這種情況下需要網(wǎng)絡(luò)服務(wù)器具備提供大量并發(fā)訪問所需服務(wù)的能力。然而,單一服務(wù)器的處理能力" title="處理能力">處理能力很難滿足服務(wù)要求,已成為網(wǎng)絡(luò)系統(tǒng)的瓶頸。簡單地提高單個(gè)服務(wù)器硬件性能或者更換性能更高的服務(wù)器,都不能真正地提供大量并發(fā)訪問的能力。因?yàn)閱闻_服務(wù)器的性能總是有限的,而且網(wǎng)絡(luò)請求具有突發(fā)性,即當(dāng)有重大事件發(fā)生時(shí),網(wǎng)絡(luò)訪問量會急劇上升,從而造成網(wǎng)絡(luò)阻塞。
??? 利用集群技術(shù)在服務(wù)器應(yīng)用系統(tǒng)中實(shí)現(xiàn)負(fù)載均衡可以有效地解決上述問題。Linux的虛擬服務(wù)器LVS(Linux Virtual Server)可以完成基于IP層和基于內(nèi)容請求分發(fā)的負(fù)載平衡調(diào)度,并在Linux內(nèi)核中實(shí)現(xiàn)這些方法,將一組服務(wù)器構(gòu)成一個(gè)能實(shí)現(xiàn)可伸縮的、高可用網(wǎng)絡(luò)服務(wù)的服務(wù)器集群。本文在分析現(xiàn)有LVS負(fù)載均衡調(diào)度算法的基礎(chǔ)上,針對其不足,提出一種可動(dòng)態(tài)調(diào)整服務(wù)器權(quán)值的負(fù)載均衡調(diào)度算法。
1 LVS集群介紹
1.1? LVS集群的結(jié)構(gòu)[1]

??? LVS是由基于Linux操作系統(tǒng)的負(fù)載均衡服務(wù)器(LB)和基于任意支持TCP/IP平臺的支撐服務(wù)器RS(Real Server)群組成的高擴(kuò)展性和高穩(wěn)定性的虛擬服務(wù)器。在LVS集群中,服務(wù)器集群的結(jié)構(gòu)對用戶是透明的,用戶訪問集群提供的網(wǎng)絡(luò)服務(wù)就像訪問一臺高性能、高可用的服務(wù)器一樣。LVS集群的通用體系結(jié)構(gòu)如圖1所示,主要由以下三部分組成:

?

?

??? (1) 負(fù)載調(diào)度器" title="調(diào)度器">調(diào)度器(load balancer):它是整個(gè)集群對外的前端機(jī),負(fù)責(zé)將用戶的請求發(fā)送到一組服務(wù)器上執(zhí)行,但從用戶角度來看,服務(wù)來自一個(gè)IP地址。它可以是基于IP負(fù)載均衡技術(shù)的負(fù)載調(diào)度器,也可以是基于內(nèi)容請求分發(fā)的負(fù)載調(diào)度器,還可以是兩者的結(jié)合。
??? (2) 服務(wù)器池(server pool):是一組真正執(zhí)行用戶請求的服務(wù)器,執(zhí)行的服務(wù)有Web、MAIL、FTP和DNS等。
??? (3) 后端存儲(backend storage):它為服務(wù)器池提供一個(gè)共享的存儲區(qū),這樣可使服務(wù)器池很容易擁有相同的內(nèi)容,提供相同的服務(wù)。
??? 在調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP負(fù)載均衡技術(shù)是效率最高的,LVS實(shí)現(xiàn)的基于IP負(fù)載均衡技術(shù)的三種虛擬服務(wù)器方法如下:
??? (1) 通過網(wǎng)絡(luò)地址轉(zhuǎn)換VS/NAT技術(shù)(Virtual Server via Network Address Translation)。大多數(shù)商品化的IP負(fù)載均衡調(diào)度器產(chǎn)品都是使用此方法。
??? (2) IP隧道VS/TUN(Virtual Server via IP Tunneling)。
??? (3) 直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法VS/DR(Virtual Server via Direct Routing)。
??? 三種IP負(fù)載均衡技術(shù)的優(yōu)缺點(diǎn)如表1所示。

?

?

1.2 LVS負(fù)載均衡調(diào)度算法[2]
??? LVS支持的負(fù)載均衡調(diào)度算法有如下八種:
??? (1)輪詢(rr):以順序循環(huán)方式進(jìn)行調(diào)度,相比R-R DNS,這種調(diào)度是基于TCP或UDP網(wǎng)絡(luò)套接字連接的,而不是基于網(wǎng)絡(luò)主機(jī)的,它不受客戶端Cache或DNS分級結(jié)構(gòu)的影響。
?? ?(2)加權(quán)輪詢(wrr):循環(huán)方式調(diào)度,但在循環(huán)中給每個(gè)內(nèi)容服務(wù)器分配指定權(quán)重的連接,從而充分考慮各內(nèi)容服務(wù)器處理能力之間的差異。
?? ?(3)最小連接(lc):將新到的連接請求動(dòng)態(tài)地分配給現(xiàn)有活躍連接數(shù)最少的內(nèi)容服務(wù)器。
?? ?(4)加權(quán)最小連接(wlc):將新到的連接請求按各內(nèi)容服務(wù)器當(dāng)前處理連接數(shù)量的比例進(jìn)行動(dòng)態(tài)分配。wlc是LVS系統(tǒng)的缺省調(diào)度算法,在一般應(yīng)用中都可采用此法均衡。
?? ?(5)基于位置的最小連接(lblc):專門為高緩集群(cache cluster)設(shè)計(jì)的算法,屬基于內(nèi)容的均衡,盡量將對同一目的地址的連接請求分配給固定的一臺高緩集群節(jié)點(diǎn)。
??? (6)帶復(fù)制的基于位置的最小連接(lblcr):在集群節(jié)點(diǎn)中維護(hù)若干針對特定目的地址的高緩服務(wù)器集合,以后每當(dāng)有對匹配地址的連接請求時(shí),盡量分配給該集合中活躍連接數(shù)最少的那臺高緩服務(wù)器,并定期將該集合中負(fù)載最大的節(jié)點(diǎn)剔除。
?? ?(7)目標(biāo)哈希(dh):根據(jù)目標(biāo)地址查找事先設(shè)定的靜態(tài)哈希表來分配連接。
?? ?(8)源哈希(sh):按客戶地址查找設(shè)定的靜態(tài)哈希表來分配連接,可實(shí)現(xiàn)服務(wù)就近提供,保證服務(wù)質(zhì)量(QoS)。
2? 動(dòng)態(tài)負(fù)載均衡模型
??? 服務(wù)器的負(fù)載主要由客戶端的請求服務(wù)引起。當(dāng)客戶端的請求到來時(shí),調(diào)度器如何選擇服務(wù)器來為此請求服務(wù)的過程成為服務(wù)器負(fù)載大小的關(guān)鍵。在LVS中,調(diào)度器通過使用上述各種調(diào)度算法來完成這個(gè)工作。但上述調(diào)度算法是一些靜態(tài)算法。
??? 靜態(tài)調(diào)度算法是利用事先設(shè)定好的服務(wù)器的信息調(diào)度的,決策過程的依據(jù)都是事先設(shè)定好的,如權(quán)值等,因而不能動(dòng)態(tài)反映服務(wù)器的負(fù)載情況。當(dāng)客戶通過TCP/UDP連接訪問服務(wù)器時(shí),由于網(wǎng)絡(luò)服務(wù)的服務(wù)時(shí)間不同、訪問分布的不均勻性及服務(wù)所需資源千差萬別,靜態(tài)調(diào)度算法不能實(shí)時(shí)地反映后端服務(wù)器的負(fù)載情況,無法保證系統(tǒng)內(nèi)服務(wù)器真正地實(shí)現(xiàn)均衡。動(dòng)態(tài)算法的主要思想是根據(jù)負(fù)反饋理論,獲得服務(wù)器的真實(shí)負(fù)載情況并作出評估,將評估的結(jié)果作為系統(tǒng)的反饋來修正負(fù)載均衡算法的參數(shù)。系統(tǒng)模型如圖2所示。

?


???? 圖2只是表示了一個(gè)服務(wù)器的反饋情況,在實(shí)際情況中,每個(gè)服務(wù)器都會向調(diào)度器反饋負(fù)載情況l(l較大表示負(fù)載較大,反之則負(fù)載較?。D中,F(w,l)表示權(quán)值和負(fù)載關(guān)系的權(quán)值調(diào)節(jié)模塊,根據(jù)服務(wù)器當(dāng)前負(fù)載情況l和當(dāng)前權(quán)值w計(jì)算得出新權(quán)值w′,調(diào)度器(LB)則根據(jù)服務(wù)器新的權(quán)值信息w′分配用戶的請求。服務(wù)器池(RS)由多臺服務(wù)器組成,負(fù)責(zé)對客戶請求做出響應(yīng)并向權(quán)值調(diào)節(jié)模塊反饋負(fù)載信息。
??? 權(quán)值代表服務(wù)器的處理,通過反饋調(diào)整過的新權(quán)值w′,反映了服務(wù)器的實(shí)時(shí)處理能力。而在LVS的各種調(diào)度算法中,權(quán)值是事先設(shè)定好的。根據(jù)加權(quán)輪詢調(diào)度算法(wrr)或加權(quán)最小連接調(diào)度算法(wlc),權(quán)值大的服務(wù)器會分配到相對較多的請求。這就可能出現(xiàn)負(fù)載相對不均衡的情況:當(dāng)權(quán)值較大的服務(wù)器得到較多請求時(shí)的處理能力反而比權(quán)值小的服務(wù)器的處理能力小。這時(shí),可采用如圖2所示的負(fù)反饋模型解決負(fù)載相對的不均衡問題,即當(dāng)某個(gè)服務(wù)器的l較大時(shí),可降低w;l較小時(shí)可增大w,從而能充分發(fā)揮服務(wù)器的處理能力,較好地達(dá)到均衡負(fù)載的作用。
3 動(dòng)態(tài)負(fù)載均衡的實(shí)現(xiàn)
??? LVS系統(tǒng)中實(shí)現(xiàn)的調(diào)度算法都是靜態(tài)調(diào)度算法,為此,本文根據(jù)圖2模型引入動(dòng)態(tài)負(fù)載均衡機(jī)制,對真實(shí)服務(wù)器的權(quán)值進(jìn)行動(dòng)態(tài)調(diào)整。由于動(dòng)態(tài)負(fù)載均衡模塊需要定時(shí)收集后端真實(shí)服務(wù)器的實(shí)時(shí)負(fù)載信息,因此,要在LB中加上負(fù)載查詢與接收模塊、負(fù)載信息處理與評估模塊和內(nèi)核通信模塊[3]。加入動(dòng)態(tài)負(fù)載均衡模塊后,基于linux內(nèi)核的動(dòng)態(tài)負(fù)載均衡流程如圖3所示。

?

?

3.1 負(fù)載采集模塊
??? 動(dòng)態(tài)調(diào)度算法需要獲得各節(jié)點(diǎn)的系統(tǒng)性能和負(fù)載信息, 包括CPU占用率、CPU利用率、磁盤可用空間、內(nèi)存以及I/O利用率等。在Linux系統(tǒng)中,這些信息的獲取可通過簡單網(wǎng)絡(luò)管理協(xié)議SNMP來實(shí)現(xiàn)。支持SNMP管理的網(wǎng)路設(shè)備,其性能數(shù)據(jù)都有一個(gè)標(biāo)準(zhǔn)MIB變量并有惟一的OID與之對應(yīng),如1.3.6.1.4.1.2021.10.1.3.2表示CPU最近5分鐘的平均占用率等。在所有RS的用戶空間運(yùn)行SNMP代理進(jìn)程,SNMP將負(fù)責(zé)接收和處理LB發(fā)出的SNMP請求。由于影響服務(wù)器自身性能的因素很多,負(fù)載采集不可能收集所有的信息,在此,只選取了一般應(yīng)用中影響服務(wù)器性能的五個(gè)關(guān)鍵指標(biāo):CPU占用率L(Ci)、請求響應(yīng)時(shí)間L(Ti)、內(nèi)存占用率L(Mi)、磁盤I/O占用率L(Di)、網(wǎng)絡(luò)帶寬占有率L(Bi)。
3.2 定時(shí)器模塊和負(fù)載查詢與接收模塊
??? 負(fù)載查詢與接收模塊運(yùn)行在LB的用戶空間。對于查詢對象即RS的地址的獲取,負(fù)載查詢進(jìn)程會按一定的時(shí)間間隔遍歷內(nèi)核LVS模塊的RS鏈表,并返回Real Server的地址等信息,建立用戶空間的RS鏈表。查詢進(jìn)程根據(jù)RS鏈表,針對每一個(gè)RS,發(fā)出相應(yīng)SNMP請求查詢并存儲其負(fù)載信息。
??? 動(dòng)態(tài)反饋機(jī)制本身也是需要系統(tǒng)開銷的,因此不可能對用戶的所有請求都對服務(wù)器端的負(fù)載情況進(jìn)行查詢??刹捎妹扛粢欢ǖ臅r(shí)間間隔T(如2秒鐘),由負(fù)載查詢進(jìn)程再查詢各個(gè)服務(wù)器的情況,并相應(yīng)調(diào)整服務(wù)器的權(quán)值。這樣周期性地進(jìn)行,通過一個(gè)負(fù)反饋機(jī)制,使得服務(wù)器保持較好的利用率。
3.3 負(fù)載處理與評估模塊
??? 該模塊負(fù)責(zé)處理與評估負(fù)載接收模塊存儲對應(yīng)于每個(gè)RS的負(fù)載信息,將每個(gè)RS當(dāng)前的權(quán)值和其負(fù)載信息計(jì)算出一個(gè)新的權(quán)值。當(dāng)負(fù)載值表示服務(wù)器比較忙時(shí),新計(jì)算出的權(quán)值會比當(dāng)前權(quán)值??;反之會比當(dāng)前權(quán)值大(新權(quán)值的具體算法如后所述)。算出新權(quán)值后,通過內(nèi)核通信模塊用新的權(quán)值更新內(nèi)核中相應(yīng)服務(wù)器的信息。
??? 因?yàn)榉?wù)器的各種性能信息對服務(wù)器的處理能力影響不一樣,根據(jù)其不同的影響力,對每個(gè)因素設(shè)定一個(gè)影響因子,不同的服務(wù)器影響因子將不相同。例如,在Web服務(wù)器集群中,對服務(wù)器RSi的主要負(fù)載因素[L(Ci)、L(Ti)、L(Mi)、L(Di)、L(Bi)]引入影響因子Qi進(jìn)行計(jì)算。Qi=[qi1,qi2,qi3,qi4,qi5]=[0.4,0.3,0.1,0.1,0.1]時(shí),認(rèn)為服務(wù)器的CPU負(fù)載和請求響應(yīng)時(shí)間較其他參數(shù)重要一些。若當(dāng)前的系數(shù)Qi不能很好地反映應(yīng)用的負(fù)載,系統(tǒng)管理員可以對系數(shù)不斷地進(jìn)行修正,直到找到貼近當(dāng)前應(yīng)用的一組系數(shù)。通過下式可得出服務(wù)器RSi的負(fù)載綜合Li=Qi×[L(Ci),L(Ti),L(Mi),L(Di),L(Bi)]T。
??? 結(jié)合節(jié)點(diǎn)的初始權(quán)值和采集的綜合負(fù)載情況計(jì)算新的權(quán)值結(jié)果,即可引入如下權(quán)值計(jì)算公式:

???

式中,0.65是本文想要達(dá)到的系統(tǒng)利用率,A是一個(gè)可調(diào)整的系數(shù)(缺省值為5)。當(dāng)綜合負(fù)載值為0.65時(shí),服務(wù)器權(quán)值不變;而大于0.65時(shí),權(quán)值變小;小于0.65時(shí),權(quán)值變大。為了避免權(quán)值變成一個(gè)很大的值,對權(quán)值的范圍作一個(gè)限制其中k是可以調(diào)整的,其缺省值為10。若新權(quán)值可將新權(quán)值設(shè)為k×wi。若新權(quán)值與當(dāng)前權(quán)值的差值沒有超過設(shè)定的閥值,則將新權(quán)值設(shè)置到內(nèi)核中的IPVS調(diào)度參數(shù)中;否則避免打斷IPVS調(diào)度的開銷。這樣將使權(quán)值調(diào)整到一個(gè)穩(wěn)定點(diǎn)。當(dāng)系統(tǒng)達(dá)到理想的利用率時(shí),權(quán)值是不變的。
3.4 內(nèi)核通信模塊
??? 由于IPVS模塊工作在內(nèi)核中,因此,內(nèi)核通信模塊負(fù)責(zé)負(fù)載處理模塊及負(fù)載接收模塊與內(nèi)核的交互。主要有兩個(gè)任務(wù):(1)完成負(fù)載查詢與接收模塊取得內(nèi)核RS鏈表,并返回。(2)通過調(diào)用setsockopt()函數(shù)把負(fù)載處理模塊生成的新的權(quán)值信息傳入內(nèi)核IPVS模塊。
4 測 試
4.1 硬件環(huán)境

??? 測試平臺連接拓?fù)鋱D如圖4所示。圖中設(shè)備的硬件配置如表2所示。

?

?

?

4.2 軟件環(huán)境[5-6]
??? 各個(gè)設(shè)備使用的操作系統(tǒng)如表2所示。真實(shí)服務(wù)器RS1、RS2都運(yùn)行Apache2.2服務(wù)器,提供Web服務(wù);安裝了簡單網(wǎng)絡(luò)管理協(xié)議SNMP,負(fù)責(zé)監(jiān)控服務(wù)器的性能信息。測試儀利用工具 WAS(Web Application Stress)在客戶端向虛擬服務(wù)發(fā)起持續(xù)請求,觀察服務(wù)器的服務(wù)性能。WAS是Microsoft公司推出的Web服務(wù)器性能測試工具。WAS設(shè)置時(shí)將Stress Level大小設(shè)置為100,StressMultiplier 大小設(shè)置為 20,測試時(shí)間為 4 分鐘,測試期間WAS請求真實(shí)服務(wù)器上的HTTP動(dòng)態(tài)頁面。
4.3 測試內(nèi)容和結(jié)果分析
??? 在上述環(huán)境下,采用DR(Direct Route)方式實(shí)現(xiàn)服務(wù)器的負(fù)載均衡,其連接拓?fù)鋱D見圖1。
??? 為了測試是否會出現(xiàn)負(fù)載傾斜現(xiàn)象,將RS1和RS2的初始權(quán)值分別設(shè)為4和10,內(nèi)核LVS調(diào)度算法采用加權(quán)輪詢調(diào)度(wrr)算法。
??? (1)不使用動(dòng)態(tài)調(diào)度算法的情況
??? 靜態(tài)算法下的負(fù)載情況如圖5所示。由圖可知,RS1的配置比RS2的配置低很多,卻擁有較大的權(quán)值,所以基本一直工作在滿負(fù)荷狀態(tài),而RS2雖然配置很高但權(quán)值很低,一直處于較低的負(fù)載,其性能得不到充分發(fā)揮。這是因?yàn)榉?wù)器的權(quán)值無法動(dòng)態(tài)更改,在運(yùn)行過程中無法根據(jù)服務(wù)器的實(shí)時(shí)負(fù)載來確定服務(wù)器的權(quán)值以確定新鏈接的分配去向,造成服務(wù)器的負(fù)載傾斜。

?


??? (2)在LB上啟動(dòng)動(dòng)態(tài)負(fù)載模塊并在RS1、RS2上啟動(dòng)SNMPD進(jìn)程后,得到如圖6所示的結(jié)果。

?

?

??? 由圖6可知,雖然兩臺服務(wù)器的配置及初始權(quán)值不一樣,但由于動(dòng)態(tài)權(quán)值的引入,使得LB能夠按照各真實(shí)服務(wù)器的實(shí)時(shí)負(fù)載情況來分配任務(wù),使兩臺服務(wù)器的負(fù)載情況都在期望值(0.65)附近,較好地實(shí)現(xiàn)了負(fù)載的均衡,達(dá)到了預(yù)期效果。
??? 網(wǎng)絡(luò)中各種服務(wù)對服務(wù)器性能的需求差別很大,Linux 內(nèi)核中LVS實(shí)現(xiàn)的靜態(tài)負(fù)載均衡調(diào)度算法容易使服務(wù)器發(fā)生傾斜,達(dá)不很理想的均衡效果。而本文在介紹LVS集群系統(tǒng)及其負(fù)載均衡調(diào)度算法的基礎(chǔ)上,提出并實(shí)現(xiàn)了一種根據(jù)真實(shí)服務(wù)器實(shí)時(shí)性能數(shù)據(jù)動(dòng)態(tài)調(diào)整服務(wù)器權(quán)值的方案,經(jīng)測試,采用該方案后,能夠更加充分地發(fā)揮各服務(wù)器的性能,減少任務(wù)分配的傾斜的可能性,能更好地達(dá)到均衡負(fù)載的效果?!?BR>參考文獻(xiàn)
[1] ?ZHANG Weng Song. Linux virtual server Web site.[EB/OL] http://www.linuxvirtualserver.org, 2002.
[2] ?Turbolinux cluster server white paper[EB/OL] http ://www.turbolinux.com,2002.
[3] ?王晉鵬,潘龍法,李降龍.LVS集群中的動(dòng)態(tài)反饋調(diào)度算法[J]. 計(jì)算機(jī)工程,2005,31(19).
[4] ?吳曉葵.利用SNMP獲取網(wǎng)絡(luò)資源信息[J].現(xiàn)代電子技術(shù),2006,(16).
[5] ?軟件測試工具——WAS服務(wù)器負(fù)載測試軟件導(dǎo)讀.http://51cmm.csai.cn/casepanel/ST/No024.htm?ID=1267,2004.
[6] ?葉言苓,崔彥軍.軟件測試管理的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件, 2003,(9).

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。