實現負載均衡的幾種方式

負載均衡(Load Balance)是集羣技術(Cluster)的一種應用。負載均衡可以將工作任務分攤到多個處理單元,從而提高併發處理能力。目前最常見的負載均衡應用是Web負載均衡。根據實現的原理不同,常見的web負載均衡技術包括:DNS輪詢、IP負載均衡和CDN。其中IP負載均衡可以使用硬件設備或軟件方式來實現。

 

什麼是web負載均衡

 

服務器集羣(Cluster)使得多個服務器節點能夠協同工作,根據目的的不同,服務器集羣可以分爲:

  • 高性能集羣:將單個重負載的請求分散到多個節點進行處理,最後再將處理結果進行彙總
  • 高可用集羣:提高冗餘單元,避免單點故障
  • 負載均衡集羣:將大量的併發請求分擔到多個處理節點。由於單個處理節點的故障不影響整個服務,負載均衡集羣同時也實現了高可用性。

一般提到的負載均衡(Load Balance),是指實現負載均衡集羣。負載均衡實現了橫向擴展(Scale Out),避免縱向的升級(Scale Up)換代。

本文中的web負載均衡,特指能夠分擔web請求(http,https等)的負載均衡技術。

 

基本原理

 

任何的負載均衡技術都要想辦法建立某種一對多的映射機制:一個請求的入口映射到多個處理請求的節點,從而實現分而治之(Divide and Conquer)。

這種映射機制使得多個物理存在對外體現爲一個虛擬的整體,對服務的請求者屏蔽了內部的結構。

採用不同的機制建立映射關係,可以形成不同的負載均衡技術,常見的包括:

  • DNS輪詢
  • CDN
  • IP負載均衡

 

DNS

 

DNS輪詢是最簡單的負載均衡方式。以域名作爲訪問入口,通過配置多條DNS A記錄使得請求可以分配到不同的服務器。

DNS輪詢沒有快速的健康檢查機制,而且只支持WRR的調度策略導致負載很難“均衡”,通常用於要求不高的場景。並且DNS輪詢方式直接將服務器的真實地址暴露給用戶,不利於服務器安全。

CDN

CDN(Content Delivery Network,內容分發網絡)。通過發佈機制將內容同步到大量的緩存節點,並在DNS服務器上進行擴展,找到裏用戶最近的緩存節點作爲服務提供節點。

因爲很難自建大量的緩存節點,所以通常使用CDN運營商的服務。目前國內的服務商很少,而且按流量計費,價格也比較昂貴。

 

IP負載均衡

 

IP負載均衡是基於特定的TCP/IP技術實現的負載均衡。比如NAT、DR、Turning等。是最經常使用的方式。關於其原理,可以參考下面另一篇文章:lvs中的負載均衡方式

IP負載均衡可以使用硬件設備,也可以使用軟件實現。硬件設備的主要產品是F5-BIG-IP-GTM(簡稱F5),軟件產品主要有LVS、HAProxy、NginX。其中LVS、HAProxy可以工作在4-7層,NginX工作在7層。關於三者的簡單對比,可以參考這裏

硬件負載均衡設備可以將核心部分做成芯片,性能和穩定性更好,而且商用產品的可管理性、文檔和服務都比較好。唯一的問題就是價格。

軟件負載均衡通常是開源軟件。自由度較高,但學習成本和管理成本會比較大。

 

F5

 

