歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 負載均衡技術全攻略

負載均衡技術全攻略

日期:2017/2/27 16:05:38   编辑:Linux教程
Internet的規模每一百天就會增長一倍,客戶希望獲得7天24小時的不間斷可用性及較快的系統反應時間,而不願屢次看到某個站點“Server Too Busy”及頻繁的系統故障。
網 絡的各個核心部分隨著業務量的提高、訪問量和數據流量的快速增長,其處理能力和計算強度也相應增大,使得單一設備根本無法承擔。在此情況下,如果扔掉現有 設備去做大量的硬件升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升,這又將導致再一次硬件升級的高額成本投入,甚至性能再卓越的設備 也不能滿足當前業務量的需求。於是,負載均衡機制應運而生。
負載均衡(Load Balance)建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性。
負載均衡有兩方面的含義:首先,大量的並發訪問或數據流量分擔到多台節點設備上分別處理,減少用戶等待響應的時間;其次,單個重負載的運算分擔到多台節點設備上做並行處理,每個節點設備處理結束後,將結果匯總,返回給用戶,系統處理能力得到大幅度提高。
本文所要介紹的負載均衡技術主要是指在均衡服務器群中所有服務器和應用程序之間流量負載的應用,目前負載均衡技術大多數是用於提高諸如在Web服務器、FTP服務器和其它關鍵任務服務器上的Internet服務器程序的可用性和可伸縮性。

負載均衡技術分類
  目前有許多不同的負載均衡技術用以滿足不同的應用需求,下面從負載均衡所采用的設備對象、應用的網絡層次(指OSI參考模型)及應用的地理結構等來分類。

軟/硬件負載均衡
軟件負載均衡解決方案是指在一台或多台服務器相應的操作系統上安裝一個或多個附加軟件來實現負載均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的優點是基於特定環境,配置簡單,使用靈活,成本低廉,可以滿足一般的負載均衡需求。
軟件解決方案缺點也較多,因為每台服務器上安裝額外的軟件運行會消耗系統不定量的資源,越是功能強大的模塊,消耗得越多,所以當連接請求特別大的時候,軟件本身會成為服務器工作成敗的一個關鍵;軟件可擴展性並不是很好,受到操作系統的限制;由於操作系統本身的Bug,往往會引起安全問題。
硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,這種設備我們通常稱之為負載均衡器,由於專門的設備完成專門的任務,獨立於操作系統,整體性能得到大量提高,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。
負載均衡器有多種多樣的形式,除了作為獨立意義上的負載均衡器外,有些負載均衡器集成在交換設備中,置於服務器與Internet鏈接之間,有些則以兩塊網絡適配器將這一功能集成到PC中,一塊連接到Internet上,一塊連接到後端服務器群的內部網絡上。
一般而言,硬件負載均衡在功能、性能上優於軟件方式,不過成本昂貴。

本地/全局負載均衡
  負載均衡從其應用的地理結構上分為本地負載均衡(Local Load Balance)和全局負載均衡(Global Load Balance,也叫地域負載均衡),本地負載均衡是指對本地的服務器群做負載均衡,全局負載均衡是指對分別放置在不同的地理位置、有不同網絡結構的服務器群間作負載均衡。
   本地負載均衡能有效地解決數據流量過大、網絡負荷過重的問題,並且不需花費昂貴開支購置性能卓越的服務器,充分利用現有設備,避免服務器單點故障造成數 據流量的損失。其有靈活多樣的均衡策略把數據流量合理地分配給服務器群內的服務器共同負擔。即使是再給現有服務器擴充升級,也只是簡單地增加一個新的服務 器到服務群中,而不需改變現有網絡結構、停止現有的服務。
  全局負載均衡主要用於在一個多區域擁有自己服務器的站點,為了使全球用戶只以一個IP地址或域名就能訪問到離自己最近的服務器,從而獲得最快的訪問速度,也可用於子公司分散站點分布廣的大公司通過Intranet(企業內部互聯網)來達到資源統一合理分配的目的。
  全局負載均衡有以下的特點:
  • 實現地理位置無關性,能夠遠距離為用戶提供完全的透明服務。
  • 除了能避免服務器、數據中心等的單點失效,也能避免由於ISP專線故障引起的單點失效。
  • 解決網絡擁塞問題,提高服務器響應速度,服務就近提供,達到更好的訪問質量。
網絡層次上的負載均衡
  針對網絡上負載過重的不同瓶頸所在,從網絡的不同層次入手,我們可以采用相應的負載均衡技術來解決現有問題。
  隨著帶寬增加,數據流量不斷增大,網絡核心部分的數據接口將面臨瓶頸問題,原有的單一線路將很難滿足需求,而且線路的升級又過於昂貴甚至難以實現,這時就可以考慮采用鏈路聚合(Trunking)技術。
  鏈路聚合技術(第二層負載均衡)將多條物理鏈路當作一條單一的聚合邏輯鏈路使用,網絡數據流量由聚合邏輯鏈路中所有物理鏈路共同承擔,由此在邏輯上增大了鏈路的容量,使其能滿足帶寬增加的需求。
  現代負載均衡技術通常操作於網絡的第四層或第七層。第四層負載均衡將一個Internet上合法注冊的IP地址映射為多個內部服務器的IP地址,對每次TCP連接請求動態使用其中一個內部IP地址,達到負載均衡的目的。在第四層交換機中,此種均衡技術得到廣泛的應用,一個目標地址是服務器群VIP(虛擬IP,Virtual IP address)連接請求的數據包流經交換機,交換機根據源端和目的IP地址、TCP或UDP端口號和一定的負載均衡策略,在服務器IP和VIP間進行映射,選取服務器群中最好的服務器來處理連接請求。
  第七層負載均衡控制應用層服務的內容,提供了一種對訪問流量的高層控制方式,適合對HTTP服務器群的應用。第七層負載均衡技術通過檢查流經的HTTP報頭,根據報頭內的信息來執行負載均衡任務。
  第七層負載均衡優點表現在如下幾個方面:
  • 通過對HTTP報頭的檢查,可以檢測出HTTP400、500和600系列的錯誤信息,因而能透明地將連接請求重新定向到另一台服務器,避免應用層故障。
  • 可根據流經的數據類型(如判斷數據包是圖像文件、壓縮文件或多媒體文件格式等),把數據流量引向相應內容的服務器來處理,增加系統性能。
  • 能根據連接請求的類型,如是普通文本、圖象等靜態文檔請求,還是asp、cgi等的動態文檔請求,把相應的請求引向相應的服務器來處理,提高系統的性能及安全性。
  • 第七層負載均衡受到其所支持的協議限制(一般只有HTTP),這樣就限制了它應用的廣泛性,並且檢查HTTP報頭會占用大量的系統資源,勢必會影響到系統的性能,在大量連接請求的情況下,負載均衡設備自身容易成為網絡整體性能的瓶頸。
負載均衡策略
  在實際應用中,我們可能不想僅僅是把客戶端的服務請求平均地分配給內部服務器,而不管服務器是否宕機。而是想使Pentium III服務器比Pentium II能接受更多的服務請求,一台處理服務請求較少的服務器能分配到更多的服務請求,出現故障的服務器將不再接受服務請求直至故障恢復等等。
  選擇合適的負載均衡策略,使多個設備能很好的共同完成任務,消除或避免現有網絡負載分布不均、數據流量擁擠反應時間長的瓶頸。在各負載均衡方式中,針對不同的應用需求,在OSI參考模型的第二、三、四、七層的負載均衡都有相應的負載均衡策略。
  負載均衡策略的優劣及其實現的難易程度有兩個關鍵因素:一、負載均衡算法,二、對網絡系統狀況的檢測方式和能力。
  考慮到服務請求的不同類型、服務器的不同處理能力以及隨機選擇造成的負載分配不均勻等問題,為了更加合理的把負載分配給內部的多個服務器,就需要應用相應的能夠正確反映各個服務器處理能力及網絡狀態的負載均衡算法:
輪循均衡(Round Robin):每一次來自網絡的請求輪流分配給內部中的服務器,從1至N然後重新開始。此種均衡算法適合於服務器組中的所有服務器都有相同的軟硬件配置並且平均服務請求相對均衡的情況。

權重輪循均衡(Weighted Round Robin):根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。例如:服務器A的權值被設計成1,B的權值是3,C的權值是6,則服務器A、B、C將分別接受到10%、30%、60%的服務請求。此種均衡算法能確保高性能的服務器得到更多的使用率,避免低性能的服務器負載過重。

隨機均衡(Random):把來自網絡的請求隨機分配給內部中的多個服務器。

權重隨機均衡(Weighted Random):此種均衡算法類似於權重輪循算法,不過在處理請求分擔時是個隨機選擇的過程。

