Linux服務(wù)器集群系統(tǒng)(一)
LVS項(xiàng)目介紹章文嵩 (wensong@linux-vs.org)
2002 年 3 月
本文介紹了Linux服務(wù)器集群系統(tǒng)--LVS(Linux Virtual Server)項(xiàng)目的產(chǎn)生背景和目標(biāo),并描述了LVS服務(wù)器集群框架及目前提供的軟件,列舉LVS集群系統(tǒng)的特點(diǎn)和一些實(shí)際應(yīng)用,最后,本文談?wù)摿薒VS項(xiàng)目的開發(fā)進(jìn)展和開發(fā)感觸。
當(dāng)今計(jì)算機(jī)技術(shù)已進(jìn)入以網(wǎng)絡(luò)為中心的計(jì)算時(shí)期。由于客戶/服務(wù)器模型的簡(jiǎn)單性、易管理性和易維護(hù)性,客戶/服務(wù)器計(jì)算模式在網(wǎng)上被大量采用。在九十年代中 期,萬(wàn)維網(wǎng)(World Wide Web)的出現(xiàn)以其簡(jiǎn)單操作方式將圖文并茂的網(wǎng)上信息帶給普通大眾,Web也正在從一種內(nèi)容發(fā)送機(jī)制成為一種服務(wù)平臺(tái),大量的服務(wù)和應(yīng)用(如新聞服務(wù)、網(wǎng) 上銀行、電子商務(wù)等)都是圍繞著Web進(jìn)行。這促進(jìn)Internet用戶劇烈增長(zhǎng)和Internet流量爆炸式地增長(zhǎng),圖1顯示了1995至2000年與 Internet連接主機(jī)數(shù)的變化情況[1],可見增長(zhǎng)趨勢(shì)較以往更迅猛。

