web負載平衡整理

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   strong   io   

參考:http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166350.html

 http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166349.html

http://news.cnblogs.com/n/208124/ 

 http://network.51cto.com/art/201108/281452.htm

 

負載平衡的概念 

Web叢集是由多個同時運行同一個web應用的伺服器組成,在外界看來就像一個伺服器一樣,這多台伺服器共同來為客戶提供更高效能的服務。叢集更標準的定義是:一組相互獨立的伺服器在網路中表現為單一的系統,並以單一系統的模式加以管理,此單一系統為客戶工作站提供高可靠性的服務。
    而負載平衡的任務就是負責多個伺服器之間(叢集內)實現合理的任務分配,使這些伺服器(叢集)不會出現因某一台超負荷、而其他的伺服器卻沒有充分發揮處理能力的情況。負載平衡有兩個方面的含義:首先,把大量的並發訪問或資料流量分擔到多台節點上分別處理,減少使用者等待響應的時間;其次,單個高負載的運算分擔到多台節點上做平行處理,每個節點裝置處理結束後,將結果匯總,再返回給使用者,使得資訊系統處理能力可以得到大幅度提高
    因此可以看出,叢集和負載平衡有本質上的不同,它們是解決兩方面問題的不同方案,不要混淆。
    
    叢集技術可以分為三大類:
    1、高效能性叢集(HPC Cluster)
    2、高可用性設定組群(HA Cluster)
    3、高可擴充性叢集
    
 一、高效能性叢集(HPC Cluster)
     指以提高科學計算能力為目標的叢集技術。該叢集技術主要用於科學計算,這裡不打算介紹,如果感興趣可以參考相關的資料。
 二、高可用性設定組群(HA Cluster)
     指為了使群集的整體服務儘可能可用,減少服務宕機時間為目的的叢集技術。如果高可用性設定組群中的某節點發生了故障,那麼這段時間內將由其他節點代替它的工作。當然對於其他節點來講,負載相應的就增加了。
    為了提高整個系統的可用性,除了提高電腦各個組件的可靠性以外,一般情況下都會採用該叢集的方案。
    對於該叢集方案,一般會有兩種工作方式:
     ①主-主(Active-Active)工作方式
       這是最常用的叢集模型,它提供了高可用性,並且在只有一個節點時也能提供可以接受的效能,該模型允許最大程度的利用硬體資源。每個節點都通過網路對客戶機提供資源,每個節點的容量被定義好,使得效能達到最優,並且每個節點都可以在容錯移轉時臨時接管另一個節點的工作。所有的服務在容錯移轉後仍保持可用,但是效能通常都會下降。
     

 

       這是目前運用最為廣泛的雙節點雙應用的Active/Active模式。

        支撐使用者業務的應用程式在正常狀態下分別在兩台節點上運行,各自有自己的資源,比如IP地址、磁碟陣列上的卷或者檔案系統。當某一方的系統或者資源出現故障時,就會將應用和相關資源切換到對方的節點上。

這種模式的最大優點是不會有伺服器的“閑置”,兩台伺服器在正常情況下都在工作。但如果有故障發生導致切換,應用將放在同一台伺服器上運行,由於伺服器的處理能力有可能不能同時滿足資料庫和應用程式的峰值要求,這將會出現處理能力不夠的情況,降低業務響應水平。

     
     ②主-從(Active-Standby)工作方式
      為了提供最大的可用性,以及對效能最小的影響,主-從工作方式需要一個在正常工作時處於備用狀態的節點,主節點處理客戶機的請求,而備用節點處於空閑狀態,當主節點出現故障時,備用節點會接管主節點的工作,繼續為客戶機提供服務,並且不會有任何效能上影響。
          
  

  兩節點的Active/Standby模式是HA中最簡單的一種,兩台伺服器通過雙心跳線路組成一個叢集。應用Application聯合各個可選的系統組件如:外置共用的磁碟陣列、檔案系統和浮動IP地址等組成業務運行環境。

