秦鍵銘
當(dāng)今計(jì)算機(jī)技術(shù)已進(jìn)入以網(wǎng)絡(luò)為中心的計(jì)算時(shí)期。由于客戶/服務(wù)器模型的簡(jiǎn)單性、易管理性和易維護(hù)性,客戶/服務(wù)器計(jì)算模式在網(wǎng)絡(luò)應(yīng)用中被大量采用。但該模式在服務(wù)器端存在瓶頸問(wèn)題。雖然LVS(Linux virtual server)的各種輔助工具的組合能完成ipvs的管理設(shè)置,后端服務(wù)器的keepalive(是否失效)檢測(cè),及簡(jiǎn)單的動(dòng)態(tài)反饋負(fù)載均衡。但它們?nèi)匀淮嬖谝恍﹩?wèn)題,主要表現(xiàn)在以下幾個(gè)方面:
(1)各個(gè)軟件功能單一而分散,管理起來(lái)較為麻煩。
(2)由于收集的負(fù)載信息太少而不能有效的反饋后端各個(gè)服務(wù)器的真實(shí)負(fù)載情況。
(3)不能實(shí)時(shí)智能地控制后端各個(gè)真實(shí)服務(wù)器上服務(wù)的啟動(dòng)、停止。造成不必要的CPU、內(nèi)存等資源的耗費(fèi)。
針對(duì)以上問(wèn)題,本文在linux平臺(tái)上設(shè)計(jì)實(shí)現(xiàn)一個(gè)基于IPVS的動(dòng)態(tài)反饋負(fù)載均衡系統(tǒng),該系統(tǒng)通過(guò)實(shí)時(shí)檢測(cè)后端應(yīng)用服務(wù)器的負(fù)載、系統(tǒng)運(yùn)行開(kāi)銷(xiāo)、健康狀況等信息,實(shí)時(shí)地修改IPVS的前端調(diào)度器(“網(wǎng)絡(luò)請(qǐng)求”分發(fā)器)的調(diào)度策略,并能融合服務(wù)器心跳檢測(cè),實(shí)現(xiàn)前端調(diào)度器的可用檢測(cè),真正實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)的高可用、高效、高擴(kuò)展性。
1 動(dòng)態(tài)反饋負(fù)載均衡算法分析
在負(fù)載均衡集群中,調(diào)度器(load balancer)的最終目的是把網(wǎng)絡(luò)請(qǐng)求合理有效地分配到后端真實(shí)服務(wù)器(realserver)中。為了提高負(fù)載均衡集群的服務(wù)性能,本文提出基于IPVS的動(dòng)態(tài)反饋負(fù)載均衡系統(tǒng),它由master(在調(diào)度器上啟動(dòng))和agent(在真實(shí)服務(wù)器中啟動(dòng))組成。該系統(tǒng)通過(guò)agent實(shí)時(shí)地收集后端真實(shí)服務(wù)器的負(fù)載信息,重新計(jì)算各服務(wù)器權(quán)值并及時(shí)更新負(fù)載調(diào)度器上的權(quán)值表(weight),在IPVS選擇合理的負(fù)載調(diào)度算法,使后端的真實(shí)服務(wù)器負(fù)載盡可能的均衡,從而整個(gè)負(fù)載均衡集群的性能達(dá)到較好狀態(tài)。
當(dāng)調(diào)度器收到一個(gè)新的連接請(qǐng)求的SYN包時(shí),它必須決定該請(qǐng)求發(fā)送到哪一個(gè)真實(shí)服務(wù)器,因此,需要用到請(qǐng)求調(diào)度算法。當(dāng)前,IPVS實(shí)現(xiàn)了八種調(diào)度算法,而所有調(diào)度算法都需要得到各真實(shí)服務(wù)器的權(quán)值參數(shù),因此,如何實(shí)時(shí)計(jì)算權(quán)值,更新調(diào)度器的權(quán)值表成為本系統(tǒng)實(shí)現(xiàn)關(guān)鍵。本系統(tǒng)的計(jì)算方法是通過(guò)真實(shí)服務(wù)器實(shí)時(shí)反饋回來(lái)的一組輸入指標(biāo)和服務(wù)器指標(biāo)計(jì)算各服務(wù)器綜合負(fù)載,再根據(jù)綜合負(fù)載計(jì)算權(quán)值,更新調(diào)度器上的權(quán)值表。
在計(jì)算綜合負(fù)載時(shí),主要使用兩大類(lèi)負(fù)載信息:輸入指標(biāo)和服務(wù)器指標(biāo)。輸入指標(biāo)是在調(diào)度器上收集到的,而服務(wù)器指標(biāo)是在服務(wù)器上的各種負(fù)載信息。綜合負(fù)載可用來(lái)反映服務(wù)器當(dāng)前的較確切的負(fù)載情況,對(duì)于不同的應(yīng)用,會(huì)有不同的負(fù)載情況,而通過(guò)引入各個(gè)負(fù)載信息的系數(shù),來(lái)表示各個(gè)負(fù)載信息在綜合負(fù)載中輕重。系統(tǒng)管理員根據(jù)不同應(yīng)用的需求,調(diào)整各個(gè)負(fù)載信息的系數(shù)。另外,系統(tǒng)管理員設(shè)置收集負(fù)載信息的時(shí)間間隔。
2 系統(tǒng)設(shè)計(jì)
系統(tǒng)由兩大模塊組成,master和agent,其中master存在于分發(fā)器上,主要用于查詢各個(gè)后端的應(yīng)用服務(wù)器(稱realserver)的健康狀況(Keepalive)及負(fù)載(Load)情況,并對(duì)IPVS進(jìn)行有效監(jiān)控;agent存在于各個(gè)后端的realserver服務(wù)器上,用于收集、計(jì)算其自身的負(fù)載情況,回應(yīng)master的健康檢測(cè)、負(fù)載情況等的查詢請(qǐng)求,并能根據(jù)master發(fā)過(guò)來(lái)的指令智能控制其上各個(gè)應(yīng)用服務(wù)的啟動(dòng)、停止等。
2.1 系統(tǒng)總體分析
本文動(dòng)態(tài)反饋負(fù)載均衡系統(tǒng)LVS系統(tǒng)結(jié)構(gòu)采用VS/TUN或VS/DR方式,分發(fā)器(調(diào)度器)接收到客戶端的連接請(qǐng)求后,通過(guò)動(dòng)態(tài)反饋負(fù)載均衡調(diào)度策略把請(qǐng)求送往后端真實(shí)服務(wù)器(realserver),由真實(shí)服務(wù)器作出回應(yīng),直接返回給客戶端。
2.2 master設(shè)計(jì)
本文設(shè)計(jì)的master將在主備調(diào)度器上運(yùn)行,它有三個(gè)主要功能:
(1)實(shí)現(xiàn)用戶與應(yīng)用系統(tǒng)的交互。
(2)收集agent傳過(guò)來(lái)的各真實(shí)服務(wù)器負(fù)載信息,并計(jì)算出其相應(yīng)權(quán)值,更新調(diào)度器的權(quán)值表。
(3)根據(jù)用戶要求及權(quán)值表信息實(shí)時(shí)監(jiān)控IPVS運(yùn)行狀況,實(shí)現(xiàn)動(dòng)態(tài)反饋負(fù)載均衡。
2.3 agent 設(shè)計(jì)
本文設(shè)計(jì)的master將在主備調(diào)度器上運(yùn)行,它有三個(gè)主要功能:
(1)實(shí)現(xiàn)用戶與所在服務(wù)器agent的交互。
(2)收集agent所在服務(wù)器負(fù)載信息,并傳送至Master。
(3)實(shí)時(shí)智能地控制服務(wù)的啟動(dòng)停止,保證集群的高效高可用性。
3 實(shí)驗(yàn)分析
從初步測(cè)試結(jié)果來(lái)看,使用本文系統(tǒng)可以一定程度上改善集群的反應(yīng)速度及錯(cuò)誤發(fā)生率,達(dá)到較好的負(fù)載均衡效果,并具有較完善的集群綜合管理能力。兩個(gè)服務(wù)器節(jié)點(diǎn)的web集群(負(fù)載參數(shù)主要為CPU利用率)分別在負(fù)載本身均衡、初始非均衡并且不帶負(fù)載均衡、初始非均衡且?guī)?dòng)態(tài)反饋負(fù)載均衡三種情況下,連接響應(yīng)性能的比較,在負(fù)載為非飽和狀態(tài)時(shí),帶動(dòng)態(tài)反饋比不帶動(dòng)態(tài)反饋負(fù)載均衡性能好,且?guī)缀跄茉谧罴褷顟B(tài)下運(yùn)行(接近負(fù)載本身均衡下的性能),當(dāng)負(fù)載接收飽和甚至超負(fù)荷工作時(shí),動(dòng)態(tài)反饋負(fù)載均衡不可能使系統(tǒng)達(dá)到均衡。
4 結(jié)論
本文在研究Linux下負(fù)載均衡集群基礎(chǔ)上,設(shè)計(jì)了一個(gè)基于IPVS的動(dòng)態(tài)反饋負(fù)載均衡集群系統(tǒng),該系統(tǒng)通過(guò)Agent實(shí)時(shí)獲取后端服務(wù)器負(fù)載及健康狀態(tài),進(jìn)而調(diào)整IPVS的調(diào)度策略,使負(fù)載均衡集群實(shí)現(xiàn)高效、高可用性。
參考文獻(xiàn):
[1]章文嵩,LVS集群的負(fù)載調(diào)度. IBM developerWorks,2002.5