天天看點

負載均衡技術全攻略(下)

Internet的規模每一百天就會增長一倍,客戶希望獲得7天24小時的不間斷可用性及較快的系統反應時間,而不願屢次看到某個站點“Server Too Busy”及頻繁的系統故障。

  網絡的各個核心部分随着業務量的提高、通路量和資料流量的快速增長,其處理能力和計算強度也相應增大,使得單一裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體更新,這樣将造成現有資源的浪費,而且如果再面臨下一次業務量的提升,這又将導緻再一次硬體更新的高額成本投入,甚至性能再卓越的裝置也不能滿足目前業務量的需求。于是,負載均衡機制應運而生。

  負載均衡(Load Balance)建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴充網絡裝置和伺服器的帶寬、增加吞吐量、加強網絡資料處理能力、提高網絡的靈活性和可用性。

  負載均衡有兩方面的含義:首先,大量的并發通路或資料流量分擔到多台節點裝置上分别處理,減少使用者等待響應的時間;其次,單個重負載的運算分擔到多台節點裝置上做并行處理,每個節點裝置處理結束後,将結果彙總,傳回給使用者,系統處理能力得到大幅度提高。

  本文所要介紹的負載均衡技術主要是指在均衡伺服器群中所有伺服器和應用程式之間流量負載的應用,目前負載均衡技術大多數是用于提高諸如在Web伺服器、FTP伺服器和其它關鍵任務伺服器上的Internet伺服器程式的可用性和可伸縮性。

負載均衡實施要素

  負載均衡方案應是在網站建設初期就應考慮的問題,不過有時随着通路流量的爆炸性增長,超出決策者的意料,這也就成為不得不面對的問題。當我們在引入某種負載均衡方案乃至具體實施時,像其他的許多方案一樣,首先是确定目前及将來的應用需求,然後在代價與收效之間做出權衡。

  針對目前及将來的應用需求,分析網絡瓶頸的不同所在,我們就需要确立是采用哪一類的負載均衡技術,采用什麼樣的均衡政策,在可用性、相容性、安全性等等方面要滿足多大的需求,如此等等。

  不管負載均衡方案是采用花費較少的軟體方式,還是購買代價高昂在性能功能上更強的第四層交換機、負載均衡器等硬體方式來實作,亦或其他種類不同的均衡技術,下面這幾項都是我們在引入均衡方案時可能要考慮的問題:

性能:性能是我們在引入均衡方案時需要重點考慮的問題,但也是一個最難把握的問題。衡量性能時可将每秒鐘通過網絡的資料包數目做為一個參數,另一個參數是均衡方案中伺服器群所能處理的最大并發連接配接數目,但是,假設一個均衡系統能處理百萬計的并發連接配接數,可是卻隻能以每秒2個包的速率轉發,這顯然是沒有任何作用的。 性能的優劣與負載均衡裝置的處理能力、采用的均衡政策息息相關,并且有兩點需要注意:一、均衡方案對伺服器群整體的性能,這是響應用戶端連接配接請求速度的關鍵;二、負載均衡裝置自身的性能,避免有大量連接配接請求時自身性能不足而成為服務瓶頸。

有時我們也可以考慮采用混合型負載均衡政策來提升伺服器群的總體性能,如DNS負載均衡與NAT負載均衡相結合。另外,針對有大量靜态文檔請求的站點,也可以考慮采用高速緩存技術,相對來說更節省費用,更能提高響應性能;對有大量ssl/xml内容傳輸的站點,更應考慮采用ssl/xml加速技術。

可擴充性:IT技術日新月異,一年以前最新的産品,現在或許已是網絡中性能最低的産品;業務量的急速上升,一年前的網絡,現在需要新一輪的擴充。合适的均衡解決方案應能滿足這些需求,能均衡不同作業系統和硬體平台之間的負載,能均衡HTTP、郵件、新聞、代理、資料庫、防火牆和 Cache等不同伺服器的負載,并且能以對用戶端完全透明的方式動态增加或删除某些資源。

