入門到精通:負載均衡技術全攻略

 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專線故障引發的單點失效。 
  解決網絡擁塞問題,提升服務器響應速度,服務就近提供,達到更好的訪問質量。html

不一樣網絡層次上的網絡負載均衡 

  針對網絡上負載太重的不一樣瓶頸所在,從網絡的不一樣層次入手,咱們能夠採用相應的負載均衡技術來解決現有問題。 

  隨着帶寬增長,數據流量不斷增大,網絡核心部分的數據接口將面臨瓶頸問題,原有的單一線路將很難知足需求,並且線路的升級又過於昂貴甚至難以實現,這時就能夠考慮採用鏈路聚合(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報頭會佔用大量的系統資源,勢必會影響到系統的性能,在大量鏈接請求的狀況下,負載均衡設備自身容易成爲網絡總體性能的瓶頸。
web

負載均衡策略深刻剖析 

  在實際應用中,咱們可能不想僅僅是把客戶端的服務請求平均地分配給內部服務器,而無論服務器是否宕機。而是想使Pentium III服務器比Pentium II能接受更多的服務請求,一臺處理服務請求較少的服務器能分配到更多的服務請求,出現故障的服務器將再也不接受服務請求直至故障恢復等等。 

  選擇合適的負載均衡策略,使多個設備能很好的共同完成任務,消除或避免現有網絡負載分佈不均、數據流量擁擠反應時間長的瓶頸。在各負載均衡方式中,針對不一樣的應用需求,在OSI參考模型的第2、3、4、七層的負載均衡都有相應的負載均衡策略。 

  負載均衡策略的優劣及其實現的難易程度有兩個關鍵因素:1、負載均衡算法,2、對網絡系統情況的檢測方式和能力。 

  考慮到服務請求的不一樣類型、服務器的不一樣處理能力以及隨機選擇形成的負載分配不均勻等問題,爲了更加合理的把負載分配給內部的多個服務器,就須要應用相應的可以正確反映各個服務器處理能力及網絡狀態的負載均衡算法: 

  輪循均衡(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個包的速率轉發,這顯然是沒有任何做用的。 性能的優劣與負載均衡設備的處理能力、採用的均衡策略息息相關,而且有兩點須要注意:1、均衡方案對服務器羣總體的性能,這是響應客戶端鏈接請求速度的關鍵;2、負載均衡設備自身的性能,避免有大量鏈接請求時自身性能不足而成爲服務瓶頸。 有時咱們也能夠考慮採用混合型負載均衡策略來提高服務器羣的整體性能,如DNS負載均衡與NAT負載均衡相結合。另外,針對有大量靜態文檔請求的站點,也能夠考慮採用高速緩存技術,相對來講更節省費用,更能提升響應性能;對有大量ssl/xml內容傳輸的站點,更應考慮採用ssl/xml加速技術。 
  可擴展性:IT技術突飛猛進,一年之前最新的產品,如今或許已經是網絡中性能最低的產品;業務量的急速上升,一年前的網絡,如今須要新一輪的擴展。合適的均衡解決方案應能知足這些需求,能均衡不一樣操做系統和硬件平臺之間的負載,能均衡HTTP、郵件、新聞、代理、數據庫、防火牆和 Cache等不一樣服務器的負載,而且能以對客戶端徹底透明的方式動態增長或刪除某些資源。 

  靈活性:均衡解決方案應能靈活地提供不一樣的應用需求,知足應用需求的不斷變化。在不一樣的服務器羣有不一樣的應用需求時,應有多樣的均衡策略提供更普遍的選擇。 

  可靠性:在對服務質量要求較高的站點,負載均衡解決方案應能爲服務器羣提供徹底的容錯性和高可用性。但在負載均衡設備自身出現故障時,應該有良好的冗餘解決方案,提升可靠性。使用冗餘時,處於同一個冗餘單元的多個負載均衡設備必須具備有效的方式以便互相進行監控,保護系統儘量地避免遭受到重大故障的損失。 

  易管理性:無論是經過軟件仍是硬件方式的均衡解決方案,咱們都但願它有靈活、直觀和安全的管理方式,這樣便於安裝、配置、維護和監控,提升工做效率,避免差錯。在硬件負載均衡設備上,目前主要有三種管理方式可供選擇:1、命令行接口(CLI:Command Line Interface),可經過超級終端鏈接負載均衡設備串行接口來管理,也能telnet遠程登陸管理,在初始化配置時,每每要用到前者;2、圖形用戶接口(GUI:Graphical User Interfaces),有基於普通web頁的管理,也有經過Java Applet 進行安全管理,通常都須要管理端安裝有某個版本的瀏覽器;3、SNMP(Simple Network Management Protocol,簡單網絡管理協議)支持,經過第三方網絡管理軟件對符合SNMP標準的設備進行管理。
算法

相關文章
相關標籤/搜索