web負載均衡整理

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

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

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

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

 

負載均衡的概念 後端

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

 

       這是目前運用最爲普遍的雙節點雙應用的Active/Active模式。緩存

        支撐用戶業務的應用程序在正常狀態下分別在兩臺節點上運行,各自有本身的資源,好比IP地址、磁盤陣列上的卷或者文件系統。當某一方的系統或者資源出現故障時,就會將應用和相關資源切換到對方的節點上。安全

這種模式的最大優勢是不會有服務器的「閒置」,兩臺服務器在正常狀況下都在工做。但若是有故障發生致使切換,應用將放在同一臺服務器上運行,因爲服務器的處理能力有可能不能同時知足數據庫和應用程序的峯值要求,這將會出現處理能力不夠的狀況,下降業務響應水平。服務器

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

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

PCL爲此環境提供了徹底冗餘的服務器配置。這種模式的優缺點:架構

  • 缺點:Node2在Node1正常工做時是處於「閒置」狀態,形成服務器資源的浪費。
  • 優勢:當Node1發生故障時,Node2能徹底接管應用,而且能保證應用運行時的對處理能力要求。
 3、高可擴展性集羣
     這裏指帶有負載均衡策略(算法)的服務器羣集技術。帶負載均衡集羣爲企業需求提供了更實用的方案,它使負載能夠在計算機集羣中儘量平均地分攤處理。而須要均衡的多是應用程序處理負載或是網絡流量負載。該方案很是適合於運行同一組應用程序的節點。每一個節點均可以處理一部分負載,而且能夠在節點之間動態分配負載, 以實現平衡。對於網絡流量也是如此。一般,單個節點對於太大的網絡流量沒法迅速處理,這就須要將流量發送給在其它節點。還能夠根據每一個節點上不一樣的可用資源或網絡的特殊環境來進行優化。
  負載均衡集羣在多節點之間按照必定的策略(算法)分發網絡或計算處理負載。負載均衡創建在現有網絡結構之上,它提供了一種廉價有效的方法來擴展服務器帶寬,增長吞吐量,提升數據處理能力,同時又能夠避免單點故障。

 前面已經說過負載均衡的做用是在多個節點之間按照必定的策略(算法)分發網絡或計算處理負載。負載均衡能夠採用軟件和硬件來實現。通常的框架結構能夠參考下圖。

   

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

 上面是負載均衡經常使用的算法,基於以上負載均衡算法的使用方式上,又分爲以下幾種:
  一、DNS輪詢
   最先的負載均衡技術是經過DNS來實現的,在DNS中爲多個地址配置同一個名字,於是查詢這個名字的客戶機將獲得其中一個地址,從而使得不一樣的客戶訪問不一樣的服務器,達到負載均衡的目的。 
   DNS負載均衡是一種簡單而有效的方法,可是它不能區分服務器的差別,也不能反映服務器的當前運行狀態。當使用DNS負載均衡的時候,必須儘可能保證不一樣的 客戶計算機能均勻得到不一樣的地址。因爲DNS數據具有刷新時間標誌,一旦超過這個時間限制,其餘DNS服務器就須要和這個服務器交互,以從新得到地址數 據,就有可能得到不一樣IP地址。所以爲了使地址能隨機分配,就應使刷新時間儘可能短,不一樣地方的DNS服務器能更新對應的地址,達到隨機得到地址,然而將過 期時間設置得太短,將使DNS流量大增,而形成額外的網絡問題。DNS負載均衡的另外一個問題是,一旦某個服務器出現故障,即便及時修改了DNS設置,仍是 要等待足夠的時間(刷新時間)才能發揮做用,在此期間,保存了故障服務器地址的客戶計算機將不能正常訪問服務器
  二、反向代理服務器
    使用代理服務器,能夠將請求轉發給內部的服務器,使用這種加速模式顯然能夠提高靜態網頁的訪問速度。然而,也能夠考慮這樣一種技術,使用代理服務器將請求均勻轉發給多臺服務器,從而達到負載均衡的目的。 
   這種代理方式與普通的代理方式有所不一樣,標準代理方式是客戶使用代理訪問多個外部服務器,而這種代理方式是代理多個客戶訪問內部服務器,所以也被稱爲反向代理模式。雖然實現這個任務並不算是特別複雜,然而因爲要求特別高的效率,實現起來並不簡單。 
   使用反向代理的好處是,能夠將負載均衡和代理服務器的高速緩存技術結合在一塊兒,提供有益的性能。然而它自己也存在一些問題,首先就是必須爲每一種服務都專門開發一個反向代理服務器,這就不是一個輕鬆的任務。 
   代理服務器自己雖然能夠達到很高效率,可是針對每一次代理,代理服務器就必須維護兩個鏈接,一個對外的鏈接,一個對內的鏈接,所以對於特別高的鏈接請求, 代理服務器的負載也就很是之大。反向代理方式下能應用優化的負載均衡策略,每次訪問最空閒的內部服務器來提供服務。可是隨着併發鏈接數量的增長,代理服務 器自己的負載也變得很是大,最後反向代理服務器自己會成爲服務的瓶頸。  
  三、地址轉換網關

    支持負載均衡的地址轉換網關,能夠將一個外部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服務器不被暴露到網絡上。

 

3、軟負載——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 來簡單介紹一下。

  一、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 模式是性能最好的一種模式。

  二、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 的存在。

  三、Full-NAT

  不管是 DR 仍是 NAT 模式,不可避免的都有一個問題:LVS 和 RS 必須在同一個 VLAN 下,不然 LVS 沒法做爲 RS 的網關。

  這引起的兩個問題是:

  一、同一個 VLAN 的限制致使運維不方便,跨 VLAN 的 RS 沒法接入。

  二、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 上將再也不有任何限制,大大提升了運維部署的便利性。

  四、Session

  客戶端與服務端的通訊,一次請求可能包含多個 TCP 包,LVS 必須保證同一鏈接的 TCP 包,必須被轉發到同一臺 RS,不然就亂套了。爲了確保這一點,LVS 內部維護着一個 Session 的 Hash 表,經過客戶端的某些信息能夠找到應該轉發到哪一臺 RS 上。

  五、LVS 集羣化

  採用 Full-NAT 模式後,能夠搭建 LVS 的集羣,拓撲結構以下圖:

  六、容災

  容災分爲 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界面操做的,全局負載以及內容緩存也是它的顯著特色。

相關文章
相關標籤/搜索