PCL為此環境提供了完全冗餘的伺服器配置。這種模式的優缺點:

  • 缺點:Node2在Node1正常工作時是處於“閑置”狀態,造成伺服器資源的浪費。
  • 優點:當Node1發生故障時,Node2能完全接管應用,並且能保證應用運行時的對處理能力要求。
 三、高可擴充性叢集
     這裡指帶有負載平衡策略(演算法)的伺服器叢集技術。帶負載平衡叢集為企業需求提供了更實用的方案,它使負載可以在電腦叢集中儘可能平均地分攤處理。而需要均衡的可能是應用程式處理負載或是網路流量負載。該方案非常適合於運行同一組應用程式的節點。每個節點都可以處理一部分負載,並且可以在節點之間動態分配負載, 以實現平衡。對於網路流量也是如此。通常,單個節點對於太大的網路流量無法迅速處理,這就需要將流量發送給在其它節點。還可以根據每個節點上不同的可用資源或網路的特殊環境來進行最佳化。
  負載平衡叢集在多節點之間按照一定的策略(演算法)分髮網絡或計算處理負載。負載平衡建立在現有網路結構之上,它提供了一種廉價有效方法來擴充伺服器頻寬,增加輸送量,提高資料處理能力,同時又可以避免單點故障。

 前面已經說過負載平衡的作用是在多個節點之間按照一定的策略(演算法)分髮網絡或計算處理負載。負載平衡可以採用軟體和硬體來實現。一般的架構結構可以參考。

   

 背景多個Web節點上面有相同的Web應用,使用者的訪問請求首先進入負載平衡分配節點(可能是軟體或者硬體),由它根據負載平衡策略(演算法)合理地分配給某個Web應用節點。每個Web節點相同的內容做起來不難,所以選擇負載平衡策略(演算法)是個關鍵問題。下面會專門介紹均衡演算法。
負載平衡的策略
  web負載平衡的作用就是把請求均勻的分配給各個節點,它是一種動態均衡,通過一些工具即時地分析資料包,掌握網路中的資料流量狀況,把請求理分配出去。對於不同的應用環境(如電子商務網站,它的計 算負荷大;再如網路資料庫應用,讀寫頻繁,伺服器的儲存子系統系統面臨很大壓力;再如視頻服務應用,資料轉送量大,網路介面負擔重壓。),使用的均衡策略(演算法)是不同的。 所以均衡策略(演算法)也就有了多種多樣的形式,廣義上的負載平衡既可以設定專門的網關、負載平衡器,也可以通過一些專用軟體與協議來實現。在OSI七層協議模型中的第二(資料連結層)、第三(網路層)、第四(傳輸層)、第七層(應用程式層)都有相應的負載平衡策略(演算法),在資料連結層上實現負載平衡的原理是根據資料包的目的MAC地址選擇不同的路徑;在網路層上可利用基於IP地址的分配方式將資料流疏通到多個節點;而傳輸層和應用程式層的交換(Switch),本身便是一種基於訪問流量的控制方式,能夠實現負載平衡。
   目前,基於負載平衡的演算法主要有三種:輪循(Round-Robin)、最小串連數(Least Connections First),和快速響應優先(Faster Response Precedence)。
  ①輪循演算法,就是將來自網路的請求依次分配給叢集中的節點進行處理。
  ②最小串連數演算法,就是為叢集中的每台伺服器設定一個記數器,記錄每個伺服器當前的串連數,負載平衡系統總是選擇當前串連數最少的伺服器分配任務。 這要比"輪循演算法"好很多,因為在有些場合中,簡單的輪循不能判斷哪個節點的負載更低,也許新的工作又被分配給了一個已經很忙的伺服器了。
  ③快速響應優先演算法,是根據群集中的節點的狀態(CPU、記憶體等主要處理部分)來分配任務。 這一點很難做到,事實上到目前為止,採用這個演算法的負載平衡系統還很少。尤其對於硬體負載平衡裝置來說,只能在TCP/IP協議方面做工作,幾乎不可能深入到伺服器的處理系統中進行監測。但是它是未來發展的方向。

 上面是負載平衡常用的演算法,基於以上負載平衡演算法的使用方式上,又分為如下幾種:
  1、DNS輪詢
   最早的負載平衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的伺服器,達到負載平衡的目的。 
   DNS負載平衡是一種簡單而有效方法,但是它不能區分伺服器的差異,也不能反映伺服器的當前運行狀態。當使用DNS負載平衡的時候,必須盡量保證不同的 客戶電腦能均勻獲得不同的地址。由於DNS資料具備重新整理時間標誌,一旦超過這個時間限制,其他DNS伺服器就需要和這個伺服器互動,以重新獲得地址數 據,就有可能獲得不同IP地址。因此為了使地址能隨機分配,就應使重新整理時間盡量短,不同地方的DNS伺服器能更新對應的地址,達到隨機獲得地址,然而將過 期時間設定得過短,將使DNS流量大增,而造成額外的網路問題。DNS負載平衡的另一個問題是,一旦某個伺服器出現故障,即使及時修改了DNS設定,還是 要等待足夠的時間(重新整理時間)才能發揮作用,在此期間,儲存了故障伺服器位址的客戶電腦將不能正常訪問伺服器
  2、反向 Proxy伺服器
    使用Proxy 伺服器,可以將請求轉寄給內部的伺服器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用Proxy 伺服器將請求均勻轉寄給多台伺服器,從而達到負載平衡的目的。 
   這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部伺服器,而這種代理方式是代理多個客戶訪問內部伺服器,因此也被稱為反向 Proxy模式。雖然實現這個任務並不算是特別複雜,然而由於要求特別高的效率,實現起來並不簡單。 
   使用反向 Proxy的好處是,可以將負載平衡和Proxy 伺服器的快取技術結合在一起,提供有益的效能。然而它本身也存在一些問題,首先就是必須為每一種服務都專門開發一個反向 Proxy伺服器,這就不是一個輕鬆的任務。 
   Proxy 伺服器本身雖然可以達到很高效率,但是針對每一次代理,Proxy 伺服器就必須維護兩個串連,一個對外的串連,一個對內的串連,因此對於特別高的串連請求, Proxy 伺服器的負載也就非常之大。反向 Proxy方式下能應用最佳化的負載平衡策略,每次訪問最閒置內部伺服器來提供服務。但是隨著並發串連數量的增加,代理服務 器本身的負載也變得非常大,最後反向 Proxy伺服器本身會成為服務的瓶頸。  
  3、地址轉換網關

    支援負載平衡的地址轉換網關,可以將一個外部IP地址映射為多個內部IP地址,對每次TCP串連請求動態使用其中一個內部地址,達到負載平衡的目的。很多 硬體廠商將這種技術整合在他們的交換器中,作為他們第四層交換的一種功能來實現,一般採用隨機播放、根據伺服器的串連數量或者回應時間進行選擇的負載平衡 策略來分配負載。由於地址轉換相對來講比較接近網路的低層,因此就有可能將它整合在硬體裝置中,通常這樣的硬體裝置是區域網路交換器。

 負載平衡軟實現

