使用網(wǎng)絡(luò)地址轉(zhuǎn)換完成多服務(wù)器負(fù)載均衡
發(fā)表時(shí)間:2024-06-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]摘要:本文探討了分布式網(wǎng)絡(luò)服務(wù)器使用的負(fù)載均衡技術(shù)及負(fù)載分配的策略,并基于網(wǎng)絡(luò)地址轉(zhuǎn)換在FreeBSD上實(shí)現(xiàn)了負(fù)載均衡網(wǎng)關(guān),應(yīng)用于我們的Internet網(wǎng)絡(luò)服務(wù)器上,將負(fù)載分給多個(gè)服務(wù)器分擔(dān),以解決Internet服務(wù)器面臨的大量并發(fā)訪問造成的CPU或I/O的高負(fù)載問題。為了達(dá)到最佳的負(fù)載均衡效果...
摘要:本文探討了分布式網(wǎng)絡(luò)服務(wù)器使用的負(fù)載均衡技術(shù)及負(fù)載分配的策略,并基于網(wǎng)絡(luò)地址轉(zhuǎn)換在FreeBSD上實(shí)現(xiàn)了負(fù)載均衡網(wǎng)關(guān),應(yīng)用于我們的Internet網(wǎng)絡(luò)服務(wù)器上,將負(fù)載分給多個(gè)服務(wù)器分擔(dān),以解決Internet服務(wù)器面臨的大量并發(fā)訪問造成的CPU或I/O的高負(fù)載問題。為了達(dá)到最佳的負(fù)載均衡效果,負(fù)載控制器需要根據(jù)各個(gè)服務(wù)器的當(dāng)前CPU和I/O狀態(tài)來分配負(fù)載,這就需要?jiǎng)討B(tài)監(jiān)視服務(wù)器的負(fù)載,并應(yīng)用優(yōu)化的負(fù)載分配策略,達(dá)到平均分配負(fù)載的目的。
關(guān)鍵字: 負(fù)載均衡,網(wǎng)絡(luò)地址轉(zhuǎn)換,F(xiàn)reeBSD
1. 引言
Internet的快速增長(zhǎng)使多媒體網(wǎng)絡(luò)服務(wù)器面對(duì)的訪問數(shù)量快速增加,服務(wù)器需要具備提供大量并發(fā)訪問服務(wù)的能力,服務(wù)器的處理和I/O能力成為了提供服務(wù)的瓶頸。由于單臺(tái)服務(wù)器的性能總是有限的,必須采用多服務(wù)器和負(fù)載均衡技術(shù)才能滿足大量并發(fā)訪問的需要。
最早的負(fù)載均衡技術(shù)是通過DNS來實(shí)現(xiàn)的,在DNS中為多個(gè)地址配置同一個(gè)名字,因而查詢這個(gè)名字的客戶機(jī)將得到其中一個(gè)地址,從而使得不同的客戶訪問不同的服務(wù)器,達(dá)到負(fù)載均衡的目的[1]。DNS負(fù)載均衡是一種簡(jiǎn)單而有效的方法,但是它不能區(qū)分服務(wù)器的差異,也不能反映服務(wù)器的當(dāng)前運(yùn)行狀態(tài)。
反向代理服務(wù)器可以將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部Web服務(wù)器,如果代理服務(wù)器能夠?qū)⒄?qǐng)求均勻轉(zhuǎn)發(fā)給多臺(tái)內(nèi)部服務(wù)器,就能達(dá)到負(fù)載均衡的目的[2]。反向代理方式下能應(yīng)用優(yōu)化的負(fù)載均衡策略,每次訪問最空閑的內(nèi)部服務(wù)器來提供服務(wù)。但是隨著并發(fā)連接數(shù)量的增加,代理服務(wù)器本身的負(fù)載也變得非常大,最后反向代理服務(wù)器本身會(huì)成為服務(wù)的瓶頸。
支持負(fù)載均衡的地址轉(zhuǎn)換網(wǎng)關(guān)中可以將一個(gè)外部IP地址映射為多個(gè)內(nèi)部IP地址,對(duì)每次TCP連接請(qǐng)求動(dòng)態(tài)使用其中一個(gè)內(nèi)部地址,達(dá)到負(fù)載均衡的目的[3]。很多硬件廠商將這種技術(shù)集成在他們的交換機(jī)中,作為他們第四層交換的一種功能來實(shí)現(xiàn),一般采用隨機(jī)選擇、根據(jù)服務(wù)器的連接數(shù)量或者響應(yīng)時(shí)間進(jìn)行選擇的負(fù)載均衡策略來分配負(fù)載。然而硬件實(shí)現(xiàn)的負(fù)載控制器靈活性不強(qiáng),不能支持更優(yōu)化的負(fù)載均衡策略和更復(fù)雜的應(yīng)用協(xié)議。
除了這三種負(fù)載均衡方式之外,有的協(xié)議內(nèi)部支持與負(fù)載均衡相關(guān)的功能,例如HTTP協(xié)議中的重定向能力等,但它依賴于特定協(xié)議,因此使用范圍有限。根據(jù)現(xiàn)有的這些負(fù)載均衡技術(shù),我們選擇了使用軟件方式實(shí)現(xiàn)網(wǎng)絡(luò)地址轉(zhuǎn)換的負(fù)載均衡的方式,以彌補(bǔ)硬件負(fù)載均衡器的不靈活,并應(yīng)用優(yōu)化的均衡策略來實(shí)現(xiàn)后端服務(wù)器負(fù)載分擔(dān)的最優(yōu)狀態(tài)。
2. 負(fù)載均衡策略
為了將負(fù)載均勻的分配給內(nèi)部的多個(gè)服務(wù)器上,就需要應(yīng)用一定的負(fù)載均衡策略。傳統(tǒng)的負(fù)載均衡策略并沒有考慮到服務(wù)請(qǐng)求的不同類型、后臺(tái)服務(wù)器的不同能力以及隨機(jī)選擇造成的負(fù)載分配不均勻等問題。為了使得負(fù)載分配十分均勻,就要應(yīng)用能夠正確反映各個(gè)服務(wù)器CPU及I/O狀態(tài)的負(fù)載均衡策略[4]。
客戶發(fā)起的服務(wù)請(qǐng)求類型是多種多樣的,按照對(duì)處理器、網(wǎng)絡(luò)和I/O的資源要求,可以簡(jiǎn)單的將它們分為兩個(gè)不同類別,以便應(yīng)用不同的處理策略:
靜態(tài)文檔請(qǐng)求:例如普通的文本、圖象等靜態(tài)多媒體數(shù)據(jù),它們對(duì)處理器負(fù)載影響不大,造成的磁盤I/O負(fù)載與文檔的大小成正比,主要對(duì)網(wǎng)絡(luò)I/O造成壓力。
動(dòng)態(tài)文檔請(qǐng)求:更為常見的請(qǐng)求常常需要服務(wù)器預(yù)先進(jìn)行處理,例如搜尋數(shù)據(jù)庫、壓縮解壓縮多媒體文件等,這些請(qǐng)求需要相當(dāng)大的處理器和磁盤I/O資源。
對(duì)于靜態(tài)文檔,每個(gè)服務(wù)進(jìn)程占用大致相同的系統(tǒng)資源,因此就可以使用進(jìn)程數(shù)來表示系統(tǒng)負(fù)載。而動(dòng)態(tài)文檔服務(wù)需要進(jìn)行額外的處理,其占用的系統(tǒng)資源就超過處理靜態(tài)請(qǐng)求,因此需要使用一個(gè)權(quán)重來表示。這樣一個(gè)最簡(jiǎn)單的服務(wù)器負(fù)載表示公式就為:
其中L為服務(wù)器的負(fù)載,Ns為靜態(tài)文檔服務(wù)進(jìn)程數(shù),Nd為動(dòng)態(tài)文檔服務(wù)進(jìn)程數(shù),而a為每個(gè)動(dòng)態(tài)文檔服務(wù)相對(duì)于靜態(tài)文檔服務(wù)的權(quán)重,可以在10到100之間進(jìn)行選擇。
在這個(gè)公式中沒有考慮服務(wù)器硬件的限制,當(dāng)達(dá)到硬件限制的時(shí)候,由于資源緊張,服務(wù)器的負(fù)載就會(huì)明顯增加。例如由于服務(wù)器內(nèi)存大小的限制,一些進(jìn)程就要被交換到硬盤上,使得系統(tǒng)負(fù)載迅速增加?紤]了系統(tǒng)硬件限制,則服務(wù)器的負(fù)載可以表示為:
新增加的參數(shù) Ll表示這個(gè)服務(wù)器普通負(fù)荷的限度,它要根據(jù)每個(gè)服務(wù)器本身的硬件能力來設(shè)置。而b表示超出正常負(fù)載時(shí)用來限制分配給服務(wù)器任務(wù)的權(quán)重,應(yīng)該設(shè)置為大于Ll的數(shù)值,以表示硬件限制作用。通常在一個(gè)服務(wù)器集群中,硬件設(shè)置越差的服務(wù)器這個(gè)權(quán)重越要設(shè)置的大,以避免在所有的服務(wù)器都超負(fù)載運(yùn)行時(shí),硬件最差的服務(wù)器反而負(fù)載最高。因此b是和本服務(wù)器硬件限制Ll成反比的,則b可以設(shè)置為:
Llmax為服務(wù)器集群中最高硬件配置的服務(wù)器的Ll值。當(dāng)確定了每個(gè)服務(wù)器的負(fù)載之后,中心控制負(fù)載分配的服務(wù)器就能將負(fù)載正確的分發(fā)給最空閑的服務(wù)器,從而不會(huì)象其他的負(fù)載分配策略那樣會(huì)導(dǎo)致負(fù)載分配不均勻的情況。
3. 實(shí)現(xiàn)方法及實(shí)驗(yàn)結(jié)果
我們的服務(wù)器系統(tǒng)由使用快速以太網(wǎng)連接起來的多臺(tái)FreeBSD系統(tǒng)組成。每臺(tái)后端服務(wù)器上運(yùn)行一個(gè)守護(hù)進(jìn)程來動(dòng)態(tài)獲得自己的負(fù)載狀態(tài),而使用FreeBSD實(shí)現(xiàn)的中心控制網(wǎng)關(guān)就通過這些守護(hù)進(jìn)程刷新各個(gè)服務(wù)器的負(fù)載,以進(jìn)行正確的負(fù)載分配。
3.1支持負(fù)載均衡的網(wǎng)關(guān)
在FreeBSD系統(tǒng)下,提供了divert接口以支持網(wǎng)絡(luò)地址轉(zhuǎn)換能力。IP數(shù)據(jù)包通過系統(tǒng)內(nèi)核的ipfw過濾功能被發(fā)送到divert接口中,以便外部守護(hù)進(jìn)程natd能接收原始數(shù)據(jù)包,處理之后再發(fā)回系統(tǒng)內(nèi)核進(jìn)行正常的IP分發(fā)[5]。
因此根據(jù)FreeBSD的地址轉(zhuǎn)換結(jié)構(gòu),可以創(chuàng)建自己的網(wǎng)絡(luò)地址轉(zhuǎn)換守護(hù)進(jìn)程,以支持負(fù)載均衡功能,這樣就能將FreeBSD系統(tǒng)作為一個(gè)支持負(fù)載均衡的網(wǎng)關(guān)。由于它是軟件實(shí)現(xiàn)的方式,很容易支持非標(biāo)準(zhǔn)的協(xié)議及應(yīng)用優(yōu)化的負(fù)載均衡策略,具備很大的靈活性。
3.2實(shí)驗(yàn)及分析
為測(cè)試這種實(shí)現(xiàn)的可用性,我們針對(duì)最常見的HTTP協(xié)議進(jìn)行我們的測(cè)試實(shí)驗(yàn)。為了區(qū)分不同的請(qǐng)求種類,設(shè)計(jì)了三個(gè)不同類型的測(cè)試,以測(cè)試不同方面的性能。
CGI程序產(chǎn)生的動(dòng)態(tài)文檔:用于測(cè)試在服務(wù)器的處理能力的負(fù)載均衡狀態(tài)。
小型靜態(tài)文檔:使用尺寸較小的靜態(tài)文檔,用于測(cè)試頻繁連接下負(fù)載均衡的狀態(tài);
大型靜態(tài)文檔:使用較大的文檔,測(cè)試磁盤及網(wǎng)絡(luò)I/O的負(fù)載均衡狀態(tài);
測(cè)試結(jié)果以單臺(tái)服務(wù)器每秒鐘完成請(qǐng)求的性能為基準(zhǔn),顯示使用多臺(tái)服務(wù)器進(jìn)行負(fù)載均衡時(shí)每秒種完成的請(qǐng)求數(shù)與基準(zhǔn)請(qǐng)求次數(shù)的比率。
圖1:負(fù)載均衡性能
從上圖中的第一條曲線a是處理動(dòng)態(tài)文檔請(qǐng)求的,此時(shí)隨著服務(wù)器數(shù)量的增加,其性能是成倍增加的;而第二條曲線b為處理小尺寸靜態(tài)文檔請(qǐng)求的,在使用三臺(tái)服務(wù)器時(shí)性能改善就不明顯了;而處理大尺寸靜態(tài)文檔請(qǐng)求的第三條曲線c則幾乎沒有發(fā)生性能變化。為了找到負(fù)載均衡系統(tǒng)達(dá)不到理想狀態(tài)的原因,我們考察了服務(wù)器資源的利用率:
表1.服務(wù)器資源的利用率
處理類型
負(fù)載均衡網(wǎng)關(guān)
服務(wù)器1
服務(wù)器2
服務(wù)器3
a
53%
97%
95%
98%
b
76%
43%
39%
41%
c
94%
32%
31%
35%
從這個(gè)表中可以看出,當(dāng)處理動(dòng)態(tài)文檔a時(shí)三臺(tái)服務(wù)器都處于全速運(yùn)行狀態(tài),負(fù)載被均勻分配,這是一種理想的狀態(tài)。當(dāng)處理靜態(tài)文檔類型b和c時(shí),負(fù)載雖然被均勻分配給三臺(tái)服務(wù)器,但每臺(tái)服務(wù)器都沒有處于全速運(yùn)行狀態(tài)。尤其在處理大尺寸文檔時(shí),負(fù)載均衡設(shè)備中的natd進(jìn)程則占據(jù)了大部分處理資源。由于所有的網(wǎng)絡(luò)流量都要經(jīng)過它進(jìn)行轉(zhuǎn)換,因此在網(wǎng)絡(luò)流量和并發(fā)連接數(shù)量相當(dāng)大時(shí),natd進(jìn)程的負(fù)載就增加上去了。實(shí)驗(yàn)中使用不同數(shù)量的后端服務(wù)器時(shí),流經(jīng)負(fù)載均衡網(wǎng)關(guān)的實(shí)際網(wǎng)絡(luò)帶寬為:
表2:提供大尺寸文檔時(shí)服務(wù)器集群的帶寬
服務(wù)器數(shù)量
1臺(tái)
2臺(tái)
3臺(tái)
網(wǎng)絡(luò)速度(Kb/s)
10042.14
11015.10
11442.67
可以看出帶寬限制在10MB/s左右,顯然這是這個(gè)測(cè)試使用的負(fù)載均衡進(jìn)程的帶寬限制,事實(shí)上該程序使用了鏈表來維護(hù)網(wǎng)絡(luò)地址轉(zhuǎn)換的狀態(tài),這就大大限制了它的網(wǎng)絡(luò)性能,通過提高硬件性能和改善算法,完全可以進(jìn)一步提高其性能。
4.討論
從上面的實(shí)驗(yàn)中可以看出,基于網(wǎng)絡(luò)地址轉(zhuǎn)換的負(fù)載均衡器可以有效的解決服務(wù)器端的CPU和磁盤I/O負(fù)載,然而負(fù)載均衡器本身的性能受網(wǎng)絡(luò)I/O的限制,在一定硬件條件下具有一定的帶寬限制,但可以通過改善算法和提高運(yùn)行負(fù)載均衡程序的硬件性能,來提高這個(gè)帶寬限制。同時(shí)也可以看出,不同的服務(wù)類型對(duì)不同的服務(wù)器資源進(jìn)行占用,我們使用的負(fù)載衡量策略是使用同一個(gè)負(fù)載進(jìn)行評(píng)估,這對(duì)于大多數(shù)條件是適合的,然而最好的辦法是針對(duì)不同的資源,如CPU、磁盤I/O或網(wǎng)絡(luò)I/O等,分別監(jiān)視服務(wù)器負(fù)載,由中心控制器選擇最合適的服務(wù)器分發(fā)客戶請(qǐng)求。我們以后的工作將從這兩個(gè)方面入手,完善這個(gè)負(fù)載均衡控制器。
參考文獻(xiàn):
[1] E.Kata,M.Butler, and R. McGrath. A scalable HTTP server: the ncsa prototype. Computer Networks and ISDN systems. 1994. Vol 27, P155-164
[2] Ralf S.Engelschall. Load Balancing Your Web Site. Web Techniques Magazine (http://www.WebTechniques.com), May 1998. vol.3, iss.5
[3] CICSO. LocalDirector Documents. http://www.cisco.com, 1997
[4] H.Zhu. T.Yang, Q.Zheng, D.Watson, O.H.Ibarra, andT.Smith, Adaptive load sharing for clustered digital library servers. Technical Report, CS, UCSB, 1998.
[5] FreeBSD core team. natd and divert manual pages. http://www.freebsd.org. 1995
Implement a load balancing gateway by NAT
Wang, Bo
NongYe Road 70, ZhengZhou, 450002, P.R.China
wb@email.online.ha.cn
Abstract: This paper investigates load balancing techniques and strategies, and implements a load balancing gateway based NAT for our Internet servers. The Internet servers involve the high load of CPU and I/O by simultaneous access requests, the symmetrical clustered servers can distribute the server load to solve the problem. To balance the load in the best way, the gateway distributes the load according to the status of server's CPU and I/O. The gateway must monitor every server's load and apply the best scheme to delivery every request, so it can provide the high performance for Internet services.
Keywords: load balancing, NAT, FreeBSD