響應速度均衡(Response Time):負載均衡設備對內部各服務器發出一個探測請求(例如Ping),然後根據內部中各服務器對探測請求的最快響應時間來決定哪一台服務器來響應客戶端的服務請求。此種均衡算法能較好的反映服務器的當前運行狀態,但這最快響應時間僅僅指的是負載均衡設備與服務器間的最快響應時間,而不是客戶端與服務器間的最快響應時間。

最少連接數均衡(Least Connection): 客戶端的每一次請求服務在服務器停留的時間可能會有較大的差異,隨著工作時間加長,如果采用簡單的輪循或隨機均衡算法,每一台服務器上的連接進程可能會產 生極大的不同,並沒有達到真正的負載均衡。最少連接數均衡算法對內部中需負載的每一台服務器都有一個數據記錄,記錄當前該服務器正在處理的連接數量,當有 新的服務連接請求時,將把當前請求分配給連接數最少的服務器,使均衡更加符合實際情況,負載更加均衡。此種均衡算法適合長時處理的請求服務,如FTP。

處理能力均衡:此種均衡算法將把服務請求分配給內部中處理負荷(根據服務器CPU型號、CPU數量、內存大小及當前連接數等換算而成)最輕的服務器,由於考慮到了內部服務器的處理能力及當前網絡運行狀況,所以此種均衡算法相對來說更加精確,尤其適合運用到第七層(應用層)負載均衡的情況下。

DNS響應均衡(Flash DNS):在Internet上,無論是HTTP、FTP或是其它的服務請求,客戶端一般都是通過域名解析來找到服務器確切的IP地址的。在此均衡算法下,分處在不同地理位置的負載均衡設備收到同一個客戶端的域名解析請求,並在同一時間內把此域名解析成各自相對應服務器的IP地址(即與此負載均衡設備在同一位地理位置的服務器的IP地址)並返回給客戶端,則客戶端將以最先收到的域名解析IP地址來繼續請求服務,而忽略其它的IP地址響應。在種均衡策略適合應用在全局負載均衡的情況下,對本地負載均衡是沒有意義的。
盡 管有多種的負載均衡算法可以較好的把數據流量分配給服務器去負載,但如果負載均衡策略沒有對網絡系統狀況的檢測方式和能力,一旦在某台服務器或某段負載均 衡設備與服務器網絡間出現故障的情況下,負載均衡設備依然把一部分數據流量引向那台服務器,這勢必造成大量的服務請求被丟失,達不到不間斷可用性的要求。 所以良好的負載均衡策略應有對網絡故障、服務器系統故障、應用服務故障的檢測方式和能力:
Ping偵測:通過ping的方式檢測服務器及網絡系統狀況,此種方式簡單快速,但只能大致檢測出網絡及服務器上的操作系統是否正常,對服務器上的應用服務檢測就無能為力了。

TCP Open偵測:每個服務都會開放某個通過TCP連接,檢測服務器上某個TCP端口(如Telnet的23口,HTTP的80口等)是否開放來判斷服務是否正常。

HTTP URL偵測:比如向HTTP服務器發出一個對main.html文件的訪問請求,如果收到錯誤信息,則認為服務器出現故障。
   負載均衡策略的優劣除受上面所講的兩個因素影響外,在有些應用情況下,我們需要將來自同一客戶端的所有請求都分配給同一台服務器去負擔,例如服務器將客 戶端注冊、購物等服務請求信息保存的本地數據庫的情況下,把客戶端的子請求分配給同一台服務器來處理就顯的至關重要了。有兩種方式可以解決此問題,一是根 據IP地址把來自同一客戶端的多次請求分配給同一台服務器處理,客戶端IP地址與服務器的對應信息是保存在負載均衡設備上的;二是在客戶端浏覽器cookie內做獨一無二的標識來把多次請求分配給同一台服務器處理,適合通過代理服務器上網的客戶端。
  還有一種路徑外返回模式(Out of Path Return), 當客戶端連接請求發送給負載均衡設備的時候,中心負載均衡設備將請求引向某個服務器,服務器的回應請求不再返回給中心負載均衡設備,即繞過流量分配器,直 接返回給客戶端,因此中心負載均衡設備只負責接受並轉發請求,其網絡負擔就減少了很多,並且給客戶端提供了更快的響應時間。此種模式一般用於HTTP服務器群,在各服務器上要安裝一塊虛擬網絡適配器,並將其IP地址設為服務器群的VIP,這樣才能在服務器直接回應客戶端請求時順利的達成三次握手。

負載均衡實施要素

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

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

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

性能:性能是我們在引入均衡方案時需要重點考慮的問題,但也是一個最難把握的問題。衡量性能時可將每秒鐘通過網絡的數據包數目做為一個參數,另一個參數是均衡方案中服務器群所能處理的最大並發連接數目,但是,假設一個均衡系統能處理百萬計的並發連接數,可是卻只能以每秒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負載均衡時。要不然,這樣會造成大量連接請求的丟失或由於多次返回內容的不同給客戶造成混亂。

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

