Internet的規(guī)模每一百天就會增長一倍,客戶希望獲得7天24小時的不間斷可用性及較快的系統(tǒng)反應(yīng)時間,而不愿屢次看到某個站點“Server Too Busy”及頻繁的系統(tǒng)故障。
網(wǎng)絡(luò)的各個核心部分隨著業(yè)務(wù)量的提高、訪問量和數(shù)據(jù)流量的快速增長,其處理能力和計算強(qiáng)度也相應(yīng)增大,使得單一設(shè)備根本無法承擔(dān)。在此情況下,如果扔掉現(xiàn)有設(shè)備去做大量的硬件升級,這樣將造成現(xiàn)有資源的浪費,而且如果再面臨下一次業(yè)務(wù)量的提升,這又將導(dǎo)致再一次硬件升級的高額成本投入,甚至性能再卓越的設(shè)備也不能滿足當(dāng)前業(yè)務(wù)量的需求。于是,負(fù)載均衡機(jī)制應(yīng)運而生。
負(fù)載均衡(Load Balance)建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
負(fù)載均衡有兩方面的含義:首先,大量的并發(fā)訪問或數(shù)據(jù)流量分擔(dān)到多臺節(jié)點設(shè)備上分別處理,減少用戶等待響應(yīng)的時間;其次,單個重負(fù)載的運算分擔(dān)到多臺節(jié)點設(shè)備上做并行處理,每個節(jié)點設(shè)備處理結(jié)束后,將結(jié)果匯總,返回給用戶,系統(tǒng)處理能力得到大幅度提高。
本文所要介紹的負(fù)載均衡技術(shù)主要是指在均衡服務(wù)器群中所有服務(wù)器和應(yīng)用程序之間流量負(fù)載的應(yīng)用,目前負(fù)載均衡技術(shù)大多數(shù)是用于提高諸如在Web服務(wù)器、FTP服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器上的Internet服務(wù)器程序的可用性和可伸縮性。
負(fù)載均衡實施要素
負(fù)載均衡方案應(yīng)是在網(wǎng)站建設(shè)初期就應(yīng)考慮的問題,不過有時隨著訪問流量的爆炸性增長,超出決策者的意料,這也就成為不得不面對的問題。當(dāng)我們在引入某種負(fù)載均衡方案乃至具體實施時,像其他的許多方案一樣,首先是確定當(dāng)前及將來的應(yīng)用需求,然后在代價與收效之間做出權(quán)衡。
針對當(dāng)前及將來的應(yīng)用需求,分析網(wǎng)絡(luò)瓶頸的不同所在,我們就需要確立是采用哪一類的負(fù)載均衡技術(shù),采用什么樣的均衡策略,在可用性、兼容性、安全性等等方面要滿足多大的需求,如此等等。
不管負(fù)載均衡方案是采用花費較少的軟件方式,還是購買代價高昂在性能功能上更強(qiáng)的第四層交換機(jī)、負(fù)載均衡器等硬件方式來實現(xiàn),亦或其他種類不同的均衡技術(shù),下面這幾項都是我們在引入均衡方案時可能要考慮的問題:
性能:性能是我們在引入均衡方案時需要重點考慮的問題,但也是一個最難把握的問題。衡量性能時可將每秒鐘通過網(wǎng)絡(luò)的數(shù)據(jù)包數(shù)目做為一個參數(shù),另一個參數(shù)是均衡方案中服務(wù)器群所能處理的最大并發(fā)連接數(shù)目,但是,假設(shè)一個均衡系統(tǒng)能處理百萬計的并發(fā)連接數(shù),可是卻只能以每秒2個包的速率轉(zhuǎn)發(fā),這顯然是沒有任何作用的。 性能的優(yōu)劣與負(fù)載均衡設(shè)備的處理能力、采用的均衡策略息息相關(guān),并且有兩點需要注意:一、均衡方案對服務(wù)器群整體的性能,這是響應(yīng)客戶端連接請求速度的關(guān)鍵;二、負(fù)載均衡設(shè)備自身的性能,避免有大量連接請求時自身性能不足而成為服務(wù)瓶頸。 有時我們也可以考慮采用混合型負(fù)載均衡策略來提升服務(wù)器群的總體性能,如DNS負(fù)載均衡與NAT負(fù)載均衡相結(jié)合。另外,針對有大量靜態(tài)文檔請求的站點,也可以考慮采用高速緩存技術(shù),相對來說更節(jié)省費用,更能提高響應(yīng)性能;對有大量ssl/xml內(nèi)容傳輸?shù)恼军c,更應(yīng)考慮采用ssl/xml加速技術(shù)。
可擴(kuò)展性:IT技術(shù)日新月異,一年以前最新的產(chǎn)品,現(xiàn)在或許已是網(wǎng)絡(luò)中性能最低的產(chǎn)品;業(yè)務(wù)量的急速上升,一年前的網(wǎng)絡(luò),現(xiàn)在需要新一輪的擴(kuò)展。合適的均衡解決方案應(yīng)能滿足這些需求,能均衡不同操作系統(tǒng)和硬件平臺之間的負(fù)載,能均衡HTTP、郵件、新聞、代理、數(shù)據(jù)庫、防火墻和 Cache等不同服務(wù)器的負(fù)載,并且能以對客戶端完全透明的方式動態(tài)增加或刪除某些資源。
靈活性:均衡解決方案應(yīng)能靈活地提供不同的應(yīng)用需求,滿足應(yīng)用需求的不斷變化。在不同的服務(wù)器群有不同的應(yīng)用需求時,應(yīng)有多樣的均衡策略提供更廣泛的選擇。
可靠性:在對服務(wù)質(zhì)量要求較高的站點,負(fù)載均衡解決方案應(yīng)能為服務(wù)器群提供完全的容錯性和高可用性。但在負(fù)載均衡設(shè)備自身出現(xiàn)故障時,應(yīng)該有良好的冗余解決方案,提高可靠性。使用冗余時,處于同一個冗余單元的多個負(fù)載均衡設(shè)備必須具有有效的方式以便互相進(jìn)行監(jiān)控,保護(hù)系統(tǒng)盡可能地避免遭受到重大故障的損失。
易管理性:不管是通過軟件還是硬件方式的均衡解決方案,我們都希望它有靈活、直觀和安全的管理方式,這樣便于安裝、配置、維護(hù)和監(jiān)控,提高工作效率,避免差錯。在硬件負(fù)載均衡設(shè)備上,目前主要有三種管理方式可供選擇:一、命令行接口(CLI:Command Line Interface),可通過超級終端連接負(fù)載均衡設(shè)備串行接口來管理,也能telnet遠(yuǎn)程登錄管理,在初始化配置時,往往要用到前者;二、圖形用戶接口(GUI:Graphical User Interfaces),有基于普通web頁的管理,也有通過Java Applet 進(jìn)行安全管理,一般都需要管理端安裝有某個版本的瀏覽器;三、SNMP(Simple Network Management Protocol,簡單網(wǎng)絡(luò)管理協(xié)議)支持,通過第三方網(wǎng)絡(luò)管理軟件對符合SNMP標(biāo)準(zhǔn)的設(shè)備進(jìn)行管理。
負(fù)載均衡配置實例
DNS負(fù)載均衡
DNS負(fù)載均衡技術(shù)是在DNS服務(wù)器中為同一個主機(jī)名配置多個IP地址,在應(yīng)答DNS查詢時,DNS服務(wù)器對每個查詢將以DNS文件中主機(jī)記錄的IP地址按順序返回不同的解析結(jié)果,將客戶端的訪問引導(dǎo)到不同的機(jī)器上去,使得不同的客戶端訪問不同的服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
DNS負(fù)載均衡的優(yōu)點是經(jīng)濟(jì)簡單易行,并且服務(wù)器可以位于internet上任意的位置。但它也存在不少缺點:
為了使本DNS服務(wù)器和其他DNS服務(wù)器及時交互,保證DNS數(shù)據(jù)及時更新,使地址能隨機(jī)分配,一般都要將DNS的刷新時間設(shè)置的較小,但太小將會使DNS流量大增造成額外的網(wǎng)絡(luò)問題。
一旦某個服務(wù)器出現(xiàn)故障,即使及時修改了DNS設(shè)置,還是要等待足夠的時間(刷新時間)才能發(fā)揮作用,在此期間,保存了故障服務(wù)器地址的客戶計算機(jī)將不能正常訪問服務(wù)器。
DNS負(fù)載均衡采用的是簡單的輪循負(fù)載算法,不能區(qū)分服務(wù)器的差異,不能反映服務(wù)器的當(dāng)前運行狀態(tài),不能做到為性能較好的服務(wù)器多分配請求,甚至?xí)霈F(xiàn)客戶請求集中在某一臺服務(wù)器上的情況。
要給每臺服務(wù)器分配一個internet上的IP地址,這勢必會占用過多的IP地址。
判斷一個站點是否采用了DNS負(fù)載均衡的最簡單方式就是連續(xù)的ping這個域名,如果多次解析返回的IP地址不相同的話,那么這個站點就很可能采用的就是較為普遍的DNS負(fù)載均衡。但也不一定,因為如果采用的是DNS響應(yīng)均衡,多次解析返回的IP地址也可能會不相同。不妨試試Ping一下www.yesky.com,www.sohu.com,www.yahoo.com。
現(xiàn)假設(shè)有三臺服務(wù)器來應(yīng)對www.test.com的請求。在采用BIND 8.x DNS服務(wù)器的unix系統(tǒng)上實現(xiàn)起來比較簡單,只需在該域的數(shù)據(jù)記錄中添加類似下面的結(jié)果:
www1 IN A 192.1.1.1
www2 IN A 192.1.1.2
www3 IN A 192.1.1.3
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3
在NT下的實現(xiàn)也很簡單,下面詳細(xì)介紹在win2000 server下實現(xiàn)DNS負(fù)載均衡的過程,NT4.0類似:
打開“管理工具”下的“DNS”,進(jìn)入DNS服務(wù)配置控制臺。
打開相應(yīng)DNS 服務(wù)器的“屬性”,在“高級”選項卡的“服務(wù)器選項”中,選中“啟用循環(huán)”復(fù)選框。此步相當(dāng)于在注冊表記錄HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters中添加一個雙字節(jié)制值(dword值)RoundRobin,值為1。
打開正向搜索區(qū)域的相應(yīng)區(qū)域(如test.com),新建主機(jī)添加主機(jī) (A) 資源記錄,記錄如下:
www IN A 192.1.1.1
www IN A 192.1.1.2
www IN A 192.1.1.3
在這里可以看到的區(qū)別是在NT下一個主機(jī)名對應(yīng)多個IP地址記錄,但在unix下,是先添加多個不同的主機(jī)名分別對應(yīng)個自的IP地址,然后再把這些主機(jī)賦同一個別名(CNAME)來實現(xiàn)的。
在此需要注意的是,NT下本地子網(wǎng)優(yōu)先級會取代多宿主名稱的循環(huán)復(fù)用,所以在測試時,如果做測試用的客戶機(jī)IP地址與主機(jī)資源記錄的IP在同一有類掩碼范圍內(nèi),就需要清除在“高級”選項卡“服務(wù)器選項”中的“啟用netmask排序”。
NAT負(fù)載均衡
NAT(Network Address Translation 網(wǎng)絡(luò)地址轉(zhuǎn)換)簡單地說就是將一個IP地址轉(zhuǎn)換為另一個IP地址,一般用于未經(jīng)注冊的內(nèi)部地址與合法的、已獲注冊的Internet IP地址間進(jìn)行轉(zhuǎn)換。適用于解決Internet IP地址緊張、不想讓網(wǎng)絡(luò)外部知道內(nèi)部網(wǎng)絡(luò)結(jié)構(gòu)等的場合下。每次NAT轉(zhuǎn)換勢必會增加NAT設(shè)備的開銷,但這種額外的開銷對于大多數(shù)網(wǎng)絡(luò)來說都是微不足道的,除非在高帶寬有大量NAT請求的網(wǎng)絡(luò)上。
NAT負(fù)載均衡將一個外部IP地址映射為多個內(nèi)部IP地址,對每次連接請求動態(tài)地轉(zhuǎn)換為一個內(nèi)部服務(wù)器的地址,將外部連接請求引到轉(zhuǎn)換得到地址的那個服務(wù)器上,從而達(dá)到負(fù)載均衡的目的。
NAT負(fù)載均衡是一種比較完善的負(fù)載均衡技術(shù),起著NAT負(fù)載均衡功能的設(shè)備一般處于內(nèi)部服務(wù)器到外部網(wǎng)間的網(wǎng)關(guān)位置,如路由器、防火墻、四層交換機(jī)、專用負(fù)載均衡器等,均衡算法也較靈活,如隨機(jī)選擇、最少連接數(shù)及響應(yīng)時間等來分配負(fù)載。
NAT負(fù)載均衡可以通過軟硬件方式來實現(xiàn)。通過軟件方式來實現(xiàn)NAT負(fù)載均衡的設(shè)備往往受到帶寬及系統(tǒng)本身處理能力的限制,由于NAT比較接近網(wǎng)絡(luò)的低層,因此就可以將它集成在硬件設(shè)備中,通常這樣的硬件設(shè)備是第四層交換機(jī)和專用負(fù)載均衡器,第四層交換機(jī)的一項重要功能就是NAT負(fù)載均衡。
下面以實例介紹一下Cisco路由器NAT負(fù)載均衡的配置:
現(xiàn)有一臺有一個串行接口和一個Ethernet接口的路由器,Ethernet口連接到內(nèi)部網(wǎng)絡(luò),內(nèi)部網(wǎng)絡(luò)上有三臺web服務(wù)器,但都只是低端配置,為了處理好來自Internet上大量的web連接請求,因此需要在此路由器上做NAT負(fù)載均衡配置,把發(fā)送到web服務(wù)器合法Internet IP地址的報文轉(zhuǎn)換成這三臺服務(wù)器的內(nèi)部本地地址。 其具體配置過程如下:
做好路由器的基本配置,并定義各個接口在做NAT時是內(nèi)部還是外部接口。
然后定義一個標(biāo)準(zhǔn)訪問列表(standard access list),用來標(biāo)識要轉(zhuǎn)換的合法IP地址。
再定義NAT地址池來標(biāo)識內(nèi)部web服務(wù)器的本地地址,注意要用到關(guān)鍵字rotary,表明我們要使用輪循(Round Robin)的方式從NAT地址池中取出相應(yīng)IP地址來轉(zhuǎn)換合法IP報文。
最后,把目標(biāo)地址為訪問表中IP的報文轉(zhuǎn)換成地址池中定義的IP地址。
相應(yīng)配置文件如下:
interface Ethernet0/0
ip address 192.168.1.4 255.255.255.248
ip nat inside
!
interface Serial0/0
ip address 200.200.1.1 255.255.255.248
ip nat outside
!
ip access-list 1 permit 200.200.1.2
!
ip nat pool websrv 192.168.1.1 192.168.1.3 netmask 255.255.255.248 type rotary
ip nat inside destination list 1 pool websrv
反向代理負(fù)載均衡
普通代理方式是代理內(nèi)部網(wǎng)絡(luò)用戶訪問internet上服務(wù)器的連接請求,客戶端必須指定代理服務(wù)器,并將本來要直接發(fā)送到internet上服務(wù)器的連接請求發(fā)送給代理服務(wù)器處理。
反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器。
反向代理負(fù)載均衡技術(shù)是把將來自internet上的連接請求以反向代理的方式動態(tài)地轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的多臺服務(wù)器進(jìn)行處理,從而達(dá)到負(fù)載均衡的目的。
反向代理負(fù)載均衡能以軟件方式來實現(xiàn),如apache mod_proxy、netscape proxy等,也可以在高速緩存器、負(fù)載均衡器等硬件設(shè)備上實現(xiàn)。 反向代理負(fù)載均衡可以將優(yōu)化的負(fù)載均衡策略和代理服務(wù)器的高速緩存技術(shù)結(jié)合在一起,提升靜態(tài)網(wǎng)頁的訪問速度,提供有益的性能;由于網(wǎng)絡(luò)外部用戶不能直接訪問真實的服務(wù)器,具備額外的安全性(同理,NAT負(fù)載均衡技術(shù)也有此優(yōu)點)。
其缺點主要表現(xiàn)在以下兩個方面:
反向代理是處于OSI參考模型第七層應(yīng)用的,所以就必須為每一種應(yīng)用服務(wù)專門開發(fā)一個反向代理服務(wù)器,這樣就限制了反向代理負(fù)載均衡技術(shù)的應(yīng)用范圍,現(xiàn)在一般都用于對web服務(wù)器的負(fù)載均衡。
針對每一次代理,代理服務(wù)器就必須打開兩個連接,一個對外,一個對內(nèi),因此在并發(fā)連接請求數(shù)量非常大的時候,代理服務(wù)器的負(fù)載也就非常大了,在最后代理服務(wù)器本身會成為服務(wù)的瓶頸。
一般來講,可以用它來對連接數(shù)量不是特別大,但每次連接都需要消耗大量處理資源的站點進(jìn)行負(fù)載均衡,如search。
下面以在apache mod_proxy下做的反向代理負(fù)載均衡為配置實例:在站點www.test.com,我們按提供的內(nèi)容進(jìn)行分類,不同的服務(wù)器用于提供不同的內(nèi)容服務(wù),將對http://www.test.com/news的訪問轉(zhuǎn)到IP地址為192.168.1.1的內(nèi)部服務(wù)器上處理,對http://www.test.com/it的訪問轉(zhuǎn)到服務(wù)器192.168.1.2上,對http://www.test.com/life的訪問轉(zhuǎn)到服務(wù)器192.168.1.3上,對http://www.test.com/love的訪問轉(zhuǎn)到合作站點http://www.love.com上,從而減輕本apache服務(wù)器的負(fù)擔(dān),達(dá)到負(fù)載均衡的目的。
首先要確定域名www.test.com在DNS上的記錄對應(yīng)apache服務(wù)器接口上具有internet合法注冊的IP地址,這樣才能使internet上對www.test.com的所有連接請求發(fā)送給本臺apache服務(wù)器。
在本臺服務(wù)器的apache配置文件httpd.conf中添加如下設(shè)置:
proxypass /news http://192.168.1.1
proxypass /it http://192.168.1.2
proxypass /life http://192.168.1.3
proxypass /love http://www.love.com
注意,此項設(shè)置最好添加在httpd.conf文件“Section 2”以后的位置,服務(wù)器192.168.1.1-3也應(yīng)是具有相應(yīng)功能的www服務(wù)器,在重啟服務(wù)時,最好用apachectl configtest命令檢查一下配置是否有誤。
混合型負(fù)載均衡
在有些大型網(wǎng)絡(luò),由于多個服務(wù)器群內(nèi)硬件設(shè)備、各自的規(guī)模、提供的服務(wù)等的差異,我們可以考慮給每個服務(wù)器群采用最合適的負(fù)載均衡方式,然后又在這多個服務(wù)器群間再一次負(fù)載均衡或群集起來以一個整體向外界提供服務(wù)(即把這多個服務(wù)器群當(dāng)做一個新的服務(wù)器群),從而達(dá)到最佳的性能。我們將這種方式稱之為混合型負(fù)載均衡。此種方式有時也用于單臺均衡設(shè)備的性能不能滿足大量連接請求的情況下。
下圖展示了一個應(yīng)用示例,三個服務(wù)器群針對各自的特點,分別采用了不同的負(fù)載均衡方式。當(dāng)客戶端發(fā)出域名解析請求時,DNS服務(wù)器依次把它解析成三個服務(wù)器群的VIP,如此把客戶端的連接請求分別引向三個服務(wù)器群,從而達(dá)到了再一次負(fù)載均衡的目的。
在圖中大家可能注意到,負(fù)載均衡設(shè)備在網(wǎng)絡(luò)拓樸上,可以處于外部網(wǎng)和內(nèi)部網(wǎng)絡(luò)間網(wǎng)關(guān)的位置,也可以和內(nèi)部服務(wù)器群處于并行的位置,甚至可以處于內(nèi)部網(wǎng)絡(luò)或internet上的任意位置,特別是在采用群集負(fù)載均衡時,根本就沒有單獨的負(fù)載均衡設(shè)備。
服務(wù)器群內(nèi)各服務(wù)器只有提供相同內(nèi)容的服務(wù)才有負(fù)載均衡的意義,特別是在DNS負(fù)載均衡時。要不然,這樣會造成大量連接請求的丟失或由于多次返回內(nèi)容的不同給客戶造成混亂。
所以,如圖的這個示例在實際中可能沒有多大的意義,因為如此大的服務(wù)內(nèi)容相同但各服務(wù)器群存在大量差異的網(wǎng)站并不多見。 但做為一個示例,相信還是很有參考意義的。
轉(zhuǎn)自于http://blog.csdn.net/shenghuafen/archive/2005/08/20/459712.aspx