靈活性:均衡解決方案應能靈活地提供不同的應用需求,滿足應用需求的不斷變化。在不同的伺服器群有不同的應用需求時,應有多樣的均衡政策提供更廣泛的選擇。

可靠性:在對服務品質要求較高的站點,負載均衡解決方案應能為伺服器群提供完全的容錯性和高可用性。但在負載均衡裝置自身出現故障時,應該有良好的備援解決方案,提高可靠性。使用備援時,處于同一個備援單元的多個負載均衡裝置必須具有有效的方式以便互相進行監控,保護系統盡可能地避免遭受到重大故障的損失。

易管理性:不管是通過軟體還是硬體方式的均衡解決方案,我們都希望它有靈活、直覺和安全的管理方式,這樣便于安裝、配置、維護和監控,提高工作效率,避免差錯。在硬體負載均衡裝置上,目前主要有三種管理方式可供選擇:一、指令行接口(CLI:Command Line Interface),可通過超級終端連接配接負載均衡裝置串行接口來管理,也能telnet遠端登入管理,在初始化配置時,往往要用到前者;二、圖形使用者接口(GUI:Graphical User Interfaces),有基于普通web頁的管理,也有通過Java Applet

進行安全管理,一般都需要管理端安裝有某個版本的浏覽器;三、SNMP(Simple Network Management Protocol,簡單網絡管理協定)支援,通過第三方網絡管理軟體對符合SNMP标準的裝置進行管理。

DNS負載均衡

  DNS負載均衡技術是在DNS伺服器中為同一個主機名配置多個IP位址,在應答DNS查詢時,DNS伺服器對每個查詢将以DNS檔案中主機記錄的IP位址按順序傳回不同的解析結果,将用戶端的通路引導到不同的機器上去,使得不同的用戶端通路不同的伺服器,進而達到負載均衡的目的。

  DNS負載均衡的優點是經濟簡單易行,并且伺服器可以位于internet上任意的位置。但它也存在不少缺點:

為了使本DNS伺服器和其他DNS伺服器及時互動,保證DNS資料及時更新,使位址能随機配置設定,一般都要将DNS的重新整理時間設定的較小,但太小将會使DNS流量大增造成額外的網絡問題。

一旦某個伺服器出現故障,即使及時修改了DNS設定,還是要等待足夠的時間(重新整理時間)才能發揮作用,在此期間,儲存了故障伺服器位址的客戶計算機将不能正常通路伺服器。

DNS負載均衡采用的是簡單的輪循負載算法,不能區分伺服器的差異,不能反映伺服器的目前運作狀态,不能做到為性能較好的伺服器多配置設定請求,甚至會出現客戶請求集中在某一台伺服器上的情況。

要給每台伺服器配置設定一個internet上的IP位址,這勢必會占用過多的IP位址。

  判斷一個站點是否采用了DNS負載均衡的最簡單方式就是連續的ping這個域名,如果多次解析傳回的IP位址不相同的話,那麼這個站點就很可能采用的就是較為普遍的DNS負載均衡。但也不一定,因為如果采用的是DNS響應均衡,多次解析傳回的IP位址也可能會不相同。不妨試試Ping一下www.yesky.com,www.sohu.com,www.yahoo.com。

  現假設有三台伺服器來應對www.test.com的請求。在采用BIND 8.x DNS伺服器的unix系統上實作起來比較簡單,隻需在該域的資料記錄中添加類似下面的結果:

  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下的實作也很簡單,下面詳細介紹在win2000 server下實作DNS負載均衡的過程,NT4.0類似:

打開“管理工具”下的“DNS”,進入DNS服務配置控制台。

打開相應DNS 伺服器的“屬性”,在“進階”頁籤的“伺服器選項”中,選中“啟用循環”複選框。此步相當于在系統資料庫記錄HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters中添加一個雙位元組制值(dword值)RoundRobin,值為1。