集群的負載均衡技術 前言
  當前,無論在企業網、園區網還是在廣域網如Internet上, 業務量的發展都超出了過去最樂觀的估計,上網熱潮風起雲湧,新的應 用層出不窮,即使按照當時最優配置建設的網絡,也很快會感到吃不消。尤其是各個網絡的核心部分,其數據流量和計算強度之大,使得單一設備根本無法承擔,而 如何在完成同樣功能的多個網絡設備之間實現合理的業務量分配,使之不致於出現一台設備過忙、而 別的設備卻未充分發揮處理能力的情況,就成了一個問題,負載均衡機制也因此應運而生。
  
   負載均衡建立在現有網絡結構之上,它提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完 成以下任務:解決網絡擁塞問題,服務就近提供,實現地理位置無關性 ;為用戶提供更好的訪問質 量;提高服務器響應速度;提高服務器及其他資源的利用效率;避免了網絡關鍵部位出現單點失效。
  
  定義
  
  其實,負載均衡並非傳統意義上的“均衡”,一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改稱為“負載分擔”,也許更好懂一些。說得通俗一點,負載均衡在網絡中的作用就像輪流值日制度,把任務分給大家來完成,以免讓一個人累死累活。不過,這種意義上的均衡一般是靜態的,也就是事先確定的“輪值”策略。
  
  與輪流值日制度不同的是,動態負載均衡通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理分配出去。結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,後一種是指對分別放置在不同的地理位置、在不同的網絡及服務器群集之間作負載均衡。
  
  服務器群集中每個服務結點運行一個所需服務器程序的獨立拷貝,諸如Web、FTP、Telnet或e-mail服務器程序。對於某些服務(如 運行在Web服務器上的那些服務)而言,程序的一個拷貝運行在群集內所有的主機上,而網絡負載均衡則將工作負載在這些主機間進行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網絡負載均衡允許網絡通訊量流到一個主機上,並在該主機發生故障時將通訊量移至其他主機。
  
  負載均衡技術實現結構
  
  在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以下任務:
  
  ◆解決網絡擁塞問題,服務就近提供,實現地理位置無關性
  ◆為用戶提供更好的訪問質量
  ◆提高服務器響應速度
  ◆提高服務器及其他資源的利用效率
  ◆避免了網絡關鍵部位出現單點失效
  
  廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。對一個網絡的負載均衡應用,從網絡的不同層次入手,根據網絡瓶頸所在進行具體分析。從客戶端應用為起點縱向分析,參考OSI的分層模型,我們把負載均衡技術的實現分為客戶端負載均衡技術、應用服務器技術、高層協議交換、網絡接入協議交換等幾種方式。
    
  負載均衡的層次
     
  ◆基於客戶端的負載均衡
  
  這種模式指的是在網絡的客戶端運行特定的程序,該程序通過定期或不定期的收集服務器群的運行參數:CPU占用情況、磁盤 IO、 內存等動態信息,再根據某種選擇策略,找到可以提供服務的最佳服務器,將本地的應用請求發向它。如果負載信息采集程序發現服務器失效,則找到其他可替代的 服務器作為服務選擇。整個過程對於應用程序來說是完全透明的,所有的工作都在運行時處理。 因此這也是一種動態的負載均衡技術。
  
   但這種技術存在通用性的問題。因為每一個客戶端都要安裝這個特殊的采集程序;並且,為了保證應用層的透明運行,需要針對每一個應用程序加以修改,通過動 態鏈接庫或者嵌入的方法,將客戶端的訪問請求能夠先經過采集程序再發往服務器,以重定向的過 程進行。對於每一個應用幾乎要對代碼進行重新開發,工作量比較大。
  
  所以,這種技術僅在特殊的應用場合才使用到,比如在執行某些專有任務的時候,比較需要分布式的計算能力,對應用的開發沒有太多要求。另外,在采用JAVA構架模型中,常常使用這種模式實現分布式的負載均衡,因為java應用都基於虛擬機進行,可以在應 用層和虛擬機之間設計一個中間層,處理負載均衡的工作。
  
  ◆應用服務器的負載均衡技術
  
   如果將客戶端的負載均衡層移植到某一個中間平台,形成三層結構,則客戶端應用可以不需要做特殊的修改,透明的通過中間層應用服務器將請求均衡到相應的服 務結點。比較常見的實現手段就是反向代理技術。使用反向代理服務器,可以將請求均勻轉發給多 台服務器,或者直接將緩存的數據返回客戶端,這樣的加速模式在一定程度上可以提升靜態網頁的訪問速度,從而達到負載均衡的目的。
  
  使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。
  
   反向代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對內的連接,因此對於特別高的連接 請求,代理服務器的負載也就非常之大。反向代理能夠執行針對應用協議而優化的負載均衡策略, 每次僅訪問最空閒的內部服務器來提供服務。但是隨著並發連接數量的增加,代理服務器本身的負載也變得非常大,最後反向代理服務器本身會成為服務的瓶頸。
  
  ◆基於域名系統的負載均衡
  
  NCSA的可擴展Web是最早使用動態DNS輪詢技術的web系統。在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。在很多知名的web站點都使用了這個技術:包括早期的yahoo站點、163等。動態DNS輪詢實現起來簡單,無需復雜的配置和管理,一般支持bind8.2以上的類unix系統都能夠運行,因 此廣為使用。
  
  DNS負載均衡是一種簡單而有效的方法,但是存在不少問題。
  
  首先域名服務器無法知道服務結點是否有效,如果服務結點失效,余名系統依然會將域名解析到該節點上,造成用戶訪問失效。
  
  其次,由於DNS的數據刷新時間TTL(Time to LIVE)標志,一旦超過這個TTL,其他DNS服務器就需要和這個服務器交互,以重新獲得地址數據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使TTL盡量短,不同地方的DNS服務器能更新對應的 地址,達到隨機獲得地址。然而將TTL設置得過短,將使DNS流量大增,而造成額外的網絡問題。
  
  最後,它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的客戶計 算機能均勻獲得不同的地址。例如,用戶A可能只是浏覽幾個網頁,而用戶B可能進行著大量的下載,由於域名系統沒有合適的負載策 略,僅僅是簡單的輪流均衡,很容易將用戶A的請求發往負載輕的站點,而將B的請求發往負載已經很重的站點。因此,在動態平衡特性上,動態DNS輪詢的效果並不理想。
  
  ◆高層協議內容交換技術
  
  除了上述的幾種負載均衡方式之外,還有在協議內部支持負載均衡能力的技術,即URL交換或七層交換,提供了一種對訪問流量 的高層控制方式。Web內容交換技術檢查所有的HTTP報頭,根據報頭內的信息來執行負載均衡的決策。例如可以根據這些信息來確定 如何為個人主頁和圖像數據等內容提供服務,常見的有HTTP協議中的重定向能力等。
  
  HTTP運行於TCP連接的最高層。客戶端通過恆定的端口號80的TCP服務直接連接到服務器,然後通過TCP連接向服務器端發送一個 HTTP請求。協議交換根據內容策略來控制負載,而不是根據TCP端口號,所以不會造成訪問流量的滯留。
  
  由於負載平衡設備要把進入的請求分配給多個服務器,因此,它只能在TCP連接時建立,且HTTP請求通過後才能確定如何進行負 載的平衡。當一個網站的點擊率達到每秒上百甚至上千次時,TCP連接、HTTP報頭信息的分析以及進程的時延已經變得很重要了,要 盡一切可能提高這幾各部份的性能。
  
  在HTTP請求和報頭中有很多對負載平衡有用的信息。我們可以從這些信息中獲知客戶端所請求的URL和網頁,利用這個信息,負載平衡設備就可以將所有的圖像請求引導到一個圖像服務器,或者根據URL的數據庫查詢內容調用CGI程序,將請求引導到一個專用 的高性能數據庫服務器。
  
  如果網絡管理員熟悉內容交換技術,他可以根據HTTP報頭的cookie字段來使用Web內容交換技術改善對特定客戶的服務,如果能從HTTP請求中找到一些規律,還可以充分利用它作出各種決策。除了TCP連接表的問題外,如何查找合適的HTTP報頭信息以及作出 負載平衡決策的過程,是影響Web內容交換技術性能的重要問題。如果Web服務器已經為圖像服務、SSL對話、數據庫事務服務之類的 特殊功能進行了優化,那麼,采用這個層次的流量控制將可以提高網絡的性能。
  
  ◆網絡接入協議交換
  
  大型的網絡一般都是由大量專用技術設備組成的,如包括防火牆、路由器、第3、4層交換機、負載均衡設備、緩沖服務器和Web 服務器等。如何將這些技術設備有機地組合在一起,是一個直接影響到網絡性能的關鍵性問題。現在許多交換機提供第四層交換功能,對外提供一個一致的IP地址,並映射為多個內部IP地址,對每次TCP和UDP連 接請求,根據其端口號,按照即定的策略動態選擇 一個內部地址,將數據包轉發到該地址上,達到負載均衡的目的。很多硬件廠商將這種技術集成在他們的交換機中,作為他們第四層交換的一種功能來實現,一般采 用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。由於地址轉 換相對來講比較接近網絡的低層,因此就有可能將它集成在硬件設備中,通常這樣的硬件設備是局域網交換機。
  
  當前局域網交換機所謂的第四層交換技術,就是按照IP地址和TCP端 口進行虛擬連接的交換,直接將數據包發送到目的計算機的 相應端口。通過交換機將來自外部的初始連接請求,分別與內部的多個地址相聯系,此後就能對這些已經建立的虛擬連接進行交換。因此,一些具備第四層交換能力 的局域網交換機,就能作為一個硬件負載均衡器,完成服務器的負載均衡。
  
  由於第四層交換基於硬件芯片,因此其性能非常優秀,尤其是對於網絡傳輸速度和交換速度遠遠超過普通的數據包轉發。然而,正因為它是使用硬件實現的,因此也不夠靈活,僅僅能夠處理幾種最標准的應用協議的負載均衡,如HTTP 。當前負載均衡主要用於解決服務器的處理能力不足的問題,因此並不能充分發揮交換機帶來的高網絡帶寬的優點。
  
  使用基於操作系統的第四層交換技術因此孕育而生。通過開放源碼的Linux,將第四層交換的核心功能做在系統的核心層,能夠在 相對高效穩定的核心空間進行IP包的數據處理工作,其效率不比采用專有OS的硬件交換機差多少。同時又可以在核心層或者用戶層增 加基於交換核心的負載均衡策略支持,因此在靈活性上遠遠高於硬件系統,而且造價方面有更好的優勢。
  
  ◆傳輸鏈路聚合
  
  為了支持與日俱增的高帶寬應用,越來越多的PC機使用更加快速的鏈路連入網絡。而網絡中的業務量分布是不平衡的,核心高、 邊緣低,關鍵部門高、一般部門低。伴隨計算機處理能力的大幅度提高,人們對多工作組局域網的處理能力有了更高的要求。當企業內部對高帶寬應用需求不斷增大時(例如Web訪問、文檔傳輸及內部網連接),局域網核心部位的數據接口將產生瓶頸問題,瓶頸延長了客戶應用請求的響應時間。並且局域網具有分散特性,網絡本身並沒有針對服務器的保護措施,一個無意的動作(像一腳踢掉網 線的插頭)就會讓服務器與網絡斷開。
  
   通常,解決瓶頸問題采用的對策是提高服務器鏈路的容量,使其超出目前的需求。例如可以由快速以太網升級到千兆以太網。對於大型企業來說,采用升級技術是 一種長遠的、有前景的解決方案。然而對於許多企業,當需求還沒有大到非得花費大量的金錢和時 間進行升級時,使用升級技術就顯得大材小用了。在這種情況下,鏈路聚合技術為消除傳輸鏈路上的瓶頸與不安全因素提供了成本低廉的解決方案。
  
  鏈路聚合技術,將多個線路的傳輸容量融合成一個單一的邏輯連接。當原有的線路滿足不了需求,而單一線路的升級又太昂貴或難以實現時,就要采用多線路的解決方案了。目前有5種鏈路聚合技術可以將多條線路“捆綁”起來。
  
  同步IMUX系統工作在T1/E1的比特層,利用多個同步的DS1信道傳輸數據,來實現負載均衡。
  
  IMA是另外一種多線路的反向多路復用技術,工作在信元級,能夠運行在使用ATM路由器的平台上。
  
  用路由器來實現多線路是一種流行的鏈路聚合技術,路由器可以根據已知的目的地址的緩沖(cache)大小,將分組分配給各個平 行的鏈路,也可以采用循環分配的方法來向線路分發分組。
  
  多重鏈路PPP,又稱MP或MLP,是應用於使用PPP封裝數據鏈路的路由器負載平衡技術。MP可以將大的PPP數據包分解成小的數據 段,再將其分發給平行的多個線路,還可以根據當前的鏈路利用率來動態地分配撥號線路。這樣做盡管速度很慢,因為數據包分段和附加的緩沖都增加時延,但可以在低速的線路上運行得很好。
  
  還有一種鏈路聚合發生在服務器或者網橋的接口卡上,通過同一塊接口卡的多個端口映射到相同的IP地址,均衡本地的以太網流 量以實現在服務器上經過的流量成倍增加。目前市面上的產品有intel和dlink的多端口網卡,,一般在一塊網卡上綁定4個100M以太端 口,大大提高了服務器的網絡吞吐量。不過這項技術由於需要操作系統驅動層的支持,只能在win2000和linux下實現。
  
  鏈路聚合系統增加了網絡的復雜性,但也提高了網絡的可靠性,使人們可以在服務器等關鍵LAN段的線路上采用冗余路由。對於 IP系統,可以考慮采用VRRP(虛擬路由冗余協議)。VRRP可以生成一個虛擬缺省的網關地址,當主路由器無法接通時,備用路由器就會采用這個地址,使LAN通信得以繼續。總之,當主要線路的性能必需提高而單條線路的升級又不可行時,可以采用鏈路聚合技術。
  
  ◆帶均衡策略的服務器群集
  
  如今,服務器必須具備提供大量並發訪問服務的能力,其處理能力和I/O能力已經成為提供服務的瓶頸。如果客戶的增多導致通信 量超出了服務器能承受的范圍,那麼其結果必然是——宕機。顯然,單台服務器有限的性能不可能解決這個問題,一台普通服務器的 處理能力只能達到每秒幾萬個到幾十萬個請求,無法在一秒鐘內處理上百萬個甚至更多的請求。但若能將10台這樣的服務器組成一個 系統,並通過軟件技術將所有請求平均分配給所有服務器,那麼這個系統就完全擁有每秒鐘處理幾百萬個甚至更多請求的能力。這就是利用服務器群集實現負載均衡的最初基本設計思想。
  
  早期的服務器群集通常以光纖鏡像卡進行主從方式備份。令服務運營商頭疼的是關鍵性服務器或應用較多、數據流量較大的服務器一般檔次不會太低,而服務運營商花了兩台服務器的錢卻常常只得到一台服務器的性能。通過地址轉換將多台服務器網卡的不同IP 地址翻譯成一個VIP(Virtual IP)地址,使得每台服務器均時時處於工作狀態。原來需要用小型機來完成的工作改由多台PC服務器完成, 這種彈性解決方案對投資保護的作用是相當明顯的——既避免了小型機剛性升級所帶來的巨大設備投資,又避免了人員培訓的重復投資。同時,服務運營商可以依據業務的需要隨時調整服務器的數量。
  網絡負載均衡提高了諸如Web服務器、FTP服務器和其他關鍵任務服務器上的因特網服務器程序的可用性和可伸縮性。單一計算機可以提供有限級別的服務器可靠性和可伸縮性。但是,通過將兩個或兩個以上高級服務器的主機連成群集,網絡負載均衡就能夠提 供關鍵任務服務器所需的可靠性和性能。
  為了建立一個高負載的Web站點,必須使用多服務器的分布式結構。上面提到的使用代理服務器和Web服務器相結合,或者兩台 Web服 務器相互協作的方式也屬於多服務器的結構,但在這些多服務器的結構中,每台服務器所起到的作用是不同的,屬於非對稱的 體系結構。非對稱的服務器結構中每個服務器起到的作用是不同的,例如一台服務器用於提供靜態網頁,而另一台用於提供動態網頁等等。這樣就使得網頁設計時就 需要考慮不同服務器之間的關系,一旦要改變服務器之間的關系,就會使得某些網頁出現連接錯誤, 不利於維護,可擴展性也較差。
   能進行負載均衡的網絡設計結構為對稱結構,在對稱結構中每台服務器都具備等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。然後,可以通過某 種技術,將外部發送來的請求均勻分配到對稱結構中的每台服務器上,接收到連接請求的服務器都 獨立回應客戶的請求。在這種結構中,由於建立內容完全一致的Web服務器並不困難,因此負載均衡技術就成為建立一個高負載Web 站點的關鍵性技術。
  總之,負載均衡是一種策略,它能讓多台服務器或多條鏈路共同承擔一些繁重的計算或I/O任務,從而以較低成本消除網絡瓶頸, 提高網絡的靈活性和可靠性。


