使用網(wǎng)絡地址轉換實現(xiàn)多服務器負載均衡
更新時間:2006年10月09日 00:00:00 作者:
摘要:本文探討了分布式網(wǎng)絡服務器使用的負載均衡技術及負載分配的策略,并基于網(wǎng)絡地址轉換在FreeBSD上實現(xiàn)了負載均衡網(wǎng)關,應用于我們的Internet網(wǎng)絡服務器上,將負載分給多個服務器分擔,以解決Internet服務器面臨的大量并發(fā)訪問造成的CPU或I/O的高負載問題。為了達到最佳的負載均衡效果,負載控制器需要根據(jù)各個服務器的當前CPU和I/O狀態(tài)來分配負載,這就需要動態(tài)監(jiān)視服務器的負載,并應用優(yōu)化的負載分配策略,達到平均分配負載的目的。
關鍵字: 負載均衡,網(wǎng)絡地址轉換,F(xiàn)reeBSD
1. 引言
Internet的快速增長使多媒體網(wǎng)絡服務器面對的訪問數(shù)量快速增加,服務器需要具備提供大量并發(fā)訪問服務的能力,服務器的處理和I/O能力成為了提供服務的瓶頸。由于單臺服務器的性能總是有限的,必須采用多服務器和負載均衡技術才能滿足大量并發(fā)訪問的需要。
最早的負載均衡技術是通過DNS來實現(xiàn)的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的[1]。DNS負載均衡是一種簡單而有效的方法,但是它不能區(qū)分服務器的差異,也不能反映服務器的當前運行狀態(tài)。
反向代理服務器可以將請求轉發(fā)給內(nèi)部Web服務器,如果代理服務器能夠將請求均勻轉發(fā)給多臺內(nèi)部服務器,就能達到負載均衡的目的[2]。反向代理方式下能應用優(yōu)化的負載均衡策略,每次訪問最空閑的內(nèi)部服務器來提供服務。但是隨著并發(fā)連接數(shù)量的增加,代理服務器本身的負載也變得非常大,最后反向代理服務器本身會成為服務的瓶頸。
支持負載均衡的地址轉換網(wǎng)關中可以將一個外部IP地址映射為多個內(nèi)部IP地址,對每次TCP連接請求動態(tài)使用其中一個內(nèi)部地址,達到負載均衡的目的[3]。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現(xiàn),一般采用隨機選擇、根據(jù)服務器的連接數(shù)量或者響應時間進行選擇的負載均衡策略來分配負載。然而硬件實現(xiàn)的負載控制器靈活性不強,不能支持更優(yōu)化的負載均衡策略和更復雜的應用協(xié)議。
除了這三種負載均衡方式之外,有的協(xié)議內(nèi)部支持與負載均衡相關的功能,例如HTTP協(xié)議中的重定向能力等,但它依賴于特定協(xié)議,因此使用范圍有限。根據(jù)現(xiàn)有的這些負載均衡技術,我們選擇了使用軟件方式實現(xiàn)網(wǎng)絡地址轉換的負載均衡的方式,以彌補硬件負載均衡器的不靈活,并應用優(yōu)化的均衡策略來實現(xiàn)后端服務器負載分擔的最優(yōu)狀態(tài)。
2. 負載均衡策略
為了將負載均勻的分配給內(nèi)部的多個服務器上,就需要應用一定的負載均衡策略。傳統(tǒng)的負載均衡策略并沒有考慮到服務請求的不同類型、后臺服務器的不同能力以及隨機選擇造成的負載分配不均勻等問題。為了使得負載分配十分均勻,就要應用能夠正確反映各個服務器CPU及I/O狀態(tài)的負載均衡策略[4]。
客戶發(fā)起的服務請求類型是多種多樣的,按照對處理器、網(wǎng)絡和I/O的資源要求,可以簡單的將它們分為兩個不同類別,以便應用不同的處理策略:
靜態(tài)文檔請求:例如普通的文本、圖象等靜態(tài)多媒體數(shù)據(jù),它們對處理器負載影響不大,造成的磁盤I/O負載與文檔的大小成正比,主要對網(wǎng)絡I/O造成壓力。
動態(tài)文檔請求:更為常見的請求常常需要服務器預先進行處理,例如搜尋數(shù)據(jù)庫、壓縮解壓縮多媒體文件等,這些請求需要相當大的處理器和磁盤I/O資源。
對于靜態(tài)文檔,每個服務進程占用大致相同的系統(tǒng)資源,因此就可以使用進程數(shù)來表示系統(tǒng)負載。而動態(tài)文檔服務需要進行額外的處理,其占用的系統(tǒng)資源就超過處理靜態(tài)請求,因此需要使用一個權重來表示。這樣一個最簡單的服務器負載表示公式就為:
其中L為服務器的負載,Ns為靜態(tài)文檔服務進程數(shù),Nd為動態(tài)文檔服務進程數(shù),而a為每個動態(tài)文檔服務相對于靜態(tài)文檔服務的權重,可以在10到100之間進行選擇。
在這個公式中沒有考慮服務器硬件的限制,當達到硬件限制的時候,由于資源緊張,服務器的負載就會明顯增加。例如由于服務器內(nèi)存大小的限制,一些進程就要被交換到硬盤上,使得系統(tǒng)負載迅速增加??紤]了系統(tǒng)硬件限制,則服務器的負載可以表示為:
新增加的參數(shù) Ll表示這個服務器普通負荷的限度,它要根據(jù)每個服務器本身的硬件能力來設置。而b表示超出正常負載時用來限制分配給服務器任務的權重,應該設置為大于Ll的數(shù)值,以表示硬件限制作用。通常在一個服務器集群中,硬件設置越差的服務器這個權重越要設置的大,以避免在所有的服務器都超負載運行時,硬件最差的服務器反而負載最高。因此b是和本服務器硬件限制Ll成反比的,則b可以設置為:
Llmax為服務器集群中最高硬件配置的服務器的Ll值。當確定了每個服務器的負載之后,中心控制負載分配的服務器就能將負載正確的分發(fā)給最空閑的服務器,從而不會象其他的負載分配策略那樣會導致負載分配不均勻的情況。
3. 實現(xiàn)方法及實驗結果
我們的服務器系統(tǒng)由使用快速以太網(wǎng)連接起來的多臺FreeBSD系統(tǒng)組成。每臺后端服務器上運行一個守護進程來動態(tài)獲得自己的負載狀態(tài),而使用FreeBSD實現(xiàn)的中心控制網(wǎng)關就通過這些守護進程刷新各個服務器的負載,以進行正確的負載分配。
3.1支持負載均衡的網(wǎng)關
在FreeBSD系統(tǒng)下,提供了divert接口以支持網(wǎng)絡地址轉換能力。IP數(shù)據(jù)包通過系統(tǒng)內(nèi)核的ipfw過濾功能被發(fā)送到divert接口中,以便外部守護進程natd能接收原始數(shù)據(jù)包,處理之后再發(fā)回系統(tǒng)內(nèi)核進行正常的IP分發(fā)[5]。
因此根據(jù)FreeBSD的地址轉換結構,可以創(chuàng)建自己的網(wǎng)絡地址轉換守護進程,以支持負載均衡功能,這樣就能將FreeBSD系統(tǒng)作為一個支持負載均衡的網(wǎng)關。由于它是軟件實現(xiàn)的方式,很容易支持非標準的協(xié)議及應用優(yōu)化的負載均衡策略,具備很大的靈活性。
3.2實驗及分析
為測試這種實現(xiàn)的可用性,我們針對最常見的HTTP協(xié)議進行我們的測試實驗。為了區(qū)分不同的請求種類,設計了三個不同類型的測試,以測試不同方面的性能。
CGI程序產(chǎn)生的動態(tài)文檔:用于測試在服務器的處理能力的負載均衡狀態(tài)。
小型靜態(tài)文檔:使用尺寸較小的靜態(tài)文檔,用于測試頻繁連接下負載均衡的狀態(tài);
大型靜態(tài)文檔:使用較大的文檔,測試磁盤及網(wǎng)絡I/O的負載均衡狀態(tài);
測試結果以單臺服務器每秒鐘完成請求的性能為基準,顯示使用多臺服務器進行負載均衡時每秒種完成的請求數(shù)與基準請求次數(shù)的比率。
圖1:負載均衡性能
從上圖中的第一條曲線a是處理動態(tài)文檔請求的,此時隨著服務器數(shù)量的增加,其性能是成倍增加的;而第二條曲線b為處理小尺寸靜態(tài)文檔請求的,在使用三臺服務器時性能改善就不明顯了;而處理大尺寸靜態(tài)文檔請求的第三條曲線c則幾乎沒有發(fā)生性能變化。為了找到負載均衡系統(tǒng)達不到理想狀態(tài)的原因,我們考察了服務器資源的利用率:
表1.服務器資源的利用率
處理類型
負載均衡網(wǎng)關
服務器1
服務器2
服務器3
a
53%
97%
95%
98%
b
76%
43%
39%
41%
c
94%
32%
31%
35%
從這個表中可以看出,當處理動態(tài)文檔a時三臺服務器都處于全速運行狀態(tài),負載被均勻分配,這是一種理想的狀態(tài)。當處理靜態(tài)文檔類型b和c時,負載雖然被均勻分配給三臺服務器,但每臺服務器都沒有處于全速運行狀態(tài)。尤其在處理大尺寸文檔時,負載均衡設備中的natd進程則占據(jù)了大部分處理資源。由于所有的網(wǎng)絡流量都要經(jīng)過它進行轉換,因此在網(wǎng)絡流量和并發(fā)連接數(shù)量相當大時,natd進程的負載就增加上去了。實驗中使用不同數(shù)量的后端服務器時,流經(jīng)負載均衡網(wǎng)關的實際網(wǎng)絡帶寬為:
表2:提供大尺寸文檔時服務器集群的帶寬
服務器數(shù)量
1臺
2臺
3臺
網(wǎng)絡速度(Kb/s)
10042.14
11015.10
11442.67
可以看出帶寬限制在10MB/s左右,顯然這是這個測試使用的負載均衡進程的帶寬限制,事實上該程序使用了鏈表來維護網(wǎng)絡地址轉換的狀態(tài),這就大大限制了它的網(wǎng)絡性能,通過提高硬件性能和改善算法,完全可以進一步提高其性能。
4.討論
從上面的實驗中可以看出,基于網(wǎng)絡地址轉換的負載均衡器可以有效的解決服務器端的CPU和磁盤I/O負載,然而負載均衡器本身的性能受網(wǎng)絡I/O的限制,在一定硬件條件下具有一定的帶寬限制,但可以通過改善算法和提高運行負載均衡程序的硬件性能,來提高這個帶寬限制。同時也可以看出,不同的服務類型對不同的服務器資源進行占用,我們使用的負載衡量策略是使用同一個負載進行評估,這對于大多數(shù)條件是適合的,然而最好的辦法是針對不同的資源,如CPU、磁盤I/O或網(wǎng)絡I/O等,分別監(jiān)視服務器負載,由中心控制器選擇最合適的服務器分發(fā)客戶請求。我們以后的工作將從這兩個方面入手,完善這個負載均衡控制器。
參考文獻:
[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
關鍵字: 負載均衡,網(wǎng)絡地址轉換,F(xiàn)reeBSD
1. 引言
Internet的快速增長使多媒體網(wǎng)絡服務器面對的訪問數(shù)量快速增加,服務器需要具備提供大量并發(fā)訪問服務的能力,服務器的處理和I/O能力成為了提供服務的瓶頸。由于單臺服務器的性能總是有限的,必須采用多服務器和負載均衡技術才能滿足大量并發(fā)訪問的需要。
最早的負載均衡技術是通過DNS來實現(xiàn)的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的[1]。DNS負載均衡是一種簡單而有效的方法,但是它不能區(qū)分服務器的差異,也不能反映服務器的當前運行狀態(tài)。
反向代理服務器可以將請求轉發(fā)給內(nèi)部Web服務器,如果代理服務器能夠將請求均勻轉發(fā)給多臺內(nèi)部服務器,就能達到負載均衡的目的[2]。反向代理方式下能應用優(yōu)化的負載均衡策略,每次訪問最空閑的內(nèi)部服務器來提供服務。但是隨著并發(fā)連接數(shù)量的增加,代理服務器本身的負載也變得非常大,最后反向代理服務器本身會成為服務的瓶頸。
支持負載均衡的地址轉換網(wǎng)關中可以將一個外部IP地址映射為多個內(nèi)部IP地址,對每次TCP連接請求動態(tài)使用其中一個內(nèi)部地址,達到負載均衡的目的[3]。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現(xiàn),一般采用隨機選擇、根據(jù)服務器的連接數(shù)量或者響應時間進行選擇的負載均衡策略來分配負載。然而硬件實現(xiàn)的負載控制器靈活性不強,不能支持更優(yōu)化的負載均衡策略和更復雜的應用協(xié)議。
除了這三種負載均衡方式之外,有的協(xié)議內(nèi)部支持與負載均衡相關的功能,例如HTTP協(xié)議中的重定向能力等,但它依賴于特定協(xié)議,因此使用范圍有限。根據(jù)現(xiàn)有的這些負載均衡技術,我們選擇了使用軟件方式實現(xiàn)網(wǎng)絡地址轉換的負載均衡的方式,以彌補硬件負載均衡器的不靈活,并應用優(yōu)化的均衡策略來實現(xiàn)后端服務器負載分擔的最優(yōu)狀態(tài)。
2. 負載均衡策略
為了將負載均勻的分配給內(nèi)部的多個服務器上,就需要應用一定的負載均衡策略。傳統(tǒng)的負載均衡策略并沒有考慮到服務請求的不同類型、后臺服務器的不同能力以及隨機選擇造成的負載分配不均勻等問題。為了使得負載分配十分均勻,就要應用能夠正確反映各個服務器CPU及I/O狀態(tài)的負載均衡策略[4]。
客戶發(fā)起的服務請求類型是多種多樣的,按照對處理器、網(wǎng)絡和I/O的資源要求,可以簡單的將它們分為兩個不同類別,以便應用不同的處理策略:
靜態(tài)文檔請求:例如普通的文本、圖象等靜態(tài)多媒體數(shù)據(jù),它們對處理器負載影響不大,造成的磁盤I/O負載與文檔的大小成正比,主要對網(wǎng)絡I/O造成壓力。
動態(tài)文檔請求:更為常見的請求常常需要服務器預先進行處理,例如搜尋數(shù)據(jù)庫、壓縮解壓縮多媒體文件等,這些請求需要相當大的處理器和磁盤I/O資源。
對于靜態(tài)文檔,每個服務進程占用大致相同的系統(tǒng)資源,因此就可以使用進程數(shù)來表示系統(tǒng)負載。而動態(tài)文檔服務需要進行額外的處理,其占用的系統(tǒng)資源就超過處理靜態(tài)請求,因此需要使用一個權重來表示。這樣一個最簡單的服務器負載表示公式就為:
其中L為服務器的負載,Ns為靜態(tài)文檔服務進程數(shù),Nd為動態(tài)文檔服務進程數(shù),而a為每個動態(tài)文檔服務相對于靜態(tài)文檔服務的權重,可以在10到100之間進行選擇。
在這個公式中沒有考慮服務器硬件的限制,當達到硬件限制的時候,由于資源緊張,服務器的負載就會明顯增加。例如由于服務器內(nèi)存大小的限制,一些進程就要被交換到硬盤上,使得系統(tǒng)負載迅速增加??紤]了系統(tǒng)硬件限制,則服務器的負載可以表示為:
新增加的參數(shù) Ll表示這個服務器普通負荷的限度,它要根據(jù)每個服務器本身的硬件能力來設置。而b表示超出正常負載時用來限制分配給服務器任務的權重,應該設置為大于Ll的數(shù)值,以表示硬件限制作用。通常在一個服務器集群中,硬件設置越差的服務器這個權重越要設置的大,以避免在所有的服務器都超負載運行時,硬件最差的服務器反而負載最高。因此b是和本服務器硬件限制Ll成反比的,則b可以設置為:
Llmax為服務器集群中最高硬件配置的服務器的Ll值。當確定了每個服務器的負載之后,中心控制負載分配的服務器就能將負載正確的分發(fā)給最空閑的服務器,從而不會象其他的負載分配策略那樣會導致負載分配不均勻的情況。
3. 實現(xiàn)方法及實驗結果
我們的服務器系統(tǒng)由使用快速以太網(wǎng)連接起來的多臺FreeBSD系統(tǒng)組成。每臺后端服務器上運行一個守護進程來動態(tài)獲得自己的負載狀態(tài),而使用FreeBSD實現(xiàn)的中心控制網(wǎng)關就通過這些守護進程刷新各個服務器的負載,以進行正確的負載分配。
3.1支持負載均衡的網(wǎng)關
在FreeBSD系統(tǒng)下,提供了divert接口以支持網(wǎng)絡地址轉換能力。IP數(shù)據(jù)包通過系統(tǒng)內(nèi)核的ipfw過濾功能被發(fā)送到divert接口中,以便外部守護進程natd能接收原始數(shù)據(jù)包,處理之后再發(fā)回系統(tǒng)內(nèi)核進行正常的IP分發(fā)[5]。
因此根據(jù)FreeBSD的地址轉換結構,可以創(chuàng)建自己的網(wǎng)絡地址轉換守護進程,以支持負載均衡功能,這樣就能將FreeBSD系統(tǒng)作為一個支持負載均衡的網(wǎng)關。由于它是軟件實現(xiàn)的方式,很容易支持非標準的協(xié)議及應用優(yōu)化的負載均衡策略,具備很大的靈活性。
3.2實驗及分析
為測試這種實現(xiàn)的可用性,我們針對最常見的HTTP協(xié)議進行我們的測試實驗。為了區(qū)分不同的請求種類,設計了三個不同類型的測試,以測試不同方面的性能。
CGI程序產(chǎn)生的動態(tài)文檔:用于測試在服務器的處理能力的負載均衡狀態(tài)。
小型靜態(tài)文檔:使用尺寸較小的靜態(tài)文檔,用于測試頻繁連接下負載均衡的狀態(tài);
大型靜態(tài)文檔:使用較大的文檔,測試磁盤及網(wǎng)絡I/O的負載均衡狀態(tài);
測試結果以單臺服務器每秒鐘完成請求的性能為基準,顯示使用多臺服務器進行負載均衡時每秒種完成的請求數(shù)與基準請求次數(shù)的比率。
圖1:負載均衡性能
從上圖中的第一條曲線a是處理動態(tài)文檔請求的,此時隨著服務器數(shù)量的增加,其性能是成倍增加的;而第二條曲線b為處理小尺寸靜態(tài)文檔請求的,在使用三臺服務器時性能改善就不明顯了;而處理大尺寸靜態(tài)文檔請求的第三條曲線c則幾乎沒有發(fā)生性能變化。為了找到負載均衡系統(tǒng)達不到理想狀態(tài)的原因,我們考察了服務器資源的利用率:
表1.服務器資源的利用率
處理類型
負載均衡網(wǎng)關
服務器1
服務器2
服務器3
a
53%
97%
95%
98%
b
76%
43%
39%
41%
c
94%
32%
31%
35%
從這個表中可以看出,當處理動態(tài)文檔a時三臺服務器都處于全速運行狀態(tài),負載被均勻分配,這是一種理想的狀態(tài)。當處理靜態(tài)文檔類型b和c時,負載雖然被均勻分配給三臺服務器,但每臺服務器都沒有處于全速運行狀態(tài)。尤其在處理大尺寸文檔時,負載均衡設備中的natd進程則占據(jù)了大部分處理資源。由于所有的網(wǎng)絡流量都要經(jīng)過它進行轉換,因此在網(wǎng)絡流量和并發(fā)連接數(shù)量相當大時,natd進程的負載就增加上去了。實驗中使用不同數(shù)量的后端服務器時,流經(jīng)負載均衡網(wǎng)關的實際網(wǎng)絡帶寬為:
表2:提供大尺寸文檔時服務器集群的帶寬
服務器數(shù)量
1臺
2臺
3臺
網(wǎng)絡速度(Kb/s)
10042.14
11015.10
11442.67
可以看出帶寬限制在10MB/s左右,顯然這是這個測試使用的負載均衡進程的帶寬限制,事實上該程序使用了鏈表來維護網(wǎng)絡地址轉換的狀態(tài),這就大大限制了它的網(wǎng)絡性能,通過提高硬件性能和改善算法,完全可以進一步提高其性能。
4.討論
從上面的實驗中可以看出,基于網(wǎng)絡地址轉換的負載均衡器可以有效的解決服務器端的CPU和磁盤I/O負載,然而負載均衡器本身的性能受網(wǎng)絡I/O的限制,在一定硬件條件下具有一定的帶寬限制,但可以通過改善算法和提高運行負載均衡程序的硬件性能,來提高這個帶寬限制。同時也可以看出,不同的服務類型對不同的服務器資源進行占用,我們使用的負載衡量策略是使用同一個負載進行評估,這對于大多數(shù)條件是適合的,然而最好的辦法是針對不同的資源,如CPU、磁盤I/O或網(wǎng)絡I/O等,分別監(jiān)視服務器負載,由中心控制器選擇最合適的服務器分發(fā)客戶請求。我們以后的工作將從這兩個方面入手,完善這個負載均衡控制器。
參考文獻:
[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
相關文章
利用js調(diào)用后臺php進行數(shù)據(jù)處理原碼
利用js調(diào)用后臺php進行數(shù)據(jù)處理原碼...2006-10-10