目前比較流行的就三類軟體負載平衡,LVS、Nginx和HAProxy。用的最多的還是LVS和Nginx這兩種。

◆LVS

平時我們說的LVS是Linux Virtual Server。這當然是基於Linux的開源軟體了,這就意味著它是免費的。它基本上能支援所有應用,因為lvs工作在4層,所以它可以對幾乎所有應用做負載平衡,包括http、資料庫、聊天室等等。同時,若跟硬體負載平衡相比它的缺點也不容忽視,LVS要求技術水平很高,操作上也比較複雜,配置也很繁瑣,沒有賴以保障的服務支援,穩定性來說也相對較低(人為和網路環境因素更多一些)。

◆Nginx

在這裡,我們介紹Nginx就需要跟LVS來對比了。LVS是工作在第四層,對網路的依賴性相對較大。然而Nginx是工作在第七層,對於網路的依賴性就小的多。與LVS相比,Nginx的安裝和配置也相對簡單一些,另外測試方面也更簡單,主要還是因為對網路依賴性小的緣故。Nginx有一點不好的就是應用要比LVS少。一般我們做軟體負載平衡的時候,通常會先考慮LVS,但是遇到比較複雜的網路環境時,用LVS可能會遇到很多麻煩,不妨就考慮嘗試一下Nginx。

◆HAProxy

使用HAProxy的人非常少,對其瞭解的也不多。通過官方的瞭解,HAProxy提供高可用性、負載平衡以及基於TCP和HTTP應用的代理,支援虛擬機器主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web網站,這些網站通常又需要會話保持或七層處理。(據說是可以工作在4-7層的。)並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中,同時可以保護你的web伺服器不被暴露到網路上。

 