談Web服務器和應用服務器的負載均衡
 本文對Web服務器和應用服務器的負載均衡進行說明。
 在負載均衡的思路下,多台服務器為對稱方式,每台服務器都具有同等的地位,可以單獨對外提供服務而無須其他服務器的輔助。通過負載分擔技術,將外部發送來的請求按一定規則分配到對稱結構中的某一台服務器上,而接收到請求的服務器都獨立回應客戶機的請求。
 提供服務的一組服務器組成了一個應用服務器集群(cluster),並對外提供一個統一的地址。當一個服務請求被發至該集群時,根據一定規則選擇一台服務器,並將服務轉定向給該服務器承擔,即將負載進行均衡分攤。
  通過應用負載均衡技術,使應用服務超過了一台服務器只能為有限用戶提供服務的限制,可以利用多台服務器同時為大量用戶提供服務。當某台服務器出現故障時, 負載均衡服務器會自動進行檢測並停止將服務請求分發至該服務器,而由其他工作正常的服務器繼續提供服務,從而保證了服務的可靠性。
 上述的集群技術一般都用於Web服務器、應用服務器等,而不是用於數據庫服務器,即不是用於有共享的存儲的服務。數據庫服務器將涉及到加鎖、回滾等一系列問題,要復雜的多。一般數據庫服務器只是使用雙機,其中一台工作,另一台備份。數據庫的雙機並行只用於大型數據庫中。可參見:
  系統高可用性與雙機備份常見問題與方案選擇
  http://www.itmgt.com.cn/ha/hafaq.htm  ·

 負載均衡實現的方法有幾種:
 1.最簡單的是通過DNS,但只能實現簡單的輪流分配,也不能處理故障
 2.如果是基於MS IIS,Windows 2003 Server本身就帶了負載均衡服務,不需另外購買。但這一服務也只是輪流分配。
 3.硬件方式,通過交換機的功能或專門的負載均衡設備可以實現。對於流量的分配可以有多種方式,但基本上都是應用無關的,與服務器的實現負載關系也不大。另外,設備的價格較貴(優點是能支持很多台服務器)。這種方式往往適合大流量、簡單應用。
 4.軟件方式,通過一台負載均衡服務器進行,上面安裝軟件。這種方式比較靈活,成本相對也較低。另外一個很大的優點就是可以根據應用的情況和服務器的情況采取一些策略。
 關於負載均衡中比較高級的功能是FailOver,即一台出現故障時,在這台服務器上正在進行中的進程也會被其他服務器接過去。相應的成本也很高,一般是要象WebLogic、WebSphere軟件的群集版本才支持。

使用負載均衡技術建設高負載的網絡站點
藍森林 http://www.lslnet.com 2000年9月23日 11:40