圖1:1995至2000年Internet主機(jī)數(shù)的變化
Internet的飛速發(fā)展給網(wǎng)絡(luò)帶寬和服務(wù)器帶來(lái)巨大的挑戰(zhàn)。從網(wǎng)絡(luò)技術(shù)的發(fā)展來(lái)看,網(wǎng)絡(luò)帶寬的增長(zhǎng)遠(yuǎn)高于處理器速度和內(nèi)存訪問(wèn)速度的增長(zhǎng),如100M Ethernet、ATM、Gigabit Ethernet等不斷地涌現(xiàn),10Gigabit Ethernet即將就緒,在主干網(wǎng)上密集波分復(fù)用(DWDM)將成為寬帶IP的主流技術(shù)[2,3],Lucent已經(jīng)推出在一根光纖跑800Gigabit的WaveStar? OLS 800G產(chǎn)品[4]。所以,我們深信越來(lái)越多的瓶頸會(huì)出現(xiàn)在服務(wù)器端。很多研究顯示Gigabit Ethernet在服務(wù)器上很難使得其吞吐率達(dá)到1Gb/s的原因是協(xié)議棧(TCP/IP)和操作系統(tǒng)的低效,以及處理器的低效,這需要對(duì)協(xié)議的處理方法、操作系統(tǒng)的調(diào)度和IO的處理作更深入的研究。在高速網(wǎng)絡(luò)上,重新設(shè)計(jì)單臺(tái)服務(wù)器上的網(wǎng)絡(luò)服務(wù)程序也是個(gè)重要課題。
比較熱門的站點(diǎn)會(huì)吸引前所未有的訪問(wèn)流量,例如根據(jù)Yahoo的新聞發(fā)布,Yahoo已經(jīng)每天發(fā)送6.25億頁(yè)面[5]。一些網(wǎng)絡(luò)服務(wù)也收到巨額的流量, 如American Online的Web Cache系統(tǒng)每天處理50.2億個(gè)用戶訪問(wèn)Web的請(qǐng)求,每個(gè)請(qǐng)求的平均響應(yīng)長(zhǎng)度為5.5Kbytes。與此同時(shí),很多網(wǎng)絡(luò)服務(wù)因?yàn)樵L問(wèn)次數(shù)爆炸式地增 長(zhǎng)而不堪重負(fù),不能及時(shí)處理用戶的請(qǐng)求,導(dǎo)致用戶進(jìn)行長(zhǎng)時(shí)間的等待,大大降低了服務(wù)質(zhì)量。如何建立可伸縮的網(wǎng)絡(luò)服務(wù)來(lái)滿足不斷增長(zhǎng)的負(fù)載需求已成為迫在眉 睫的問(wèn)題。
大部分網(wǎng)站都需要提供每天24小時(shí)、每星期7天的服務(wù),對(duì)電子商務(wù)等網(wǎng)站尤為突出,任何服務(wù)中斷和關(guān)鍵性的數(shù)據(jù)丟失都會(huì)造成直接的商業(yè)損失。例如,根據(jù) Dell的新聞發(fā)布[6],Dell現(xiàn)在每天在網(wǎng)站上的交易收入為一千四百萬(wàn)美元,一個(gè)小時(shí)的服務(wù)中斷都會(huì)造成平均五十八萬(wàn)美元的損失。所以,這對(duì)網(wǎng)絡(luò)服 務(wù)的可靠性提出了越來(lái)越高的要求。
現(xiàn)在Web服務(wù)中越來(lái)越多地使用CGI、動(dòng)態(tài)主頁(yè)等CPU密集型應(yīng)用,這對(duì)服務(wù)器的性能有較高要求。未來(lái)的網(wǎng)絡(luò)服務(wù)會(huì)提供更豐富的內(nèi)容、更好的交互性、更高的安全性等,需要服務(wù)器具有更強(qiáng)的CPU和I/O處理能力。例如,通過(guò)HTTPS(Secure HTTP)取一個(gè)靜態(tài)頁(yè)面需要的處理性能比通過(guò)HTTP的高一個(gè)數(shù)量級(jí),HTTPS正在被電子商務(wù)站點(diǎn)廣為使用。所以,網(wǎng)絡(luò)流量并不能說(shuō)明全部問(wèn)題,要考慮到應(yīng)用本身的發(fā)展也需要越來(lái)越強(qiáng)的處理性能。
因此,對(duì)用硬件和軟件方法實(shí)現(xiàn)高可伸縮、高可用網(wǎng)絡(luò)服務(wù)的需求不斷增長(zhǎng),這種需求可以歸結(jié)以下幾點(diǎn):
- 可伸縮性(Scalability),當(dāng)服務(wù)的負(fù)載增長(zhǎng)時(shí),系統(tǒng)能被擴(kuò)展來(lái)滿足需求,且不降低服務(wù)質(zhì)量。
- 高可用性(Availability),盡管部分硬件和軟件會(huì)發(fā)生故障,整個(gè)系統(tǒng)的服務(wù)必須是每天24小時(shí)每星期7天可用的。
- 可管理性(Manageability),整個(gè)系統(tǒng)可能在物理上很大,但應(yīng)該容易管理。
- 價(jià)格有效性(Cost-effectiveness),整個(gè)系統(tǒng)實(shí)現(xiàn)是經(jīng)濟(jì)的、易支付的。
對(duì)稱多處理(Symmetric Multi-Processor,簡(jiǎn)稱SMP)是由多個(gè)對(duì)稱的處理器、和通過(guò)總線共享的內(nèi)存和I/O部件所組成的計(jì)算機(jī)系統(tǒng)。SMP是一種低并行度的結(jié)構(gòu),是我們通常所說(shuō)的"緊耦合多處理系統(tǒng)",它的可擴(kuò)展能力有限,但SMP的優(yōu)點(diǎn)是單一系統(tǒng)映像(Single System Image),有共享的內(nèi)存和I/O,易編程。
由于SMP的可擴(kuò)展能力有限,SMP服務(wù)器顯然不能滿足高可伸縮、高可用網(wǎng)絡(luò)服務(wù)中的負(fù)載處理能力不斷增長(zhǎng)需求。隨著負(fù)載不斷增長(zhǎng),會(huì)導(dǎo)致服務(wù)器不斷地升 級(jí)。這種服務(wù)器升級(jí)有下列不足:一是升級(jí)過(guò)程繁瑣,機(jī)器切換會(huì)使服務(wù)暫時(shí)中斷,并造成原有計(jì)算資源的浪費(fèi);二是越往高端的服務(wù)器,所花費(fèi)的代價(jià)越大;三是 SMP服務(wù)器是單一故障點(diǎn)(Single Point of Failure),一旦該服務(wù)器或應(yīng)用軟件失效,會(huì)導(dǎo)致整個(gè)服務(wù)的中斷。
通過(guò)高性能網(wǎng)絡(luò)或局域網(wǎng)互聯(lián)的服務(wù)器集群正成為實(shí)現(xiàn)高可伸縮的、高可用網(wǎng)絡(luò)服務(wù)的有效結(jié)構(gòu)。這種松耦合結(jié)構(gòu)的服務(wù)器集群系統(tǒng)有下列優(yōu)點(diǎn):
-
性能
網(wǎng)絡(luò)服務(wù)的工作負(fù)載通常是大量相互獨(dú)立的任務(wù),通過(guò)一組服務(wù)器分而治之,可以獲得很高的整體性能。 -
性能/價(jià)格比
組成集群系統(tǒng)的PC服務(wù)器或RISC服務(wù)器和標(biāo)準(zhǔn)網(wǎng)絡(luò)設(shè)備因?yàn)榇笠?guī)模生產(chǎn)降低成本,價(jià)格低,具有最高的性能/價(jià)格比。若整體性能隨著結(jié)點(diǎn)數(shù)的增長(zhǎng)而接近線性增加,該系統(tǒng)的性能/價(jià)格比接近于PC服務(wù)器。所以,這種松耦合結(jié)構(gòu)比緊耦合的多處理器系統(tǒng)具有更好的性能/價(jià)格比。 -
可伸縮性
集群系統(tǒng)中的結(jié)點(diǎn)數(shù)目可以增長(zhǎng)到幾千個(gè),乃至上萬(wàn)個(gè),其伸縮性遠(yuǎn)超過(guò)單臺(tái)超級(jí)計(jì)算機(jī)。 -
高可用性
在硬件和軟件上都有冗余,通過(guò)檢測(cè)軟硬件的故障,將故障屏蔽,由存活結(jié)點(diǎn)提供服務(wù),可實(shí)現(xiàn)高可用性。
當(dāng)然,用服務(wù)器集群系統(tǒng)實(shí)現(xiàn)可伸縮網(wǎng)絡(luò)服務(wù)也存在很多挑戰(zhàn)性的工作:
-
透明性(Transparency)
如何高效地使得由多個(gè)獨(dú)立計(jì)算機(jī)組成的松藕合的集群系統(tǒng)構(gòu)成一個(gè)虛擬服務(wù)器;客戶端應(yīng)用程序與集群系統(tǒng)交互時(shí),就像與一臺(tái)高性能、高可用的服務(wù)器交互一樣,客戶端無(wú)須作任何修改。部分服務(wù)器的切入和切出不會(huì)中斷服務(wù),這對(duì)用戶也是透明的。 -
性能(Performance)
性能要接近線性加速,這需要設(shè)計(jì)很好的軟硬件的體系結(jié)構(gòu),消除系統(tǒng)可能存在的瓶頸。將負(fù)載較均衡地調(diào)度到各臺(tái)服務(wù)器上。 -
高可用性(Availability)
需要設(shè)計(jì)和實(shí)現(xiàn)很好的系統(tǒng)資源和故障的監(jiān)測(cè)和處理系統(tǒng)。當(dāng)發(fā)現(xiàn)一個(gè)模塊失敗時(shí),要這模塊上提供的服務(wù)遷移到其他模塊上。在理想狀況下,這種遷移是即時(shí)的、自動(dòng)的。 -
可管理性(Manageability)
要使集群系統(tǒng)變得易管理,就像管理一個(gè)單一映像系統(tǒng)一樣。在理想狀況下,軟硬件模塊的插入能做到即插即用(Plug & Play)。 -
可編程性(Programmability)
在集群系統(tǒng)上,容易開發(fā)應(yīng)用程序。
3. Linux Virtual Server項(xiàng)目
針對(duì)高可伸縮、高可用網(wǎng)絡(luò)服務(wù)的需求,我們給出了基于IP層和基于內(nèi)容請(qǐng)求分發(fā)的負(fù)載平衡調(diào)度解決方法,并在Linux內(nèi)核中實(shí)現(xiàn)了這些方法,將一組服務(wù)器構(gòu)成一個(gè)實(shí)現(xiàn)可伸縮的、高可用網(wǎng)絡(luò)服務(wù)的虛擬服務(wù)器。
虛擬服務(wù)器的體系結(jié)構(gòu)如圖2所示,一組服務(wù)器通過(guò)高速的局域網(wǎng)或者地理分布的廣域網(wǎng)相互連接,在它們的前端有一個(gè)負(fù)載調(diào)度器(Load Balancer)。負(fù)載調(diào)度器能無(wú)縫地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到真實(shí)服務(wù)器上,從而使得服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明的,客戶訪問(wèn)集群系統(tǒng)提供的網(wǎng)絡(luò)服務(wù)就像訪 問(wèn)一臺(tái)高性能、高可用的服務(wù)器一樣??蛻舫绦虿皇芊?wù)器集群的影響不需作任何修改。系統(tǒng)的伸縮性通過(guò)在服務(wù)機(jī)群中透明地加入和刪除一個(gè)節(jié)點(diǎn)來(lái)達(dá)到,通過(guò)檢 測(cè)節(jié)點(diǎn)或服務(wù)進(jìn)程故障和正確地重置系統(tǒng)達(dá)到高可用性。由于我們的負(fù)載調(diào)度技術(shù)是在Linux內(nèi)核中實(shí)現(xiàn)的,我們稱之為L(zhǎng)inux虛擬服務(wù)器(Linux Virtual Server)。