F5的全稱是F5-BIG-IP-GTM,是最流行的硬件負載均衡設備,其併發能力達到百萬級。F5的主要特性包括:

  1. 多鏈路的負載均衡和冗餘

    可以接入多條ISP鏈路,在鏈路之間實現負載均衡和高可用。

  2. 防火牆負載均衡

    F5具有異構防火牆的負載均衡與故障自動排除能力。

  3. 服務器負載均衡

    這是F5最主要的功能,F5可以配置針對所有的對外提供服務的服務器配置Virtual Server實現負載均衡、健康檢查、回話保持等。

  4. 高可用

    F5設備自身的冗餘設計能夠保證99.999%的正常運行時間,雙機F5的故障切換時間爲毫秒級。

    使用F5可以配置整個集羣的鏈路冗餘和服務器冗餘,提高可靠的健康檢查機制,以保證高可用。

  5. 安全性

    與防火牆類似,F5採用缺省拒絕策略,可以爲任何站點增加額外的安全保護,防禦普通網絡攻擊,包括DDoS、IP欺騙、SYN攻擊、teartop和land攻擊、ICMP攻擊等。

  6. 易於管理

    F5提供HTTPS、SSH、Telnet、SNMP等多種管理方式,包含詳盡的實時報告和歷史紀錄報告。同時還提供二次開發包(i-Control)。

  7. 其他

    F5還提供了SSL加速、軟件升級、IP地址過濾、帶寬控制等輔助功能。

 

LVS

 

LVS(Linux Virtual Server, linux虛擬服務器),是章文嵩博士開發的開放軟件,目前已經集成到Linux內核中。

基於不同的網絡技術,LVS支持多種負載均衡機制。包括:VS/NAT(基於網絡地址轉換技術)、VS/TUN(基於IP隧道技術)和VS/DR(基於直接路由技術)。

此外,爲了適應不同的需要,淘寶開發了VS/FULLNAT,從本質上來說也是基於網絡地址轉換技術。最近還有一個基於VS/FULLNAT的DNAT模塊。

不管使用哪種機制,LVS都不直接處理請求,而是將請求轉發到後面真正的服務器(Real Server)。不同的機制,決定了響應包如何返回到客戶端。

 

VS/NAT

 

NAT(Network Address Translation,網絡地址轉換)也叫做網絡掩蔽或者IP掩蔽,是將IP 數據包頭中的IP 地址轉換爲另一個IP 地址的過程。

NAT能夠將私有(保留)地址轉化爲合法IP地址,通常用於一個公共IP地址和多個內部私有IP地址直接的映射,廣泛應用於各種類型Internet接入方式和各種類型的網絡中。

通過使用NAT將目的地址轉換到多個服務器的方式,可以實現負載均衡,同時能夠隱藏並保護內部服務器,避免來自網絡外部的攻擊。商用負載均衡設備如Cisco的LocalDirector、F5的Big/IP和Alteon的ACEDirector都是基於NAT方法。

VS/NAT(Virtual Server via Network Address Translation)是基於NAT技術實現負載均衡的方法。其架構如下圖所示:

 

  1. 客戶通過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器
  2. 調度器根據連接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最後將修改後的報文發送給選出的服務器。

  3. 真實的服務器處理請求,並將響應報文發到調度器。

  4. 調度器將報文的源地址和源端口改爲Virtual IP Address和相應的端口
  5. 調度器將修改過的報文發給用戶

 

在VS/NAT的集羣系統中,請求和響應的數據報文都需要通過負載調度器,當真實服務器的數目在10臺和20臺之間時,負載調度器將成爲整個集羣系統的新瓶頸。大多數Internet服務都有這樣的特點:請求報文較短而響應報文往往包含大量的數據。如果能將請求和響應分開處理,即在負載調度器中只負責調度請求而響應直接返回給客戶,將極大地提高整個集羣系統的吞吐量。比如IP隧道技術。

 

VS/TUN

 

IP Tunneling(IP隧道)技術,又稱爲IP封裝技術(IP encapsulation),是一種在網絡之間傳遞數據的方式。可以將一個IP報文封裝到另一個IP報文(可能是不同的協議)中,並轉發到另一個IP地址。IP隧道主要用於移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。

VS/TUN(Virtual Server via IP Tunneling)是基於隧道技術實現負載均衡的方法。其架構如下圖所示:

VS/TUN與VS/NAT的工作機制大體上相同,區別在於:

  1. 調度器轉發報文的時候進行了協議的二次封裝,真實的服務器接收到請求後先進行解包。過程如下圖所示:

  2. 響應報文從後端服務器直接返回給客戶,不需要經過調度器。

 

 

VS/DR

 

DR(Direct Routing, 直接路由), 路由器學習路由的方法之一。路由器對於自己的網絡接口所直連的網絡之間的通信,可以自動維護路由表,而且不需要進行路由計算。

直接路由通常用在一個三層交換機連接幾個VLAN的情況,只要設置直接路由VLAN之間就可以通信,不需要設置其他的路由方式。

VS/DR(Virtual Server via Direct Routing)是基於直接路由實現負載均衡的方法。其架構如下圖所示:

 

跟VS/TUN方法相同,VS/DR利用大多數Internet服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集羣系統的吞吐量。

VS/DR要求調度器和服務器組都必須在物理上有一個網卡通過不分段的局域網相連,即通過交換機或者高速的HUB相連,中間沒有隔有路由器。VIP地址爲調度器和服務器組共享,調度器配置的VIP地址是對外可見的,用於接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用於處理目標地址爲VIP的網絡請求。

VS/DR的整個過程與VS/TUN非常類似,不同之處在於調度器不對請求包進行二次封裝,只是將目標MAC地址更改爲經過調度算法選出的目標服務器的MAC地址。如下圖:

 

 

三種方法的優缺點比較

 

VS/NAT

  • 優點

    • 對後端服務器的操作系統無要求
    • 只需要一個IP地址配置在調度器上,服務器組可以用私有的IP地址。
    • 支持端口映射
  • 缺點

    • 請求和響應報文都需要通過調度器,伸縮能力有限(10+)
    • 要求服務器和調度器在同一個VLAN
    • 需要將服務器的默認網關指向調度器
    • 對於那些將IP地址或者端口號在報文數據中傳送的網絡服務,需要編寫相應的應用模塊來轉換報文數據中的IP地址或者端口號

VS/TUN

  • 優點

    • 不需要調度應答報文,性能高
    • 服務器和調度器可以不在同一個VLAN
    • 支持廣域負載均衡
  • 缺點

    • 所有的服務器必須支持“IP Tunneling”協議,要安裝內核模塊(比如IPIP等),配置複雜
    • 有建立IP隧道的開銷
    • 服務器上直接綁定虛擬IP(Virtaul IP),風險很大
    • 服務器需要聯通外網
    • 不支持端口映射

VS/DR

  • 優點

    • 與VS/TUN相比,沒有IP隧道的開銷,性能最好
  • 缺點

    • 要求調度器與服務器都有一塊網卡連在同一物理網段(同一個VLAN)上
    • 要求服務器網絡設備(或者設備別名)不作ARP響應,或者能將報文重定向(Redirect)到本地的Socket端口上
    • 服務器上直接綁定虛擬IP(Virtaul IP),風險很大
    • 不支持端口映射

 

VS/FULLNAT

 

如上節所述,前面三種傳統的負載均衡機制各自存在一些不足。

VS/FULLNAT是爲了解決這些不足而新開發的一種轉發模式。VS/FULLNAT的特點是:

  1. 調度器和服務器可以跨VLAN通信,不需要配置在同一個網段
  2. 請求和應答報文都經過調度器,服務器不需要綁定虛擬IP

VS/FULLNAT這兩個特點可以簡化網絡拓撲,降低運維成本和風險。

 

如何選擇

 

    1. 如果人少錢多,不在乎性能的損耗願意多買服務器,同時希望最大程度較少運維的工作量,可以選擇FULLNAT
    2. 很大衆的方式是用DR,沒有太多的優點但也沒有太多的缺點
    3. 如果要搞廣域網負載均衡,那就用TUN吧
    4. 個人感覺NAT不是爲了互聯網用的。小併發的實驗性應用或者用在非web場合,比如mysql集羣等。當然,如果需要端口映射,必須使用NAT方式
    5.  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章