作 者: 王波
Internet的快速增長使多媒體網絡服務器,特別是Web服務器,面對的訪問者數量快速增加,網絡服務器需要具備提供大量並發訪問服務的能力。例如Yahoo每天會收到數百萬次的訪問請求,因此對於提供大負載Web服務的服務器來講,CPU、I/O處理能力很快會成為瓶頸。
簡單的提高硬件性能並不能真正解決這個問題,因為單台服務器的性能總是有限的,一般來講,一台PC服務器所能提供的並發訪問處理能力大約為1000個,更為高檔的專用服務器能夠支持3000-5000個 並發訪問,這樣的能力還是無法滿足負載較大的網站的要求。尤其是網絡請求具有突發性,當某些重大事件發生時,網絡訪問就會急劇上升,從而造成網絡瓶頸,例 如在網上發布的克林頓彈劾書就是很明顯的例子。必須采用多台服務器提供網絡服務,並將網絡請求分配給這些服務器分擔,才能提供處理大量並發服務的能力。
當使用多台服務器來分擔負載的時候,最簡單的辦法是將不同的服務器用在不同的方面。按提供的內容進行分割時,可以將一台服務器用於提供新聞頁面,而另一台用於提供游戲頁面;或者可以按服務器的功能進行分割,將一台服務器用於提供靜態頁面訪問,而另一些用於提供CGI等 需要大量消耗資源的動態頁面訪問。然而由於網絡訪問的突發性,使得很難確定那些頁面造成的負載太大,如果將服務的頁面分割的過細就會造成很大浪費。事實上 造成負載過大的頁面常常是在變化中的,如果要經常按照負載變化來調整頁面所在的服務器,那麼勢必對管理和維護造成極大的問題。因此這種分割方法只能是大方 向的調整,對於大負載的網站,根本的解決辦法還需要應用負載均衡技術。
負 載均衡的思路下多台服務器為對稱方式,每台服務器都具備等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。然後通過某種負載分擔技術,將外部發 送來的請求均勻分配到對稱結構中的某一台服務器上,而接收到請求的服務器都獨立回應客戶機的請求。由於建立內容完全一致的Web服務器並不復雜,可以使用服務器同步更新或者共享存儲空間等方法來完成,因此負載均衡技術就成為建立一個高負載Web站點的關鍵性技術。
基於特定服務器軟件的負載均衡
很多網絡協議都支持“重定向”功能,例如在HTTP協議中支持Location指令,接收到這個指令的浏覽器將自動重定向到Location指明的另一個URL上。由於發送Location指令比起執行服務請求,對Web服務器的負載要小的多,因此可以根據這個功能來設計一種負載均衡的服務器。任何時候Web服務器認為自己負載較大的時候,它就不再直接發送回浏覽器請求的網頁,而是送回一個Locaction指令,讓浏覽器去服務器集群中的其他服務器上獲得所需要的網頁。
在這種方式下,服務器本身必須支持這種功能,然而具體實現起來卻有很多困難,例如一台服務器如何能保證它重定向過的服務器是比較空閒的,並且不會再次發送Location指令?Location指令和浏覽器都沒有這方面的支持能力,這樣很容易在浏覽器上形成一種死循環。因此這種方式實際應用當中並不多見,使用這種方式實現的服務器集群軟件也較少。有些特定情況下可以使用CGI(包括使用FastCGI或mod_perl擴展來改善性能)來模擬這種方式去分擔負載,而Web服務器仍然保持簡潔、高效的特性,此時避免Location循環的任務將由用戶的CGI程序來承擔。
基於DNS的負載均衡
由於基於服務器軟件的負載均衡需要改動軟件,因此常常是得不償失,負載均衡最好是在服務器軟件之外來完成,這樣才能利用現有服務器軟件的種種優勢。最早的負載均衡技術是通過DNS服務中的隨機名字解析來實現的,在DNS服務器中,可以為多個不同的地址配置同一個名字,而最終查詢這個名字的客戶機將在解析這個名字時得到其中的一個地址。因此,對於同一個名字,不同的客戶機會得到不同的地址,他們也就訪問不同地址上的Web服務器,從而達到負載均衡的目的。
例如如果希望使用三個Web服務器來回應對www.exampleorg.org.cn的HTTP請求,就可以設置該域的DNS服務器中關於該域的數據包括有與下面例子類似的結果:
www1 IN A 192.168.1.1
www2 IN A 192.168.1.2
www3 IN A 192.168.1.3
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3
此後外部的客戶機就可能隨機的得到對應www的不同地址,那麼隨後的HTTP請求也就發送給不同地址了。
DNS負載均衡的優點是簡單、易行,並且服務器可以位於互聯網的任意位置上,當前使用在包括Yahoo在內的Web站點上。然而它也存在不少缺點,一個缺點是為了保證DNS數據及時更新,一般都要將DNS的刷新時間設置的較小,但太小就會造成太大的額外網絡流量,並且更改了DNS數據之後也不能立即生效;第二點是DNS負載均衡無法得知服務器之間的差異,它不能做到為性能較好的服務器多分配請求,也不能了解到服務器的當前狀態,甚至會出現客戶請求集中在某一台服務器上的偶然情況。
反向代理負載均衡
使用代理服務器可以將請求轉發給內部的Web服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。因此也可以考慮使用這種技術,讓代理服務器將請求均勻轉發給多台內部Web服務器之一上,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標准代理方式是客戶使用代理訪問多個外部Web服務器,而這種代理方式是多個客戶使用它訪問內部Web服務器,因此也被稱為反向代理模式。
實 現這個反向代理能力並不能算是一個特別復雜的任務,但是在負載均衡中要求特別高的效率,這樣實現起來就不是十分簡單的了。每針對一次代理,代理服務器就必 須打開兩個連接,一個為對外的連接,一個為對內的連接,因此對於連接請求數量非常大的時候,代理服務器的負載也就非常之大了,在最後反向代理服務器會成為 服務的瓶頸。例如,使用Apache的mod_rproxy模塊來實現負載均衡功能時,提供的並發連接數量受Apache本身的並發連接數量的限制。一般來講,可以使用它來對連接數量不是特別大,但每次連接都需要消耗大量處理資源的站點進行負載均衡,例如搜尋。
使 用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能,具備額外的安全性,外部客戶不能直接訪問真實的服務器。並且 實現起來可以實現較好的負載均衡策略,將負載可以非常均衡的分給內部服務器,不會出現負載集中到某個服務器的偶然現象。
基於NAT的負載均衡技術
網 絡地址轉換為在內部地址和外部地址之間進行轉換,以便具備內部地址的計算機能訪問外部網絡,而當外部網絡中的計算機訪問地址轉換網關擁有的某一外部地址 時,地址轉換網關能將其轉發到一個映射的內部地址上。因此如果地址轉換網關能將每個連接均勻轉換為不同的內部服務器地址,此後外部網絡中的計算機就各自與 自己轉換得到的地址上服務器進行通信,從而達到負載分擔的目的。
地址轉換可以通過軟件方式來實現,也可以通過硬件方式來實現。使用硬件方式進行操作一般稱為交換,而當交換必須保存TCP連接信息的時候,這種針對OSI網絡層的操作就被稱為第四層交換。支持負載均衡的網絡地址轉換為第四層交換機的一種重要功能,由於它基於定制的硬件芯片,因此其性能非常優秀,很多交換機聲稱具備400MB-800MB的第四層交換能力,然而也有一些資料表明,在如此快的速度下,大部分交換機就不再具備第四層交換能力了,而僅僅支持第三層甚至第二層交換。
然而對於大部分站點來講,當前負載均衡主要是解決Web服務器處理能力瓶頸的,而非網絡傳輸能力,很多站點的互聯網連接帶寬總共也不過10MB,只有極少的站點能夠擁有較高速的網絡連接,因此一般沒有必要使用這些負載均衡器這樣的昂貴設備。
使用軟件方式來實現基於網絡地址轉換的負載均衡則要實際的多,除了一些廠商提供的解決方法之外,更有效的方法是使用免費的自由軟件來完成這項任務。其中包括Linux Virtual Server Project中的NAT實現方式,或者本文作者在FreeBSD下對natd的修訂版本。一般來講,使用這種軟件方式來實現地址轉換,中心負載均衡器存在帶寬限制,在100MB的快速以太網條件下,能得到最快達80MB的帶寬,然而在實際應用中,可能只有40MB-60MB的可用帶寬。
擴展的負載均衡技術
上 面使用網絡地址轉換來實現負載分擔,毫無疑問所有的網絡連接都必須通過中心負載均衡器,那麼如果負載特別大,以至於後台的服務器數量不再在是幾台、十幾 台,而是上百台甚至更多,即便是使用性能優秀的硬件交換機也回遇到瓶頸。此時問題將轉變為,如何將那麼多台服務器分布到各個互聯網的多個位置,分散網絡負 擔。當然這可以通過綜合使用DNS和NAT兩種方法來實現,然而更好的方式是使用一種半中心的負載均衡方式。
在這種半中心的負載均衡方式下,即當客戶請求發送給負載均衡器的時候,中心負載均衡器將請求打包並發送給某個服務器,而服務器的回應請求不再返回給中心負載均衡器,而是直接返回給客戶,因此中心負載均衡器只負責接受並轉發請求,其網絡負擔就較小了。
上圖來自Linux Virtual Server Project,為他們使用IP隧道實現的這種負載分擔能力的請求/回應過程,此時每個後台服務器都需要進行特別的地址轉換,以欺騙浏覽器客戶,認為它的回應為正確的回應。
同樣,這種方式的硬件實現方式也非常昂貴,但是會根據廠商的不同,具備不同的特殊功能,例如對SSL的支持等。
由於這種方式比較復雜,因此實現起來比較困難,它的起點也很高,當前情況下網站並不需要這麼大的處理能力。

比較上面的負載均衡方式,DNS最容易,也最常用,能夠滿足一般的需求。但如果需要進一步的管理和控制,可以選用反向代理方式或NAT方式,這兩種之間進行選擇主要依賴緩沖是不是很重要,最大的並發訪問數量是多少等條件。而如果網站上對負載影響很厲害的CGI程序是由網站自己開發的,也可以考慮在程序中自己使用Locaction來支持負載均衡。半中心化的負載分擔方式至少在國內當前的情況下還不需要。


web集群服務的負載均衡方案選擇與實現

