李燕清
(湖南建筑高級(jí)技工學(xué)校湖南長沙410015)
淺析LVS集群的動(dòng)態(tài)負(fù)載均衡方法
李燕清
(湖南建筑高級(jí)技工學(xué)校湖南長沙410015)
為了解決服務(wù)器負(fù)載過重的問題,最常見的方法是提高服務(wù)器的硬件性能,如提高CPU頻率和總線帶寬、增加CPU數(shù)量和內(nèi)存容量等,這些措施導(dǎo)致服務(wù)器價(jià)格昂貴、擴(kuò)展性差,而且這種提升也受當(dāng)時(shí)技術(shù)水平的限制。集群技術(shù)在現(xiàn)有設(shè)備和網(wǎng)絡(luò)之上構(gòu)建,是一種高效解決服務(wù)器負(fù)載過重和提高性能的方案,將多臺(tái)服務(wù)器通過高速網(wǎng)絡(luò)互連成1個(gè)集合,集合中的每臺(tái)服務(wù)器地位相同,都能為客戶的訪問提供服務(wù)。服務(wù)器采用虛擬IP(Virtual IP,VIP),客戶端程序與集群系統(tǒng)交互時(shí),就像在與1臺(tái)高性能服務(wù)器進(jìn)行交互。
負(fù)載均衡是將任務(wù)均衡地分配到多個(gè)系統(tǒng)上執(zhí)行,從而共同完成任務(wù)。它通過有效的方法擴(kuò)展服務(wù)器的帶寬和數(shù)據(jù)處理能力,提高網(wǎng)絡(luò)的可用性、靈活性和吞吐率。
負(fù)載均衡的主要含義:①將大量并發(fā)網(wǎng)絡(luò)連接或數(shù)據(jù)流量按照一定的策略分配到不同服務(wù)器上執(zhí)行,可增大集群系統(tǒng)吞吐量,縮短響應(yīng)時(shí)間;②將復(fù)雜計(jì)算按照某種策略分配給多個(gè)節(jié)點(diǎn)并行執(zhí)行,計(jì)算結(jié)束后將多個(gè)節(jié)點(diǎn)的處理結(jié)果匯總并返回給用戶。
隨著網(wǎng)絡(luò)流量的爆發(fā)式增長,僅僅依靠高性能集群并不能確保系統(tǒng)吞吐率高和響應(yīng)用戶請(qǐng)求速度快。整個(gè)集群系統(tǒng)必須像1臺(tái)服務(wù)器統(tǒng)一對(duì)外提供服務(wù),需要采用負(fù)載均衡技術(shù)來高效地分配各種用戶請(qǐng)求。
服務(wù)器集群能很大程度上提高服務(wù)質(zhì)量,有效緩解網(wǎng)絡(luò)堵塞,縮短服務(wù)器的響應(yīng)時(shí)間。基于Linux的虛擬服務(wù)器(Linux Virtual Service,簡稱LVS),由于其軟件開源且性能穩(wěn)定,獲得了非常廣泛的應(yīng)用。但在負(fù)載均衡策略方面還存在不足,現(xiàn)有的調(diào)度策略不能完全根據(jù)服務(wù)器的實(shí)時(shí)情況動(dòng)態(tài)分配負(fù)載。本文分析了3種流行的集群系統(tǒng)負(fù)載均衡技術(shù),并比較了它們的優(yōu)缺點(diǎn)。
3.1 LVS結(jié)構(gòu)
負(fù)載均衡器能將請(qǐng)求均勻地分配給不同服務(wù)器,而且還可以屏蔽故障節(jié)點(diǎn)。LVS集群系統(tǒng)運(yùn)用IP負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求的分發(fā)技術(shù),因此,在設(shè)計(jì)時(shí)應(yīng)充分考慮集群的可伸縮性、靈活性和高可用性。LVS集群通常由負(fù)載均衡器、服務(wù)器池和共享存儲(chǔ)構(gòu)成。
(1)負(fù)載均衡器(Load Balance):它位于LVS集群的最前端,是用戶訪問集群系統(tǒng)的唯一入口,負(fù)責(zé)將客戶端請(qǐng)求分配到服務(wù)器上執(zhí)行,在用戶看來,同一項(xiàng)服務(wù)來自同一個(gè)IP地址。這些操作由Linux內(nèi)核完成,調(diào)度消耗的資源較少,因此有很高的吞吐率。為了保證系統(tǒng)的健壯性,通常會(huì)給負(fù)載均衡器增加1個(gè)備份,兩者通過心跳線連接。
(2)服務(wù)器池(Server Pool):真正處理用戶網(wǎng)絡(luò)請(qǐng)求的服務(wù)器集合,執(zhí)行Web,F(xiàn)tp,Mail等網(wǎng)絡(luò)服務(wù)。池中服務(wù)器數(shù)量動(dòng)態(tài)可變,如果集群系統(tǒng)負(fù)載過重,可增加服務(wù)器來滿足增長的負(fù)載需求。理論上,隨著池中服務(wù)器數(shù)量的增加,集群系統(tǒng)的性能也可線性增長。
(3)共享存儲(chǔ)(Shared Storage):由數(shù)據(jù)庫、分布式文件或網(wǎng)絡(luò)文件系統(tǒng)構(gòu)成,它給服務(wù)器池提供1個(gè)共享的存儲(chǔ)區(qū)。由于磁盤陣列和分布式文件系統(tǒng)價(jià)格昂貴,小型網(wǎng)絡(luò)應(yīng)用如果對(duì)數(shù)據(jù)一致性要求不高,可將數(shù)據(jù)存儲(chǔ)在服務(wù)器本地硬盤中。
這三者之間通過高速LAN或者WAN相互連接,使用高速LAN可以避免集群系統(tǒng)擴(kuò)大升級(jí)時(shí)網(wǎng)絡(luò)成為整個(gè)集群系統(tǒng)的瓶頸。
在Linux內(nèi)核中,通過修改TCP/IP協(xié)議棧,對(duì)IP報(bào)文進(jìn)行改寫和轉(zhuǎn)發(fā)。IPVS軟件實(shí)現(xiàn)基于IP層的3種負(fù)載均衡技術(shù),同時(shí)還提供ipvsadm程序進(jìn)行虛擬服務(wù)器的配置與管理。
IPVS由調(diào)度算法、IP包處理、虛擬服務(wù)器與真實(shí)服務(wù)器鏈表、配置與管理等4個(gè)模塊組成。
集群系統(tǒng)啟動(dòng)時(shí),負(fù)載均衡器對(duì)IPVS進(jìn)行初始化,IPVS 通過setsockopt()和getsockopt()2個(gè)函數(shù)進(jìn)行注冊(cè)與相關(guān)配置。主要的配置管理文件存儲(chǔ)在ip_vs_ctl.c中,當(dāng)管理員調(diào)用setsockopt()函數(shù)時(shí),系統(tǒng)就會(huì)自動(dòng)運(yùn)行ip_vs_ctl.c文件中的do_ip_vs_set_ctl()函數(shù)中的內(nèi)容,完成服務(wù)器的添加、修改和刪除等操作。服務(wù)器和虛擬服務(wù)器的添加、修改和刪除操作分別由函數(shù)ip_vs_add_dest()、ip_vs_edit_dest()和ip_vs_edit_server()完成。
3.2 LVS的IP負(fù)載均衡技術(shù)
VS/NAT(Virtual Server via Network Address Translation)技術(shù)是通過網(wǎng)絡(luò)地址轉(zhuǎn)換將一組服務(wù)器組成一個(gè)高可用、高性能的虛擬服務(wù)器集群系統(tǒng)。通過分析請(qǐng)求報(bào)文和響應(yīng)報(bào)文的非對(duì)稱特點(diǎn)以及VS/NAT技術(shù)存在的不足,一些文獻(xiàn)提出了通過IP隧道實(shí)現(xiàn)虛擬服務(wù)器VS/TUN(Virtual Server via IP Tunneling)和通過直接路由實(shí)現(xiàn)虛擬服務(wù)器VS/DR(Virtual Server via Direct Routing)等方法。
3.2.1 基于NAT技術(shù)
因?yàn)镮Pv4的IP地址空間有限以及網(wǎng)絡(luò)安全問題,一些網(wǎng)絡(luò)采用預(yù)留IP地址。當(dāng)網(wǎng)絡(luò)內(nèi)部的計(jì)算機(jī)與因特網(wǎng)進(jìn)行信息交換時(shí),需要通過NAT將內(nèi)部IP地址轉(zhuǎn)換為外部IP地址。VS/NAT模式將負(fù)載均衡器置于集群系統(tǒng)前端,通過高速交換機(jī)連接服務(wù)器,外部用戶請(qǐng)求被分配給任意服務(wù)器處理,其結(jié)果是相同的。VS/NAT結(jié)構(gòu)示意如圖1所示。
圖1 VS/NAT結(jié)構(gòu)示意
客戶端通過VIP訪問集群時(shí),負(fù)載均衡器首先收到請(qǐng)求報(bào)文,并按照一定的策略從后端服務(wù)器池中選出1臺(tái)服務(wù)器,將報(bào)文的VIP和端口改成該服務(wù)器的地址和端口,再將報(bào)文轉(zhuǎn)發(fā)給該服務(wù)器;同時(shí)在哈希表中記載這個(gè)連接,當(dāng)相同網(wǎng)絡(luò)連接的下一個(gè)報(bào)文到達(dá)時(shí),進(jìn)行同樣的改寫與轉(zhuǎn)發(fā)操作。真實(shí)服務(wù)器將響應(yīng)報(bào)文發(fā)送給負(fù)載均衡器時(shí),負(fù)載均衡器將報(bào)文的源地址和端口做相應(yīng)的改寫,再將響應(yīng)報(bào)文發(fā)送給用戶。
3.2.2 基于IP隧道技術(shù)
負(fù)載均衡器收到客戶端的請(qǐng)求報(bào)文后,利用IP隧道技術(shù)封裝請(qǐng)求報(bào)文并轉(zhuǎn)發(fā)給按調(diào)度策略動(dòng)態(tài)選出的服務(wù)器,該服務(wù)器根據(jù)路由表將響應(yīng)報(bào)文直接返回給用戶。因?yàn)榉?wù)器池中有多個(gè)節(jié)點(diǎn),所以不能建立靜態(tài)的一對(duì)一隧道。
VS/TUN模式處理數(shù)據(jù)包流程如圖2所示。該模式與NAT模式的連接調(diào)度和管理方法相同,兩者的差異在于報(bào)文的轉(zhuǎn)發(fā)方式上。負(fù)載均衡器根據(jù)服務(wù)器的實(shí)時(shí)負(fù)載,從服務(wù)器池中動(dòng)態(tài)地選擇1臺(tái)服務(wù)器,將封裝后的IP報(bào)文發(fā)給該服務(wù)器;服務(wù)器收到報(bào)文并處理該報(bào)文,然后將響應(yīng)報(bào)文直接發(fā)送給用戶。
3.2.3 基于直接路由技術(shù)
在VS/DR模式中,負(fù)載均衡器只負(fù)責(zé)分配用戶的請(qǐng)求,由服務(wù)器負(fù)責(zé)處理請(qǐng)求并將響應(yīng)報(bào)文返回給客戶,這樣提高了LVS集群系統(tǒng)的吞吐率。VS/DR模式的負(fù)載均衡器與服務(wù)器池中的各個(gè)服務(wù)器通過高速交換機(jī)相互連接。VIP為整個(gè)集群系統(tǒng)共同享有,負(fù)載均衡器配置的VIP對(duì)用戶完全透明,主要用于接收網(wǎng)絡(luò)請(qǐng)求;而服務(wù)器配置的VIP對(duì)用戶是不可見的,只用于處理目標(biāo)地址為VIP的網(wǎng)絡(luò)請(qǐng)求。
圖2 VS/TUN模式處理數(shù)據(jù)包流程
負(fù)載均衡器只需將數(shù)據(jù)幀的MAC地址修改為被選服務(wù)器的MAC地址,并轉(zhuǎn)送給被選服務(wù)器。服務(wù)器處理完后,再根據(jù)路由表直接將響應(yīng)報(bào)文發(fā)送給用戶。在此點(diǎn)上,VS/DR和VS/TUN的方式不同。
3.3 3種負(fù)載均衡策略分析
LVS的3種IP負(fù)載均衡技術(shù)比較見表3。
表1 LVS的3種IP負(fù)載均衡技術(shù)比較
從表1可以看出,這3種負(fù)載均衡策略都有各自的特點(diǎn)。
負(fù)載均衡算法主要分為靜態(tài)和動(dòng)態(tài)兩大類,Linux下的IPVS負(fù)載均衡算法以連接數(shù)為粒度,這種負(fù)載均衡在某種程度上能減少負(fù)載傾斜現(xiàn)象的發(fā)生。目前,已有超過十余種負(fù)載均衡調(diào)度算法,每種調(diào)度算法均被實(shí)現(xiàn)為1個(gè)內(nèi)核模塊,在需要時(shí)加載。
4.1 靜態(tài)算法
靜態(tài)算法主要有輪動(dòng)類和地址散列類。輪動(dòng)(Round Robin,RR)算法是按照一定的順序?qū)⑦B接請(qǐng)求分配給不同的服務(wù)器,其最大優(yōu)點(diǎn)是簡潔,但沒有考慮服務(wù)器的差異以及當(dāng)前活躍連接數(shù)。當(dāng)服務(wù)器的性能差別較大或者請(qǐng)求服務(wù)時(shí)間波動(dòng)較大時(shí),系統(tǒng)容易出現(xiàn)負(fù)載傾斜現(xiàn)象。加權(quán)輪動(dòng)(Weighted Round- Robin,WRR)依據(jù)服務(wù)器的性能分配權(quán)重,根據(jù)權(quán)重和輪動(dòng)策略分配請(qǐng)求到服務(wù)器。WRR在一定的環(huán)境下效果不錯(cuò),但是當(dāng)服務(wù)時(shí)間波動(dòng)較大時(shí),系統(tǒng)依然會(huì)出現(xiàn)負(fù)載傾斜現(xiàn)象。
地址散列算法主要有目的地址散列算法(Destination Hashing,DH)和源地址散列算法(Source Hashing,SH),分別將目的或源IP地址映射到池中的某臺(tái)服務(wù)器上,顯然這2個(gè)算法都未依據(jù)實(shí)時(shí)情況分配連接。
4.2 動(dòng)態(tài)算法
動(dòng)態(tài)算法以最小連接(Least Connection,LC)算法為代表,該算法把新的連接分配給當(dāng)前活躍連接數(shù)最小的服務(wù)器,負(fù)載均衡器根據(jù)各服務(wù)器的活躍連接數(shù)來衡量實(shí)時(shí)負(fù)載情況。服務(wù)器性能相同時(shí),LC算法能把服務(wù)時(shí)間波動(dòng)較大的請(qǐng)求均勻分配給不同服務(wù)器,從而避免負(fù)載傾斜的出現(xiàn)。
但是,當(dāng)服務(wù)器的性能差異較大時(shí),容易引發(fā)負(fù)載不均衡。加權(quán)最小連接算法(Weighted Least Connection,WLC)通過給不同性能的服務(wù)器設(shè)置權(quán)重,盡量使服務(wù)器的當(dāng)前活躍連接數(shù)和它的權(quán)重成比例,算法將新的連接請(qǐng)求分配給比值(當(dāng)前活躍連接數(shù)/權(quán)重)最小的服務(wù)器。該算法綜合考慮了服務(wù)器的性能和當(dāng)前連接數(shù),是IPVS默認(rèn)的負(fù)載均衡調(diào)度算法。
動(dòng)態(tài)算法還有基于局部性的最少鏈接(Locality Based Least Connections,LBLC)、帶復(fù)制的基于局部性最少鏈接(Locality Based Least Connections with Replication,LBLCR)、最短預(yù)期延時(shí)(Shortest Expected Delay,SED)和不排隊(duì)調(diào)度(Never Queue Scheduling,NQ)等算法,多數(shù)都是基于LC算法的改進(jìn)版。
LVS集群作為一種優(yōu)秀的負(fù)載均衡技術(shù),已經(jīng)在許多領(lǐng)域得到了大規(guī)模的應(yīng)用。然而,LVS集群存在一定的局限性,在LVS集群運(yùn)行一段時(shí)間后,集群容易出現(xiàn)負(fù)載傾斜現(xiàn)象。如果想要在不增加硬件投入的前提下提高集群系統(tǒng)的穩(wěn)定性和可靠性,還需在負(fù)載均衡算法上做些工作,比如WLC算法可采取動(dòng)態(tài)修改服務(wù)器權(quán)重,對(duì)于改善集群性能、減少負(fù)載傾斜的發(fā)生是很有意義的。
2016- 12- 01)