打開正向搜尋區域的相應區域(如test.com),建立主機添加主機 (A) 資源記錄,記錄如下:

www    IN    A          192.1.1.1

www    IN    A          192.1.1.2

www    IN    A          192.1.1.3

在這裡可以看到的差別是在NT下一個主機名對應多個IP位址記錄,但在unix下,是先添加多個不同的主機名分别對應個自的IP位址,然後再把這些主機賦同一個别名(CNAME)來實作的。

在此需要注意的是,NT下本地子網優先級會取代多宿主名稱的循環複用,是以在測試時,如果做測試用的客戶機IP位址與主機資源記錄的IP在同一有類掩碼範圍内,就需要清除在“進階”頁籤“伺服器選項”中的“啟用netmask排序”。

NAT負載均衡

  NAT(Network Address Translation 網絡位址轉換)簡單地說就是将一個IP位址轉換為另一個IP位址,一般用于未經注冊的内部位址與合法的、已獲注冊的Internet IP位址間進行轉換。适用于解決Internet IP位址緊張、不想讓網絡外部知道内部網絡結構等的場合下。每次NAT轉換勢必會增加NAT裝置的開銷,但這種額外的開銷對于大多數網絡來說都是微不足道的,除非在高帶寬有大量NAT請求的網絡上。

  NAT負載均衡将一個外部IP位址映射為多個内部IP位址,對每次連接配接請求動态地轉換為一個内部伺服器的位址,将外部連接配接請求引到轉換得到位址的那個伺服器上,進而達到負載均衡的目的。

  NAT負載均衡是一種比較完善的負載均衡技術,起着NAT負載均衡功能的裝置一般處于内部伺服器到外部網間的網關位置,如路由器、防火牆、四層交換機、專用負載均衡器等,均衡算法也較靈活,如随機選擇、最少連接配接數及響應時間等來配置設定負載。

  NAT負載均衡可以通過軟硬體方式來實作。通過軟體方式來實作NAT負載均衡的裝置往往受到帶寬及系統本身處理能力的限制,由于NAT比較接近網絡的低層,是以就可以将它內建在硬體裝置中,通常這樣的硬體裝置是第四層交換機和專用負載均衡器,第四層交換機的一項重要功能就是NAT負載均衡。

  下面以執行個體介紹一下Cisco路由器NAT負載均衡的配置:

  現有一台有一個串行接口和一個Ethernet接口的路由器,Ethernet口連接配接到内部網絡,内部網絡上有三台web伺服器,但都隻是低端配置,為了處理好來自Internet上大量的web連接配接請求,是以需要在此路由器上做NAT負載均衡配置,把發送到web伺服器合法Internet IP位址的封包轉換成這三台伺服器的内部本地位址。 其具體配置過程如下:

做好路由器的基本配置,并定義各個接口在做NAT時是内部還是外部接口。

然後定義一個标準通路清單(standard access list),用來辨別要轉換的合法IP位址。

再定義NAT位址池來辨別内部web伺服器的本地位址,注意要用到關鍵字rotary,表明我們要使用輪循(Round Robin)的方式從NAT位址池中取出相應IP位址來轉換合法IP封包。

最後,把目标位址為通路表中IP的封包轉換成位址池中定義的IP位址。

  相應配置檔案如下:

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

反向代理負載均衡

  普通代理方式是代理内部網絡使用者通路internet上伺服器的連接配接請求,用戶端必須指定代理伺服器,并将本來要直接發送到internet上伺服器的連接配接請求發送給代理伺服器處理。

  反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接配接請求,然後将請求轉發給内部網絡上的伺服器,并将從伺服器上得到的結果傳回給internet上請求連接配接的用戶端,此時代理伺服器對外就表現為一個伺服器。

  反向代理負載均衡技術是把将來自internet上的連接配接請求以反向代理的方式動态地轉發給内部網絡上的多台伺服器進行處理,進而達到負載均衡的目的。

  反向代理負載均衡能以軟體方式來實作,如apache mod_proxy、netscape proxy等,也可以在高速緩存器、負載均衡器等硬體裝置上實作。 反向代理負載均衡可以将優化的負載均衡政策和代理伺服器的高速緩存技術結合在一起,提升靜态網頁的通路速度,提供有益的性能;由于網絡外部使用者不能直接通路真實的伺服器,具備額外的安全性(同理,NAT負載均衡技術也有此優點)。

  其缺點主要表現在以下兩個方面:

反向代理是處于OSI參考模型第七層應用的,是以就必須為每一種應用服務專門開發一個反向代理伺服器,這樣就限制了反向代理負載均衡技術的應用範圍,現在一般都用于對web伺服器的負載均衡。

針對每一次代理,代理伺服器就必須打開兩個連接配接,一個對外,一個對内,是以在并發連接配接請求數量非常大的時候,代理伺服器的負載也就非常大了,在最後代理伺服器本身會成為服務的瓶頸。

  一般來講,可以用它來對連接配接數量不是特别大,但每次連接配接都需要消耗大量處理資源的站點進行負載均衡,如search。

  下面以在apache mod_proxy下做的反向代理負載均衡為配置執行個體:在站點www.test.com,我們按提供的内容進行分類,不同的伺服器用于提供不同的内容服務,将對http://www.test.com/news的通路轉到IP位址為192.168.1.1的内部伺服器上處理,對http://www.test.com/it的通路轉到伺服器192.168.1.2上,對http://www.test.com/life的通路轉到伺服器192.168.1.3上,對http://www.test.com/love的通路轉到合作站點http://www.love.com上,進而減輕本apache伺服器的負擔,達到負載均衡的目的。

  首先要确定域名www.test.com在DNS上的記錄對應apache伺服器接口上具有internet合法注冊的IP位址,這樣才能使internet上對www.test.com的所有連接配接請求發送給本台apache伺服器。

  在本台伺服器的apache配置檔案httpd.conf中添加如下設定:

  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

  注意,此項設定最好添加在httpd.conf檔案“Section 2”以後的位置,伺服器192.168.1.1-3也應是具有相應功能的www伺服器,在重新開機服務時,最好用apachectl configtest指令檢查一下配置是否有誤。

混合型負載均衡

  在有些大型網絡,由于多個伺服器群内硬體裝置、各自的規模、提供的服務等的差異,我們可以考慮給每個伺服器群采用最合适的負載均衡方式,然後又在這多個伺服器群間再一次負載均衡或群集起來以一個整體向外界提供服務(即把這多個伺服器群當做一個新的伺服器群),進而達到最佳的性能。我們将這種方式稱之為混合型負載均衡。此種方式有時也用于單台均衡裝置的性能不能滿足大量連接配接請求的情況下。

  下圖展示了一個應用示例,三個伺服器群針對各自的特點,分别采用了不同的負載均衡方式。當用戶端發出域名解析請求時,DNS伺服器依次把它解析成三個伺服器群的VIP,如此把用戶端的連接配接請求分别引向三個伺服器群,進而達到了再一次負載均衡的目的。

  在圖中大家可能注意到,負載均衡裝置在網絡拓樸上,可以處于外部網和内部網絡間網關的位置,也可以和内部伺服器群處于并行的位置,甚至可以處于内部網絡或internet上的任意位置,特别是在采用群集負載均衡時,根本就沒有單獨的負載均衡裝置。

  伺服器群内各伺服器隻有提供相同内容的服務才有負載均衡的意義,特别是在DNS負載均衡時。要不然,這樣會造成大量連接配接請求的丢失或由于多次傳回内容的不同給客戶造成混亂。

  是以,如圖的這個示例在實際中可能沒有多大的意義,因為如此大的服務内容相同但各伺服器群存在大量差異的網站并不多見。 但做為一個示例,相信還是很有參考意義的。

負載均衡技術全攻略(下)