web應用服務器集群系統,是由一群同時運行同一個web應用的服務器組成的集群系統,在外界看來,就像是一個服務器一樣。為了均衡集群服務器的負載,達到優化系統性能的目的,集群服務器將眾多的訪問請求,分散到系統中的不同節點進行處理。從而實現了更高的有效性和穩定性,而這也正是基於Web的企業應用所必須具備的特性。
高可靠性可以看作為系統的一種冗余設定。對於一個特定的請求,如果所申請的服務器不能進行處理的話,那麼其他的服務器能不能對之進行有效的處理呢?對於一個高效的系統,如果一個Web服務器失敗的話,其他的服務器可以馬上取代它的位置,對所申請的請求進行處理,而且這一過程對用戶來說,要盡可能的透明,使用戶察覺不到!
穩定性決定了應用程序能否支持不斷增長的用戶請求數量,它是應用程序自身的一種能力。穩定性是影響系統性能的眾多因素的一種有效的測量手段,包括機群系統所能支持的同時訪問系統的最大用戶數目以及處理一個請求所需要的時間。
在現有眾多的均衡服務器負載的方法中,廣泛研究並使用的是以下兩個方法:
DNS負載平衡的方法RR-DNS(Round-Robin Domain Name System)
負載均衡器
以下,我們將就這兩種方法進行討論。
DNS輪流排程 RR-DNS(Round-Robin Domain Name System)
域名服務器(Domain Name Server)中的數據文件將主機名字映射到其IP地址。當你在浏覽器中鍵入一個URL時(例如:www.loadbalancedsite.com),浏覽器則將請求發送到DNS,要求其返回相應站點的IP地址,這被稱為DNS查詢。當浏覽器獲得該站點的IP地址後,便通過該IP地址連接到所要訪問的站點,將頁面展現在用戶面前。
域名服務器(DNS)通常包含一個單一的IP地址與該IP地址所映射的站點的名稱的列表。在我們上面所假象的例子中,www.loadbalancedsite.com 這個站點的映射IP地址為203.24.23.3。
為了利用DNS均衡服務器的負載,對於同一個站點來講,在DNS服務器中同時擁有幾個不同的IP地址。這幾個IP地址代表集群中不同的機器,並在邏輯上映射到同一個站點名。通過我們的例子可以更好的理解這一點,www.loadbalancedsite.com將通過下面的三個IP地址發布到一個集群中的三台機器上:
203.34.23.3
203.34.23.4
203.34.23.5
在本例中,DNS服務器中包含下面的映射表:
www.loadbalancedsite.com 203.34.23.3
www.loadbalancedsite.com 203.34.23.4
www.loadbalancedsite.com 203.34.23.5
當第一個請求到達DNS服務器時,返回的是第一台機器的IP地址203.34.23.3;當第二個請求到達時,返回的是第二台機器的IP地址203.34.23.4,以此類推。當第四個請求到達時,第一台機器的IP地址將被再次返回,循環調用。
利用上述的DNS Round Robin技術,對於某一個站點的所有請求將被平均的分配到及群中的機器上。因此,在這種技術中,集群中的所有的節點對於網絡來說都是可見的。
DNS 輪流排程的優勢
DNS Round Robin的最大的優點就是易於實現和代價低廉:
代價低,易於建立。 為了支持輪流排程,系統管理員只需要在DNS服務器上作一些改動,而且在許多比較新的版本的DNS服務器上已經增加了這種功能。對於Web應用來說,不需要對代碼作任何的修改;事實上,Web應用本身並不會意識到負載均衡配置,即使在它面前。
簡單. 不需要網絡專家來對之進行設定,或在出現問題時對之進行維護。
DNS 輪流排程的缺點
這種基於軟件的負載均衡方法主要存在兩處不足,一是不實時支持服務期間的關聯,一是不具有高可靠性。
• 不支持服務器間的一致性。服務器一致性是負載均衡系統所應具備的一種能力,通過它,系統可以根據會話信息是屬於服務器端的,還是底層數據庫級別的,繼而將用戶的請求導向相應的服務器。而DNS輪流排程則不具備這種智能化的特性。它是通過cookie、隱藏域、重寫URL三種方法中的一種來進行相似的判斷的。當用戶通過上述基於文本標志的方法與服務器建立連接之後,其所有的後續訪問均是連接到同一個服務器上。問題是,服務器的IP是被浏覽器暫時存放在緩存中,一旦記錄過期,則需要重新建立連接,那麼同一個用戶的請求很可能被不同的服務器進行處理,則先前的所有會話信息便會丟失。
不支持高可靠性。設想一個具有N個節點的集群。如果其中的一個節點毀壞,那麼所有的訪問該節點的請求將不會有所回應,這是任何人都不願意看到的。比較先進的路由器可以通過每隔一定的時間間隔,對節點檢查,如果有毀壞的節點,則將之從列表中去除的方法,解決這個問題。但是,由於在Internet上,ISPs將眾多的DNS存放在緩存中,以節省訪問時間,因此,DNS的更新就會變得非常緩慢,以至於有的用戶可能會訪問一些已經不存在的站點,或者一些新的站點得不到訪問。所以,盡管DNS輪流排程在一定程度上解決了負載均衡問題,但這種狀況的改變並不是十分樂觀和有效的。
除了上面介紹的輪流排程方法外,還有三種DNS負載均衡處理分配方法,將這四種方法列出如下:
Ø Round robin (RRS): 將工作平均的分配到服務器 (用於實際服務主機性能一致)
Ø Least-connections (LCS): 向較少連接的服務器分配較多的工作(IPVS 表存儲了所有的活動的連接。用於實際服務主機性能一致。)
Ø Weighted round robin (WRRS): 向較大容量的服務器分配較多的工作。可以根據負載信息動態的向上或向下調整。 (用於實際服務主機性能不一致時)
Ø Weighted least-connections (WLC): 考慮它們的容量向較少連接的服務器分配較多的工作。容量通過用戶指定的砝碼來說明,可以根據裝載信息動態的向上或向下調整。(用於實際服務主機性能不一致時)

負載均衡器
負載均衡器通過虛擬IP地址方法,解決了輪流排程所面臨的許多問題。使用了負載均衡器集群系統,在外部看來,像是具有一個IP地址的單一服務器一樣,當然,這個IP地址是虛擬的,它映射了集群中的每一台機器的地址。所以,在某種程度上,負載均衡器是將整個集群的IP地址報漏給外部網絡。
當請求到達負載均衡器時,它會重寫該請求的頭文件,並將之指定到集群中的機器上。如果某台機器被從集群中移除了,請求不會別發往已經不存在的服務器上,因為所有的機器表面上都具有同一個IP地址,即使集群中的某個節點被移除了,該地址也不會發生變化。而且,internet上緩存的DNS條目也不再是問題了。當返回一個應答時,客戶端看到的只是從負載均衡器上所返回的結果。也就是說,客戶端操作的對象是負載均衡器,對於其更後端的操作,對客戶端來講,是完全透明的。
負載均衡器的優點
• 服務器一致性. 負載均衡器讀取客戶端發出的每一個請求中所包含的cookies或url解釋。基於所讀出的這些信息,負載均衡器就可以重寫報頭並將請求發往集群中合適的節點上,該節點維護著相應客戶端請求的會話信息。在HTTP通信中,負載均衡器可以提供服務器一致性,但並不是通過一個安全的途徑(例如:HTTPS)來提供這種服務。當消息被加密後(SSL),負載均衡器就不能讀出隱藏在其中的會話信息。
• 通過故障恢復機制獲得高可靠性. 故障恢復發生在當集群中某個節點不能處理請求,需將請求重新導向到其他節點時。主要有兩種故障恢復:
• 請求級故障恢復。當集群中的一個節點不能處理請求時(通常是由於down機),請求被發送到其他節點。當然,在導向到其他節點的同時,保存在原節點上的會話信息將會丟失。
• 透 明會話故障恢復。當一個引用失敗後,負載均衡器會將之發送到集群中其他的節點上,以完成操作,這一點對用戶來說是透明的。由於透明會話故障恢復需要節點具 備相應的操作信息,因此為了實現該功能,集群中的所有節點必須具有公共存儲區域或通用數據庫,存儲會話信息數據,以提供每個節點在進行單獨進程會話故障恢 復時所需要的操作信息。
• 統計計量。既然所有的Web應用請求都必須經過負載均衡系統,那麼系統就可以確定活動會話的數量,在任何實例訪問中的活動會話的數目,應答的次數,高峰負載次數,以及在高峰期和低谷期的會話的數目,還有其他更多的。所有的這些統計信息都可以被很好的用來調整整個系統的性能。
負載均衡器的缺點
硬件路由的缺點在於費用、復雜性以及單點失敗的。由於所有的請求均是通過一個單一的硬件負載均衡器來傳遞,因此,負載均衡器上的任何故障都將導致整個站點的崩潰。
HTTPS請求的負載均衡
正如上面所提到的,很難在那些來自HTTPS的請求上進行負載均衡和會話信息維護處理。因為,這些請求中的信息已經被加密了。負載均衡器沒有能力處理這類請求。不過,這裡有兩種方法可以解決這一問題:
代理網絡服務器
硬件SSL解碼器
代理服務器位於服務器集群之前,首先由它接受所有的請求並對之進行解密,然後將這些處理後的請求根據頭信息重新發往相應的節點上,這種方式不需要硬件上的支持,但會增加代理服務器的額外的負擔。
硬件SSL解碼器,則是在請求到達負載均衡器之前,先經由它進行解密處理。這種方式比代理服務器的處理速度要快捷一些。但代價也高,而且實現比較復雜。