圖2:虛擬服務(wù)器的結(jié)構(gòu)
在1998年5月,我成立了Linux Virtual Server的自由軟件項(xiàng)目,進(jìn)行Linux服務(wù)器集群的開發(fā)工作。同時(shí),Linux Virtual Server項(xiàng)目是國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。
Linux Virtual Server項(xiàng)目的目標(biāo) :使用集群技術(shù)和Linux操作系統(tǒng)實(shí)現(xiàn)一個(gè)高性能、高可用的服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
目前,LVS項(xiàng)目已提供了一個(gè)實(shí)現(xiàn)可伸縮網(wǎng)絡(luò)服務(wù)的Linux Virtual Server框架,如圖3所示。在LVS框架中,提供了含有三種IP負(fù)載均衡技術(shù)的IP虛擬服務(wù)器軟件IPVS、基于內(nèi)容請(qǐng)求分發(fā)的內(nèi)核Layer-7交 換機(jī)KTCPVS和集群管理軟件??梢岳肔VS框架實(shí)現(xiàn)高可伸縮的、高可用的Web、Cache、Mail和Media等網(wǎng)絡(luò)服務(wù);在此基礎(chǔ)上,可以開 發(fā)支持龐大用戶數(shù)的、高可伸縮的、高可用的電子商務(wù)應(yīng)用。