三、軟負載——LVS

  LVS 是四層負載平衡,也就是說建立在 OSI 模型的第四層——傳輸層之上,傳輸層上有我們熟悉的 TCP/UDP,LVS 支援 TCP/UDP 的負載平衡。

  LVS 的轉寄主要通過修改 IP 位址(NAT 模式,分為源地址修改 SNAT 和目標地址修改 DNAT)、修改目標 MAC(DR 模式)來實現。

  那麼為什麼 LVS 是在第四層做負載平衡?

  首先 LVS 不像 HAProxy 等七層軟負載面向的是 HTTP 包,所以七層負載可以做的 URL 解析等工作,LVS 無法完成。其次,某次使用者訪問是與服務端建立串連後交換資料包實現的,如果在第三層網路層做負載平衡,那麼將失去「串連」的語義。軟負載面向的對象應該是一個已經建立串連的使用者,而不是一個孤零零的 IP 包。後面會看到,實際上 LVS 的機器代替真實的伺服器與使用者通過 TCP 三向交握建立了串連,所以 LVS 是需要關心「串連」層級的狀態的。

  LVS 的工作模式主要有 4 種:

  DR

  NAT

  TUNNEL

  Full-NAT

  這裡挑選常用的 DR、NAT、Full-NAT 來簡單介紹一下。

  1、DR

  請求由 LVS 接受,由真實提供服務的伺服器(RealServer, RS)直接返回給使用者,返回的時候不經過 LVS。

  DR 模式下需要 LVS 和綁定同一個 VIP(RS 通過將 VIP 綁定在 loopback 實現)。

  一個請求過來時,LVS 只需要將網路幀的 MAC 位址修改為某一台 RS 的 MAC,該包就會被轉寄到相應的 RS 處理,注意此時的源 IP 和目標 IP 都沒變,LVS 只是做了一下移花接木。

  RS 收到 LVS 轉寄來的包,鏈路層發現 MAC 是自己的,到上面的網路層,發現 IP 也是自己的,於是這個包被合法地接受,RS 感知不到前面有 LVS 的存在。

  而當 RS 返迴響應時,只要直接向源 IP(即使用者的 IP)返回即可,不再經過 LVS。

  DR 模式是效能最好的一種模式。

  2、NAT

  NAT(Network Address Translation)是一種外網和內網地址映射的技術。

  NAT 模式下,網路報的進出都要經過 LVS 的處理。LVS 需要作為 RS 的網關。

  當包到達 LVS 時,LVS 做目標地址轉換(DNAT),將目標 IP 改為 RS 的 IP。RS 接收到包以後,彷彿是用戶端直接發給它的一樣。

  RS 處理完,返迴響應時,源 IP 是 RS IP,目標 IP 是用戶端的 IP。

  這時 RS 的包通過網關(LVS)中轉,LVS 會做源地址轉換(SNAT),將包的源地址改為 VIP,這樣,這個包對用戶端看起來就彷彿是 LVS 直接返回給它的。用戶端無法感知到後端 RS 的存在。

  3、Full-NAT

  無論是 DR 還是 NAT 模式,不可避免的都有一個問題:LVS 和 RS 必須在同一個 VLAN 下,否則 LVS 無法作為 RS 的網關。

  這引發的兩個問題是:

  1、同一個 VLAN 的限制導致營運不方便,跨 VLAN 的 RS 無法接入。

  2、LVS 的水平擴充受到制約。當 RS 水平擴容時,總有一天其上的單點 LVS 會成為瓶頸。

  Full-NAT 由此而生,解決的是 LVS 和 RS 跨 VLAN 的問題,而跨 VLAN 問題解決後,LVS 和 RS 不再存在 VLAN 上的從屬關係,可以做到多個 LVS 對應多個 RS,解決水平擴容的問題。

  Full-NAT 相比 NAT 的主要改進是,在 SNAT/DNAT 的基礎上,加上另一種轉換,轉換過程如下:

  在包從 LVS 轉到 RS 的過程中,源地址從用戶端 IP 被替換成了 LVS 的內網 IP。

  內網 IP 之間可以通過多個交換器跨 VLAN 通訊。

  當 RS 處理完接受到的包,返回時,會將這個包返回給 LVS 的內網 IP,這一步也不受限於 VLAN。

  LVS 收到包後,在 NAT 模式修改源地址的基礎上,再把 RS 發來的包中的目標地址從 LVS 內網 IP 改為用戶端的 IP。

  Full-NAT 主要的思想是把網關和其下機器的通訊,改為了普通的網路通訊,從而解決了跨 VLAN 的問題。採用這種方式,LVS 和 RS 的部署在 VLAN 上將不再有任何限制,大大提高了營運部署的便利性。

  4、Session

  用戶端與服務端的通訊,一次請求可能包含多個 TCP 包,LVS 必須保證同一串連的 TCP 包,必須被轉寄到同一台 RS,否則就亂套了。為了確保這一點,LVS 內部維護著一個 Session 的 Hash 表,通過用戶端的某些資訊可以找到應該轉寄到哪一台 RS 上。

  5、LVS 叢集化

  採用 Full-NAT 模式後,可以搭建 LVS 的叢集,拓撲結構如:

  6、容災

  容災分為 RS 的容災和 LVS 的容災。

  RS 的容災可以通過 LVS 定期健康檢測實現,如果某台 RS 失去心跳,則認為其已經下線,不會在轉寄到該 RS 上。

  LVS 的容災可以通過主備+心跳的方式實現。主 LVS 失去心跳後,備 LVS 可以作為熱備立即替換。

  容災主要是靠 KeepAlived 來做的。

 

 