基於linux的負載均衡技術
前言
當前,無論在企業網、園區網還是在廣域網如Internet上, 業務量的發展都超出了過去最樂觀的估計,上網熱潮風起雲湧,新的應用層出不窮,即使按照當時最優配置建設的網絡,也很快會感到吃不消。尤其是各個網絡的核 心部分,其數據流量和計算強度之大,使得單一設備根本無法承擔,而如何在完成同樣功能的多個網絡設備之間實現合理的業務量分配,使之不致於出現一台設備過 忙、而別的設備卻未充分發揮處理能力的情況,就成了一個問題,負載均衡機制也因此應運而生。
負 載均衡建立在現有網絡結構之上,它提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以 下任務:解決網絡擁塞問題,服務就近提供,實現地理位置無關性;為用戶提供更好的訪問質量;提高服務器響應速度;提高服務器及其他資源的利用效率;避免了 網絡關鍵部位出現單點失效。
定義
其實,負載均衡並非傳統意義上的“均衡”,一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改稱為“負載分擔”,也許更好懂一些。說得通俗一點,負載均衡在網絡中的作用就像輪流值日制度,把任務分給大家來完成,以免讓一個人累死累活。不過,這種意義上的均衡一般是靜態的,也就是事先確定的“輪值”策略。
與輪流值日制度不同的是,動態負載均衡通過一些工具實時地分析數據包,掌握網絡中的數據流量狀況,把任務合理分配出去。結構上分為本地負載均衡和地域負載均衡(全局負載均衡),前一種是指對本地的服務器集群做負載均衡,後一種是指對分別放置在不同的地理位置、在不同的網絡及服務器群集之間作負載均衡。
服務器群集中每個服務結點運行一個所需服務器程序的獨立拷貝,諸如Web、FTP、Telnet或e-mail服務器程序。對於某些服務(如運行在Web服務器上的那些服務)而言,程序的一個拷貝運行在群集內所有的主機上,而網絡負載均衡則將工作負載在這些主機間進行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網絡負載均衡允許網絡通訊量流到一個主機上,並在該主機發生故障時將通訊量移至其他主機。
負載均衡技術實現結構
在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。它主要完成以下任務:
◆解決網絡擁塞問題,服務就近提供,實現地理位置無關性
◆為用戶提供更好的訪問質量
◆提高服務器響應速度
◆提高服務器及其他資源的利用效率
◆避免了網絡關鍵部位出現單點失效
廣義上的負載均衡既可以設置專門的網關、負載均衡器,也可以通過一些專用軟件與協議來實現。對一個網絡的負載均衡應用,從網絡的不同層次入手,根據網絡瓶頸所在進行具體分析。從客戶端應用為起點縱向分析,參考OSI的分層模型,我們把負載均衡技術的實現分為客戶端負載均衡技術、應用服務器技術、高層協議交換、網絡接入協議交換等幾種方式。