圖3:Linux虛擬服務(wù)器框架
3.1 IP虛擬服務(wù)器軟件IPVS
在調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP負(fù)載均衡技術(shù)是效率最高的。在已有的IP負(fù)載均衡技術(shù)中有通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器,我們稱之為VS/NAT技術(shù)(Virtual Server via Network Address Translation),大多數(shù)商品化的IP負(fù)載均衡調(diào)度器產(chǎn)品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點(diǎn)和網(wǎng)絡(luò)服務(wù)的非對(duì)稱性的基礎(chǔ)上,我們提出通過(guò)IP隧道實(shí)現(xiàn)虛擬服務(wù)器的方法VS/TUN (Virtual Server via IP Tunneling),和通過(guò)直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統(tǒng)的伸縮性。所以,IPVS軟件實(shí)現(xiàn)了這三種IP負(fù)載均衡技術(shù),它們的大致原理如下(我們將在其他章節(jié)對(duì)其工作原 理進(jìn)行詳細(xì)描述),
-
Virtual Server via Network Address Translation(VS/NAT)
通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器重寫請(qǐng)求報(bào)文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請(qǐng)求分派給后端的真實(shí)服務(wù)器;真實(shí)服務(wù)器的響應(yīng)報(bào)文通過(guò)調(diào)度器時(shí),報(bào)文的源地址被重寫,再返回給客戶,完成整個(gè)負(fù)載調(diào)度過(guò)程。 -
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術(shù)時(shí),由于請(qǐng)求和響應(yīng)報(bào)文都必須經(jīng)過(guò)調(diào)度器地址重寫,當(dāng)客戶請(qǐng)求越來(lái)越多時(shí),調(diào)度器的處理能力將成為瓶頸。為了解決這個(gè)問(wèn)題,調(diào)度器把請(qǐng)求報(bào) 文通過(guò)IP隧道轉(zhuǎn)發(fā)至真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶,所以調(diào)度器只處理請(qǐng)求報(bào)文。由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答比請(qǐng)求報(bào)文大許多,采用 VS/TUN技術(shù)后,集群系統(tǒng)的最大吞吐量可以提高10倍。 -
Virtual Server via Direct Routing(VS/DR)
VS/DR通過(guò)改寫請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶。同VS/TUN技術(shù)一樣,VS/DR技術(shù)可極大地 提高集群系統(tǒng)的伸縮性。這種方法沒有IP隧道的開銷,對(duì)集群中的真實(shí)服務(wù)器也沒有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器與真實(shí)服務(wù)器都有一塊網(wǎng)卡連 在同一物理網(wǎng)段上。
針對(duì)不同的網(wǎng)絡(luò)服務(wù)需求和服務(wù)器配置,IPVS調(diào)度器實(shí)現(xiàn)了如下八種負(fù)載調(diào)度算法:
-
輪叫(Round Robin)
調(diào)度器通過(guò)"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。 -
加權(quán)輪叫(Weighted Round Robin)
調(diào)度器通過(guò)"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。 -
最少鏈接(Least Connections)
調(diào)度器通過(guò)"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。 -
加權(quán)最少鏈接(Weighted Least Connections)
在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。 -
基于局部性的最少鏈接(Locality-Based Least Connections)
"基于局部性的最少鏈接" 調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器 是可用的且沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用"最少鏈接"的原則選出一個(gè)可用的服務(wù) 器,將請(qǐng)求發(fā)送到該服務(wù)器。 -
帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)
"帶復(fù)制的基于局部性最少鏈接"調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護(hù)從一個(gè) 目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù) 器組,按"最小連接"原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按"最小連接"原則從這個(gè)集群中選出一 臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的 程度。 -
目標(biāo)地址散列(Destination Hashing)
"目標(biāo)地址散列"調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。 -
源地址散列(Source Hashing)
"源地址散列"調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
3.2 內(nèi)核Layer-7交換機(jī)KTCPVS
在基于IP負(fù)載調(diào)度技術(shù)中,當(dāng)一個(gè)TCP連接的初始SYN報(bào)文到達(dá)時(shí),調(diào)度器就選擇一臺(tái)服務(wù)器,將報(bào)文轉(zhuǎn)發(fā)給它。此后通過(guò)查發(fā)報(bào)文的IP和TCP報(bào)文頭地 址,保證此連接的后繼報(bào)文被轉(zhuǎn)發(fā)到該服務(wù)器。這樣,IPVS無(wú)法檢查到請(qǐng)求的內(nèi)容再選擇服務(wù)器,這就要求后端服務(wù)器組提供相同的服務(wù),不管請(qǐng)求被發(fā)送到哪 一臺(tái)服務(wù)器,返回結(jié)果都是一樣的。但是,在有些應(yīng)用中后端服務(wù)器功能不一,有的提供HTML文檔,有的提供圖片,有的提供CGI,這就需要基于內(nèi)容的調(diào)度 (Content-Based Scheduling)。
由于用戶空間TCP Gateway的開銷太大,我們提出在操作系統(tǒng)的內(nèi)核中實(shí)現(xiàn)Layer-7交換方法,來(lái)避免用戶空間與核心空間的切換和內(nèi)存復(fù)制的開銷。在Linux操作系統(tǒng)的內(nèi)核中,我們實(shí)現(xiàn)了Layer-7交換,稱之為KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已經(jīng)能對(duì)HTTP請(qǐng)求進(jìn)行基于內(nèi)容的調(diào)度,但它還不很成熟,在其調(diào)度算法和各種協(xié)議的功能支持等方面,有大量的工作需要做。
雖然應(yīng)用層交換處理復(fù)雜,它的伸縮性有限,但應(yīng)用層交換帶來(lái)以下好處:
- 相同頁(yè)面的請(qǐng)求被發(fā)送到同一服務(wù)器,可以提高單臺(tái)服務(wù)器的Cache命中率。
- 一些研究[5]表明WEB訪問(wèn)流中存在局部性。Layer-7交換可以充分利用訪問(wèn)的局部性,將相同類型的請(qǐng)求發(fā)送到同一臺(tái)服務(wù)器,使得每臺(tái)服務(wù)器收到的請(qǐng)求具有更好的相似性,可進(jìn)一步提高單臺(tái)服務(wù)器的Cache命中率。
- 后端服務(wù)器可運(yùn)行不同類型的服務(wù),如文檔服務(wù),圖片服務(wù),CGI服務(wù)和數(shù)據(jù)庫(kù)服務(wù)等。
LVS集群的特點(diǎn)可以歸結(jié)如下:
-
功能
有實(shí)現(xiàn)三種IP負(fù)載均衡技術(shù)和八種連接調(diào)度算法的IPVS軟件。在IPVS內(nèi)部實(shí)現(xiàn)上,采用了高效的Hash函數(shù)和垃圾回收機(jī)制,能正確處理所調(diào)度報(bào)文相 關(guān)的ICMP消息(有些商品化的系統(tǒng)反而不能)。虛擬服務(wù)的設(shè)置數(shù)目沒有限制,每個(gè)虛擬服務(wù)有自己的服務(wù)器集。它支持持久的虛擬服務(wù)(如HTTP Cookie和HTTPS等需要該功能的支持),并提供詳盡的統(tǒng)計(jì)數(shù)據(jù),如連接的處理速率和報(bào)文的流量等。針對(duì)大規(guī)模拒絕服務(wù)(Deny of Service)攻擊,實(shí)現(xiàn)了三種防衛(wèi)策略。
有基于內(nèi)容請(qǐng)求分發(fā)的應(yīng)用層交換軟件KTCPVS,它也是在Linux內(nèi)核中實(shí)現(xiàn)。有相關(guān)的集群管理軟件對(duì)資源進(jìn)行監(jiān)測(cè),能及時(shí)將故障屏蔽,實(shí)現(xiàn)系統(tǒng)的高可用性。主、從調(diào)度器能周期性地進(jìn)行狀態(tài)同步,從而實(shí)現(xiàn)更高的可用性。 -
適用性
后端服務(wù)器可運(yùn)行任何支持TCP/IP的操作系統(tǒng),包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。
負(fù)載調(diào)度器能夠支持絕大多數(shù)的TCP和UDP協(xié)議:
協(xié)議 內(nèi) 容 TCP HTTP,F(xiàn)TP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等 UDP DNS,NTP,ICP,視頻、音頻流播放協(xié)議等
-
性能
LVS服務(wù)器集群系統(tǒng)具有良好的伸縮性,可支持幾百萬(wàn)個(gè)并發(fā)連接。配置100M網(wǎng)卡,采用VS/TUN或VS/DR調(diào)度技術(shù),集群系統(tǒng)的吞吐量可高達(dá)1Gbits/s;如配置千兆網(wǎng)卡,則系統(tǒng)的最大吞吐量可接近10Gbits/s。 -
可靠性
LVS服務(wù)器集群軟件已經(jīng)在很多大型的、關(guān)鍵性的站點(diǎn)得到很好的應(yīng)用,所以它的可靠性在真實(shí)應(yīng)用得到很好的證實(shí)。有很多調(diào)度器運(yùn)行一年多,未作一次重啟動(dòng)。 -
軟件許可證
LVS集群軟件是按GPL(GNU Public License)許可證發(fā)行的自由軟件,這意味著你可以得到軟件的源代碼,有權(quán)對(duì)其進(jìn)行修改,但必須保證你的修改也是以GPL方式發(fā)行。
LVS項(xiàng)目從成立到現(xiàn)在為止,受到不少關(guān)注,LVS集群系統(tǒng)已被應(yīng)用于很多重負(fù)載的站點(diǎn),就我所知該系統(tǒng)已在美、英、德、澳等國(guó)的幾十個(gè)站點(diǎn)上正式使用。
我們沒有上百臺(tái)機(jī)器和高速的網(wǎng)絡(luò)來(lái)實(shí)際測(cè)試LVS的終極性能,所以舉LVS的應(yīng)用實(shí)例來(lái)說(shuō)明LVS的高性能和穩(wěn)定性。我們所知的一些大型LVS應(yīng)用實(shí)例如下:
-
英國(guó)國(guó)家JANET Cache Service(wwwcache.ja.net)是為英國(guó)150所以上的大學(xué)提供Web Cache服務(wù)。他們用28個(gè)結(jié)點(diǎn)的LVS集群代替了原有現(xiàn)50多臺(tái)相互獨(dú)立的Cache服務(wù)器,用他們的話說(shuō)現(xiàn)在速度就跟夏天一樣,因?yàn)橄奶焓欠偶倨陂g沒有很多人使用網(wǎng)絡(luò)。
-
Linux的門戶站點(diǎn)(www.linux.com)用LVS將很多臺(tái)VA Linux SMP服務(wù)器組成高性能的WEB服務(wù),已使用將近一年。
-
SourceForge(sourceforge.net)是在全球范圍內(nèi)為開發(fā)源碼項(xiàng)目提供WEB、FTP、Mailing List和CVS等服務(wù),他們也使用LVS將負(fù)載調(diào)度到十幾臺(tái)機(jī)器上。
-
世界上最大的PC制造商之一采用了兩個(gè)LVS集群系統(tǒng),一個(gè)在美洲,一個(gè)在歐洲,用于網(wǎng)上直銷系統(tǒng)。
-
以RealPlayer提供音頻視頻服務(wù)而聞名的Real公司(www.real.com)使用由20臺(tái)服務(wù)器組成的LVS集群,為其全球用戶提供音頻視頻服務(wù)。在2000年3月時(shí),整個(gè)集群系統(tǒng)已收到平均每秒20,000個(gè)連接的請(qǐng)求流。
-
NetWalk(www.netwalk.com)用多臺(tái)服務(wù)器構(gòu)造LVS系統(tǒng),提供1024個(gè)虛擬服務(wù),其中本項(xiàng)目的一個(gè)美國(guó)鏡像站點(diǎn)(www.us.linuxvirtualserver.org)。
-
RedHat(www.redhat.com)從其6.1發(fā)行版起已包含LVS代碼,他們開發(fā)了一個(gè)LVS集群管理工具叫Piranha,用于控制LVS集群,并提供了一個(gè)圖形化的配置界面。
-
VA Linux(www.valinux.com)向客戶提供基于LVS的服務(wù)器集群系統(tǒng),并且提供相關(guān)的服務(wù)和支持。
-
TurboLinux的"世界一流Linux集群產(chǎn)品"TurboCluster實(shí)際上是基于LVS的想法和代碼的,只是他們?cè)谛侣劙l(fā)布和產(chǎn)品演示時(shí)忘了致謝 。
-
紅旗Linux和中軟都提供基于LVS的集群解決方案,并在2000年9月召開的Linux World China 2000上展示。
在這里,再引用兩位LVS用戶的評(píng)論,來(lái)進(jìn)一步說(shuō)明LVS的性能和可靠性。
"We tried virtually all of the commercial load balancers, LVS beats them all for reliability, cost, manageability, you-name-it." — Jerry Glomph Black, Director, Internet & Technical Operations, Real Networks, Se attle Washington, USA
http://archive.linuxvirtualserver.org/html/lvs-users/2000-03/msg00180.html
http://marc.theaimsgroup.com/?1=linux-virtual-server&m=95385809030794&w=2
"I can say without a doubt that lvs toasts F5/BigIP solutions, at least in our real world implementations. I wouldn't trade a good lvs box for a Cisco Local Director either." — Drew Streib, Information Architect, VA Linux Systems, USA
http://archive.linuxvirtualserver.org/html/lvs-users/2000-03/msg00178.html
http://marc.theaimsgroup.com/?1=linux-virtual-server&m=95385694529750&w=2
6. LVS項(xiàng)目的開發(fā)進(jìn)展與感觸
LVS項(xiàng)目于1998年5月在網(wǎng)站上發(fā)布IPVS第一個(gè)版本源程序,一直得到了來(lái)自 Internet 的用戶和開發(fā)者的鼓勵(lì)和支持。應(yīng)該說(shuō),剛開始發(fā)布的程序是非常簡(jiǎn)單的,由于用戶的使用、反饋和期望,讓我覺得這項(xiàng)工作的價(jià)值,并不斷地化時(shí)間對(duì)該軟件添加 新功能和完善,其中也得到其他開發(fā)者的幫助,所以該軟件逐漸發(fā)展成為功能較齊全、有用的系統(tǒng),這遠(yuǎn)遠(yuǎn)超出我當(dāng)初成立項(xiàng)目時(shí)的想象。在這里,我要感謝 Julian Anastasov提供了很多系統(tǒng)的Bug fixes和改進(jìn),Joseph Mack博士編寫了LVS HOWTO文檔;還感謝一些廠商贊助我開發(fā)(如硬件設(shè)備等),和贊助我多次出國(guó)作相關(guān)的技術(shù)報(bào)告。
目前,正在進(jìn)行的 LVS項(xiàng)目開發(fā)工作包括:
-
擴(kuò)充IPVS對(duì)其他傳輸協(xié)議的支持,如AH(Authentication Header)和ESP(Encapsulating Security Payload )等,這樣IPVS調(diào)度器將實(shí)現(xiàn)IPSec的服務(wù)器集群。
-
提供一個(gè)統(tǒng)一的、功能較完善、更靈活的LVS集群管理軟件。
-
擴(kuò)充和改進(jìn)KTCPVS的調(diào)度算法和多種協(xié)議的支持,使之功能較完備和系統(tǒng)更穩(wěn)定。
-
在TCP粘合(TCP Splicing)和TCP轉(zhuǎn)移(TCP Handoff)等方面,做一些嘗試性工作,進(jìn)一步改進(jìn)LVS集群中的應(yīng)用層調(diào)度。
最后,我談一下自己多年來(lái)做自由軟件開發(fā)的幾點(diǎn)感觸。一是通過(guò)自由軟件方式可以使得軟件具有頑強(qiáng)的生命力;我以前也做過(guò)幾個(gè)獨(dú)立的系統(tǒng),如在SUN上用 Common Lisp開發(fā)的知識(shí)庫(kù)系統(tǒng)和基于C++的對(duì)象數(shù)據(jù)庫(kù)系統(tǒng),有些地方也是做得非常漂亮的(如元級(jí)反射機(jī)制和對(duì)象的關(guān)系處理),但因?yàn)榉N種原因這些軟件沒有以 開放源碼方式發(fā)布,現(xiàn)在它們?cè)谖覍?dǎo)師的軟件倉(cāng)庫(kù)里已無(wú)人問(wèn)津,我也已經(jīng)忘記里面的實(shí)現(xiàn)細(xì)節(jié);而LVS項(xiàng)目是我做著玩的,一開始只是個(gè)很簡(jiǎn)單的程序,通過(guò)自 由軟件的發(fā)布和開發(fā),它發(fā)展成一個(gè)有用的、功能較齊全的軟件,體現(xiàn)了自由軟件的強(qiáng)大生命力。二是通過(guò)自由軟件的集市開發(fā),可以使得初始的想法不斷地深入, 可以學(xué)到很多東西。三是做自由軟件后時(shí)間會(huì)更有效率,由于用戶的反饋和期待,會(huì)自覺不斷地改進(jìn)和完善系統(tǒng),于是沒有時(shí)間去玩游戲和網(wǎng)上聊天。四是做自由軟 件會(huì)使得你有一點(diǎn)點(diǎn)成就感,每當(dāng)收到用戶的致謝和想到你的軟件在實(shí)際系統(tǒng)中運(yùn)行,會(huì)有一點(diǎn)滿足。所以,行動(dòng)起來(lái)吧,花一些時(shí)間做自由軟件,你會(huì)有意想不到 的收獲。
7. LVS項(xiàng)目的網(wǎng)絡(luò)資源
如果你對(duì)LVS項(xiàng)目感興趣,請(qǐng)?jiān)L問(wèn)Linux Vritual Server項(xiàng)目的主頁(yè)(http://www.LinuxVirtualServer.org/或者http://www.linux-vs.org/),你可以獲得最新的 LVS
源代碼和有關(guān)運(yùn)行軟件,及最新的文檔資料。
如果你在使用LVS 的過(guò)程中遇到困難,請(qǐng)訂閱我們的郵件列表lvs-users@LinuxVirtualServer.org,提問(wèn)、解答或者發(fā)表你的高見。
[1] Information Navigators, Internet Growth Charts, http://navigators.com/stats.html
[2] Srinivasan Seetharaman. IP over DWDM. http://www.cis.ohio-state.edu-/~jain/cis788-99/ip_dwdm/
[3] Lucent Technologies. Web ProForum tutorial: DWDM. October 1999, http://www.webproforum.com/acrobat/dwdm.pdf
[4] Lucent Technologies. Lucent Technologies announces record-breaking 320-channel optical networking system. April
2000, http://www.lucent.com/press/0400/000417.nsb.html
[5] Yahoo! Inc., The Yahoo! Directory and Web Services, http://www.yahoo.com/
[6] Dell Inc. http://www.dell.com/
9. 關(guān)于作者
章文嵩博士,開放源碼及Linux內(nèi)核的開發(fā)者,著名的Linux集群項(xiàng)目--LVS(Linux Virtual
Server)的創(chuàng)始人和主要開發(fā)人員。他目前工作于國(guó)家并行與分布式處理重點(diǎn)實(shí)驗(yàn)室,主要從事集群技術(shù)、操作系統(tǒng)、對(duì)象存儲(chǔ)與數(shù)據(jù)庫(kù)的研究。他一直在自由軟件的開發(fā)上花費(fèi)大量時(shí)間,并以此為樂(lè)。