硬體負載平衡

 

硬體負載平衡在國外比較流行。硬體負載平衡解決方案是直接在伺服器和外部網路間安裝負載平衡裝置,這種裝置我們通常稱之為負載平衡器,由於專門的裝置完成專門的任務,獨立於作業系統,整體效能得到大量提高,加上多樣化的負載平衡策略,智能化的流量管理,可達到最佳的負載平衡需求。

下面就來瞭解一下市場中,比較主流的幾類產品。

◆F5 BIG-IP負載平衡器(LTM)

BIG-IP系列產品受到了使用者的廣泛認可,使用的人也很多。它的強大之處是基於簡單的Web管理介面,包括其他F5裝置也是如此。同時,這個負載平衡器還可以處理SSL認證。F5的主要特點之一是其廣域網路最佳化管理器,具備高可用的加密通道,同時具有廣域網路傳輸速度,最佳化與資料中心的傳輸道路。根據這一優勢,幾乎是自動地就產生了一個簡單的基於廣域網路的災難恢複解決方案。

F5 BIG-IP LTM的官方名稱叫做本地流量管理員,可以做4-7層負載平衡,具有負載平衡、應用交換、會話交換、狀態監控、智能網路位址轉譯、通用持久性、響應錯誤處理、IPv6網關、進階路由、智能連接埠鏡像、SSL加速、智能HTTP壓縮、TCP最佳化、第7層速率整形、內容緩衝、內容轉換、串連加速、快取、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆-包過濾、包消毒等功能。

◆思科

思科幾乎每個IOS路由器都具有負載平衡功能。這是非常令人激動的,因為我們不必去添加額外的硬體產品,基於現有裝置,只需要添加負載平衡規則就可以了。思科是路由器領域的老大,當然負載平衡功能只是其原因中的一個。

思科的IOS包括很多負載平衡功能,比如連接埠綁定,會話交換,TCP最佳化,NAT和伺服器負載平衡器演算法,等等。

思科的服務非常到位,在國外,不少技術人員都說,如果你購買了思科的產品就永遠不會被公司解僱。

◆Radware的AppDirector系列

Radware的AppDirector (AD)在伺服器負載平衡應用方面可以做到本地的伺服器負載平衡(AD)和廣域的全域伺服器負載平衡(AD -Global)。它的單價比較便宜,並具有高擴充性和智能化服務。同時也擁有網路監控和檢測功能,全域負載平衡和緩解一定的DDoS攻擊等。

另外,Radware裝置還有一些特點是比較容易更新和升級,能夠感知應用服務,智能化是其宣傳的理念之一,也是這個產品的一大特色。

◆梭子魚負載平衡

梭子魚的負載平衡器的最大特點是包含了網路安全功能。它具有入侵防禦功能,而不是單單檢測入侵。這能夠更全面地保護你的網路,即使你錯過了一個關鍵的更新和漏洞的修補,梭子魚的更新服務也能讓你的系統自動地更新起來。

此外,梭子魚的負載平衡也是Web介面操作的,全域負載以及內容緩衝也是它的顯著特點。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.