負載均衡的層次
◆基於客戶端的負載均衡
這種模式指的是在網絡的客戶端運行特定的程序,該程序通過定期或不定期的收集服務器群的運行參數:CPU占用情況、磁盤IO、 內存等動態信息,再根據某種選擇策略,找到可以提供服務的最佳服務器,將本地的應用請求發向它。如果負載信息采集程序發現服務器失效,則找到其他可替代的 服務器作為服務選擇。整個過程對於應用程序來說是完全透明的,所有的工作都在運行時處理。因此這也是一種動態的負載均衡技術。
但 這種技術存在通用性的問題。因為每一個客戶端都要安裝這個特殊的采集程序;並且,為了保證應用層的透明運行,需要針對每一個應用程序加以修改,通過動態鏈 接庫或者嵌入的方法,將客戶端的訪問請求能夠先經過采集程序再發往服務器,以重定向的過程進行。對於每一個應用幾乎要對代碼進行重新開發,工作量比較大。
所以,這種技術僅在特殊的應用場合才使用到,比如在執行某些專有任務的時候,比較需要分布式的計算能力,對應用的開發沒有太多要求。另外,在采用JAVA構架模型中,常常使用這種模式實現分布式的負載均衡,因為java應用都基於虛擬機進行,可以在應用層和虛擬機之間設計一個中間層,處理負載均衡的工作。
◆應用服務器的負載均衡技術
如 果將客戶端的負載均衡層移植到某一個中間平台,形成三層結構,則客戶端應用可以不需要做特殊的修改,透明的通過中間層應用服務器將請求均衡到相應的服務結 點。比較常見的實現手段就是反向代理技術。使用反向代理服務器,可以將請求均勻轉發給多台服務器,或者直接將緩存的數據返回客戶端,這樣的加速模式在一定 程度上可以提升靜態網頁的訪問速度,從而達到負載均衡的目的。
使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,提供有益的性能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向代理服務器,這就不是一個輕松的任務。
反 向代理服務器本身雖然可以達到很高效率,但是針對每一次代理,代理服務器就必須維護兩個連接,一個對外的連接,一個對內的連接,因此對於特別高的連接請 求,代理服務器的負載也就非常之大。反向代理能夠執行針對應用協議而優化的負載均衡策略,每次僅訪問最空閒的內部服務器來提供服務。但是隨著並發連接數量 的增加,代理服務器本身的負載也變得非常大,最後反向代理服務器本身會成為服務的瓶頸。
◆基於域名系統的負載均衡
NCSA的可擴展Web是最早使用動態DNS輪詢技術的web系統。在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。在很多知名的web站點都使用了這個技術:包括早期的yahoo站點、163等。動態DNS輪詢實現起來簡單,無需復雜的配置和管理,一般支持bind8.2以上的類unix系統都能夠運行,因此廣為使用。
DNS負載均衡是一種簡單而有效的方法,但是存在不少問題。
首先域名服務器無法知道服務結點是否有效,如果服務結點失效,余名系統依然會將域名解析到該節點上,造成用戶訪問失效。
其次,由於DNS的數據刷新時間TTL(Time to LIVE)標志,一旦超過這個TTL,其他DNS服務器就需要和這個服務器交互,以重新獲得地址數據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使TTL盡量短,不同地方的DNS服務器能更新對應的地址,達到隨機獲得地址。然而將TTL設置得過短,將使DNS流量大增,而造成額外的網絡問題。
最後,它不能區分服務器的差異,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須盡量保證不同的客戶計算機能均勻獲得不同的地址。例如,用戶A可能只是浏覽幾個網頁,而用戶B可能進行著大量的下載,由於域名系統沒有合適的負載策略,僅僅是簡單的輪流均衡,很容易將用戶A的請求發往負載輕的站點,而將B的請求發往負載已經很重的站點。因此,在動態平衡特性上,動態DNS輪詢的效果並不理想。
◆高層協議內容交換技術
除了上述的幾種負載均衡方式之外,還有在協議內部支持負載均衡能力的技術,即URL交換或七層交換,提供了一種對訪問流量的高層控制方式。Web內容交換技術檢查所有的HTTP報頭,根據報頭內的信息來執行負載均衡的決策。例如可以根據這些信息來確定如何為個人主頁和圖像數據等內容提供服務,常見的有HTTP協議中的重定向能力等。
HTTP運行於TCP連接的最高層。客戶端通過恆定的端口號80的TCP服務直接連接到服務器,然後通過TCP連接向服務器端發送一個HTTP請求。協議交換根據內容策略來控制負載,而不是根據TCP端口號,所以不會造成訪問流量的滯留。
由於負載平衡設備要把進入的請求分配給多個服務器,因此,它只能在TCP連接時建立,且HTTP請求通過後才能確定如何進行負載的平衡。當一個網站的點擊率達到每秒上百甚至上千次時,TCP連接、HTTP報頭信息的分析以及進程的時延已經變得很重要了,要盡一切可能提高這幾各部份的性能。
在HTTP請求和報頭中有很多對負載平衡有用的信息。我們可以從這些信息中獲知客戶端所請求的URL和網頁,利用這個信息,負載平衡設備就可以將所有的圖像請求引導到一個圖像服務器,或者根據URL的數據庫查詢內容調用CGI程序,將請求引導到一個專用的高性能數據庫服務器。
如果網絡管理員熟悉內容交換技術,他可以根據HTTP報頭的cookie字段來使用Web內容交換技術改善對特定客戶的服務,如果能從HTTP請求中找到一些規律,還可以充分利用它作出各種決策。除了TCP連接表的問題外,如何查找合適的HTTP報頭信息以及作出負載平衡決策的過程,是影響Web內容交換技術性能的重要問題。如果Web服務器已經為圖像服務、SSL對話、數據庫事務服務之類的特殊功能進行了優化,那麼,采用這個層次的流量控制將可以提高網絡的性能。
◆網絡接入協議交換
大型的網絡一般都是由大量專用技術設備組成的,如包括防火牆、路由器、第3、4層交換機、負載均衡設備、緩沖服務器和Web服務器等。如何將這些技術設備有機地組合在一起,是一個直接影響到網絡性能的關鍵性問題。現在許多交換機提供第四層交換功能,對外提供一個一致的IP地址,並映射為多個內部IP地址,對每次TCP和UDP連 接請求,根據其端口號,按照即定的策略動態選擇一個內部地址,將數據包轉發到該地址上,達到負載均衡的目的。很多硬件廠商將這種技術集成在他們的交換機 中,作為他們第四層交換的一種功能來實現,一般采用隨機選擇、根據服務器的連接數量或者響應時間進行選擇的負載均衡策略來分配負載。由於地址轉換相對來講 比較接近網絡的低層,因此就有可能將它集成在硬件設備中,通常這樣的硬件設備是局域網交換機。
當前局域網交換機所謂的第四層交換技術,就是按照IP地址和TCP端 口進行虛擬連接的交換,直接將數據包發送到目的計算機的相應端口。通過交換機將來自外部的初始連接請求,分別與內部的多個地址相聯系,此後就能對這些已經 建立的虛擬連接進行交換。因此,一些具備第四層交換能力的局域網交換機,就能作為一個硬件負載均衡器,完成服務器的負載均衡。
由於第四層交換基於硬件芯片,因此其性能非常優秀,尤其是對於網絡傳輸速度和交換速度遠遠超過普通的數據包轉發。然而,正因為它是使用硬件實現的,因此也不夠靈活,僅僅能夠處理幾種最標准的應用協議的負載均衡,如HTTP 。當前負載均衡主要用於解決服務器的處理能力不足的問題,因此並不能充分發揮交換機帶來的高網絡帶寬的優點。
使用基於操作系統的第四層交換技術因此孕育而生。通過開放源碼的Linux,將第四層交換的核心功能做在系統的核心層,能夠在相對高效穩定的核心空間進行IP包的數據處理工作,其效率不比采用專有OS的硬件交換機差多少。同時又可以在核心層或者用戶層增加基於交換核心的負載均衡策略支持,因此在靈活性上遠遠高於硬件系統,而且造價方面有更好的優勢。
◆傳輸鏈路聚合
為了支持與日俱增的高帶寬應用,越來越多的PC機使用更加快速的鏈路連入網絡。而網絡中的業務量分布是不平衡的,核心高、邊緣低,關鍵部門高、一般部門低。伴隨計算機處理能力的大幅度提高,人們對多工作組局域網的處理能力有了更高的要求。當企業內部對高帶寬應用需求不斷增大時(例如Web訪問、文檔傳輸及內部網連接),局域網核心部位的數據接口將產生瓶頸問題,瓶頸延長了客戶應用請求的響應時間。並且局域網具有分散特性,網絡本身並沒有針對服務器的保護措施,一個無意的動作(像一腳踢掉網線的插頭)就會讓服務器與網絡斷開。
通 常,解決瓶頸問題采用的對策是提高服務器鏈路的容量,使其超出目前的需求。例如可以由快速以太網升級到千兆以太網。對於大型企業來說,采用升級技術是一種 長遠的、有前景的解決方案。然而對於許多企業,當需求還沒有大到非得花費大量的金錢和時間進行升級時,使用升級技術就顯得大材小用了。在這種情況下,鏈路 聚合技術為消除傳輸鏈路上的瓶頸與不安全因素提供了成本低廉的解決方案。
鏈路聚合技術,將多個線路的傳輸容量融合成一個單一的邏輯連接。當原有的線路滿足不了需求,而單一線路的升級又太昂貴或難以實現時,就要采用多線路的解決方案了。目前有5種鏈路聚合技術可以將多條線路“捆綁”起來。
同步IMUX系統工作在T1/E1的比特層,利用多個同步的DS1信道傳輸數據,來實現負載均衡。
IMA是另外一種多線路的反向多路復用技術,工作在信元級,能夠運行在使用ATM路由器的平台上。
用路由器來實現多線路是一種流行的鏈路聚合技術,路由器可以根據已知的目的地址的緩沖(cache)大小,將分組分配給各個平行的鏈路,也可以采用循環分配的方法來向線路分發分組。
多重鏈路PPP,又稱MP或MLP,是應用於使用PPP封裝數據鏈路的路由器負載平衡技術。MP可以將大的PPP數據包分解成小的數據段,再將其分發給平行的多個線路,還可以根據當前的鏈路利用率來動態地分配撥號線路。這樣做盡管速度很慢,因為數據包分段和附加的緩沖都增加時延,但可以在低速的線路上運行得很好。
還有一種鏈路聚合發生在服務器或者網橋的接口卡上,通過同一塊接口卡的多個端口映射到相同的IP地址,均衡本地的以太網流量以實現在服務器上經過的流量成倍增加。目前市面上的產品有intel和dlink的多端口網卡,,一般在一塊網卡上綁定4個100M以太端口,大大提高了服務器的網絡吞吐量。不過這項技術由於需要操作系統驅動層的支持,只能在win2000和linux下實現。
鏈路聚合系統增加了網絡的復雜性,但也提高了網絡的可靠性,使人們可以在服務器等關鍵LAN段的線路上采用冗余路由。對於IP系統,可以考慮采用VRRP(虛擬路由冗余協議)。VRRP可以生成一個虛擬缺省的網關地址,當主路由器無法接通時,備用路由器就會采用這個地址,使LAN通信得以繼續。總之,當主要線路的性能必需提高而單條線路的升級又不可行時,可以采用鏈路聚合技術。
◆帶均衡策略的服務器群集
如今,服務器必須具備提供大量並發訪問服務的能力,其處理能力和I/O能力已經成為提供服務的瓶頸。如果客戶的增多導致通信量超出了服務器能承受的范圍,那麼其結果必然是——宕機。顯然,單台服務器有限的性能不可能解決這個問題,一台普通服務器的處理能力只能達到每秒幾萬個到幾十萬個請求,無法在一秒鐘內處理上百萬個甚至更多的請求。但若能將10台這樣的服務器組成一個系統,並通過軟件技術將所有請求平均分配給所有服務器,那麼這個系統就完全擁有每秒鐘處理幾百萬個甚至更多請求的能力。這就是利用服務器群集實現負載均衡的最初基本設計思想。
早期的服務器群集通常以光纖鏡像卡進行主從方式備份。令服務運營商頭疼的是關鍵性服務器或應用較多、數據流量較大的服務器一般檔次不會太低,而服務運營商花了兩台服務器的錢卻常常只得到一台服務器的性能。通過地址轉換將多台服務器網卡的不同IP地址翻譯成一個VIP(Virtual IP)地址,使得每台服務器均時時處於工作狀態。原來需要用小型機來完成的工作改由多台PC服務器完成,這種彈性解決方案對投資保護的作用是相當明顯的——既避免了小型機剛性升級所帶來的巨大設備投資,又避免了人員培訓的重復投資。同時,服務運營商可以依據業務的需要隨時調整服務器的數量。
網絡負載均衡提高了諸如Web服務器、FTP服務器和其他關鍵任務服務器上的因特網服務器程序的可用性和可伸縮性。單一計算機可以提供有限級別的服務器可靠性和可伸縮性。但是,通過將兩個或兩個以上高級服務器的主機連成群集,網絡負載均衡就能夠提供關鍵任務服務器所需的可靠性和性能。
為了建立一個高負載的Web站點,必須使用多服務器的分布式結構。上面提到的使用代理服務器和Web服務器相結合,或者兩台Web服 務器相互協作的方式也屬於多服務器的結構,但在這些多服務器的結構中,每台服務器所起到的作用是不同的,屬於非對稱的體系結構。非對稱的服務器結構中每個 服務器起到的作用是不同的,例如一台服務器用於提供靜態網頁,而另一台用於提供動態網頁等等。這樣就使得網頁設計時就需要考慮不同服務器之間的關系,一旦 要改變服務器之間的關系,就會使得某些網頁出現連接錯誤,不利於維護,可擴展性也較差。
能 進行負載均衡的網絡設計結構為對稱結構,在對稱結構中每台服務器都具備等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。然後,可以通過某種技 術,將外部發送來的請求均勻分配到對稱結構中的每台服務器上,接收到連接請求的服務器都獨立回應客戶的請求。在這種結構中,由於建立內容完全一致的Web服務器並不困難,因此負載均衡技術就成為建立一個高負載Web站點的關鍵性技術。
總之,負載均衡是一種策略,它能讓多台服務器或多條鏈路共同承擔一些繁重的計算或I/O任務,從而以較低成本消除網絡瓶頸,提高網絡的靈活性和可靠性。

轉載地址:http://www.cnblogs.com/zhaoguihua/archive/2008/10/17/1313381.html
Copyright © Linux教程網 All Rights Reserved