多臺服務器負載均衡,怎麼選擇?

用戶68852507


回答這個問題之前,我們先來了解一下什麼是負載均衡:

由於目前現有網絡的各個核心部分隨著業務量的提高,訪問量和數據流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的服務器設備根本無法承擔。在此情況下,如果扔掉現有設備去做大量的硬件升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又將導致再一次硬件升級的高額成本投入,甚至性能再卓越的設備也不能滿足當前業務量增長的需求。針對此情況而衍生出來的一種廉價有效透明的方法以擴展現有網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力、提高網絡的靈活性和可用性的技術就是負載均衡(Load Balance)。

一、負載均衡技術

瞭解了負載均衡的基本概念後,再看看負載均衡的幾個主要技術應用:

1、DNS負載均衡:最早的負載均衡技術是通過DNS來實現的,在DNS中為多個地址配置同一個名字,因而查詢這個名字的客戶機將得到其中一個地址,從而使得不同的客戶訪問不同的服務器,達到負載均衡的目的。DNS負載均衡是一種簡單而有效的方法,但是它不能區分服務器的差異,也不能反映服務器的當前運行狀態。

2、代理服務器負載均衡:使用代理服務器,可以將請求轉發給內部的服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。然而,也可以考慮這樣一種技術,使用代理服務器將請求均勻轉發給多臺服務器,從而達到負載均衡的目的。

3、地址轉換網關負載均衡:支持負載均衡的地址轉換網關,可以將一個外部IP地址映射為多個內部IP地址,對每次TCP連接請求動態使用其中一個內部地址,達到負載均衡的目的。

4、協議內部支持負載均衡:除了這三種負載均衡方式之外,有的協議內部支持與負載均衡相關的功能,例如HTTP協議中的重定向能力等,HTTP運行於TCP連接的最高層。

5、NAT負載均衡 NAT(Network Address Translation 網絡地址轉換):簡單地說就是將一個IP地址轉換為另一個IP地址,一般用於未經註冊的內部地址與合法的、已獲註冊的Internet IP地址間進行轉換。適用於解決Internet IP地址緊張、不想讓網絡外部知道內部網絡結構等的場合下。

6、反向代理負載均衡:普通代理方式是代理內部網絡用戶訪問internet上服務器的連接請求,客戶端必須指定代理服務器,並將本來要直接發送到internet上服務器的連接請求發送給代理服務器處理。反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。反向代理負載均衡技術是把將來自internet上的連接請求以反向代理的方式動態地轉發給內部網絡上的多臺服務器進行處理,從而達到負載均衡的目的。

7、混合型負載均衡:在有些大型網絡,由於多個服務器群內硬件設備、各自的規模、提供的服務等的差異,我們可以考慮給每個服務器群採用最合適的負載均衡方式,然後又在這多個服務器群間再一次負載均衡或群集起來以一個整體向外界提供服務(即把這多個服務器群當做一個新的服務器群),從而達到最佳的性能。我們將這種方式稱之為混合型負載均衡。此種方式有時也用於單臺均衡設備的性能不能滿足大量連接請求的情況下。

二、軟件版負載均衡概述

指在服務器的操作系統上,安裝軟件,來實現負載均衡,如Nginx負載均衡。它的優點是基於特定環境、配置簡單、使用靈活、成本低廉,可以滿足大部分的負載均衡需求。

(1)軟件負載均衡主要有Nginx,LVS

Nginx是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 可以說Nginx 是目前使用最為廣泛的HTTP軟負載均衡器,同時因高效的性能、穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名於業界。像騰訊、淘寶、新浪等大型門戶及商業網站都採用Nginx進行HTTP網站的數據分流。

(2)Nginx的功能特點

1、工作在網絡的7層之上,可以做一些分流策略策略。

2、Nginx對網絡的依賴比較小。

3、Nginx安裝和配置比較簡單,測試方便。

4、可以承擔高的負載壓力且穩定,一般能支撐超過1萬次的併發。

5、Nginx可以通過端口檢測到服務器內部的故障,提示負載節點是否正常。;

6、不支持Session的保持、對Big request header的支持不是很好,另外默認的只有Round-robin和IP-hash兩種負載均衡算法。

(3)Nginx的原理

Nginx採用的是反向代理技術,代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給網絡上請求連接的客戶端,此時代理服務器對外就表現的,就像為一個服務器。反向代理負載均衡技術是把來自網絡上的連接請求以反向代理的方式動態地轉發給內部網絡上的多臺服務器進行處理,從而達到負載均衡的目的。


三、硬件負載均衡

直接在服務器和外部網絡間安裝負載均衡硬件設備,這種設備我們通常稱之為負載均衡器。由專門的設備完成,獨立於操作系統,整體性能得到大量提高,加上更多的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。 一般來說,硬件負載均衡在功能、性能上優於軟件方式,不過成本昂貴,很常見的有 F5負載均衡器。當然除了F5之外,國內的深信服也有相應的負載均衡產品,並且應用越來越廣泛。此處以F5舉例說明一下其功能參數。

(1)F5負載均衡器介紹

F5負載均衡器是應用交付網絡的全球領導者F5 Networks公司提供的一個負載均衡器專用設備,F5 BIG-IP LTM 的官方名稱叫做本地流量管理器,可以做4-7層負載均衡,具有負載均衡、應用交換、會話交換、狀態監控、智能網絡地址轉換、通用持續性、響應錯誤處理、IPv6網關、高級路由、智能端口鏡像、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、內容緩衝、內容轉換、連接加速、高速緩存、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆—包過濾、包消毒等功能。

(2)F5負載均衡器的功能介紹:

1.F5 BIG-IP提供12種靈活的算法將所有流量均衡的分配到各個服務器,而面對用戶而言,只是一臺虛擬服務器。

2.F5 BIG-IP可以確認應用程序能否對請求返回對應的數據。假如F5 BIG-IP後面的某一臺服務器發生服務停止、死機等故障,F5會檢查出來並將該服務器標識為宕機,從而不將用戶的訪問請求傳送到該臺發生故障的服務器上。這樣,只要其它的服務器正常,用戶的訪問就不會受到影響。宕機一旦修復,F5 BIG-IP就會自動查證應用已能對客戶請求作出正確響應並恢復向該服務器傳送。

3.F5 BIG-IP具有動態Session的會話保持功能。

4.F5 BIG-IP的iRules功能可以做內容過濾,根據不同的域名、URL,將訪問請求傳送到不同的服務器上。

四、硬件負載均衡與軟件負載均衡優缺點對比:

硬件負載均衡方式(F5)

優點:能夠直接通過智能交換機實現,處理能力更強,而且與系統無關,負載性能強更適用於一大堆設備、大訪問量、簡單應用

缺點:成本高,除設備價格高昂,而且配置冗餘.很難想象後面服務器做一個集群,但最關鍵的負載均衡設備卻是單點配置;無法有效掌握服務器及應用狀態.

硬件負載均衡,一般都不管實際系統與應用的狀態,而只是從網絡層來判斷,所以有時候系統處理能力已經不行了,但網絡可能還來得及反應(這種情況比較典型,比如應用服務器後面內存已經佔用很多,但還沒有徹底不行,如果網絡傳輸量不大就未必在網絡層能反映出來)

軟件負載均衡方式(Nginx)

優點:基於系統與應用的負載均衡,能夠更好地根據系統與應用的狀況來分配負載。這對於複雜應用是很重要的,性價比高,實際上如果幾臺服務器,用F5之類的硬件產品顯得有些浪費,而用軟件就要合算得多,因為服務器同時還可以跑應用做集群等。

缺點:負載能力受服務器本身性能的影響,性能越好,負載能力越大。

綜述:對我們系統環境來說,由於負載均衡器本身不需要對數據進行處理,性能瓶頸更多的是在於後臺服務器,通常採用軟負載均衡器已非常夠用,可以無逢的和我們系統平臺相結合。

硬件負載均衡應用場景,更多的是大量後臺服務器,大量數據處理分發,比如每秒上十萬的數據併發,這樣需要選擇一個合適的硬件負載均衡設備。


神行科技


一般用的就用簡單的輪詢就好了

調度算法

靜態方法:僅根據算法本身實現調度;實現起點公平,不管服務器當前處理多少請求,分配的數量一致

動態方法:根據算法及後端RS當前的負載狀況實現調度;不管以前分了多少,只看分配的結果是不是公平

靜態調度算法(static Schedu)(4種):

(1)rr (Round Robin) :輪叫,輪詢

說明:輪詢調度算法的原理是每一次把來自用戶的請求輪流分配給內部中的服務器,從1開始,直到N(內部服務器個數),然後重新開始循環。算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。缺點:是不考慮每臺服務器的處理能力。

(2)wrr (Weight Round Robin) :加權輪詢(以權重之間的比例實現在各主機之間進行調度)

說明:由於每臺服務器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據服務器的不同處理能力,給每個服務器分配不同的權值,使其能夠接受相應權值數的服務請求。

(3)sh (Source Hashing) : 源地址hash實現會話綁定sessionaffinity

說明:簡單的說就是有將同一客戶端的請求發給同一個real server,源地址散列調度算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的並且沒有超負荷,將請求發送到該服務器,否則返回空。它採用的散列函數與目標地址散列調度算法的相同。它的算法流程與目標地址散列調度算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址。

(4)dh : (Destination Hashing) : 目標地址hash

說明:將同樣的請求發送給同一個server,一般用於緩存服務器,簡單的說,LB集群后面又加了一層,在LB與realserver之間加了一層緩存服務器,當一個客戶端請求一個頁面時,LB發給cache1,當第二個客戶端請求同樣的頁面時,LB還是發給cache1,這就是我們所說的,將同樣的請求發給同一個server,來提高緩存的命中率。目標地址散列調度算法也是針對目標IP地址的負載均衡,它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

動態調度算法(dynamic Schedu)(6種):

(1)lc (Least-Connection Scheduling): 最少連接

說明:最少連接調度算法是把新的連接請求分配到當前連接數最小的服務器,最小連接調度是一種動態調度短算法,它通過服務器當前所活躍的連接數來估計服務器的負載均衡,調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1,當連接中止或超時,其連接數減一,在系統實現時,我們也引入當服務器的權值為0時,表示該服務器不可用而不被調度。此算法忽略了服務器的性能問題,有的服務器性能好,有的服務器性能差,通過加權重來區分性能,所以有了下面算法wlc。

簡單算法:active*256+inactive (誰的小,挑誰)

(2)wlc (Weighted Least-Connection Scheduling):加權最少連接

加權最小連接調度算法是最小連接調度的超集,各個服務器用相應的權值表示其處理性能。服務器的缺省權值為1,系統管理員可以動態地設置服務器的權限,加權最小連接調度在調度新連接時儘可能使服務器的已建立連接數和其權值成比例。由於服務器的性能不同,我們給性能相對好的服務器,加大權重,即會接收到更多的請求。

簡單算法:(active*256+inactive)/weight(誰的小,挑誰)

(3)sed (shortest expected delay scheduling):最少期望延遲

說明:不考慮非活動連接,誰的權重大,我們優先選擇權重大的服務器來接收請求,但會出現問題,就是權重比較大的服務器會很忙,但權重相對較小的服務器很閒,甚至會接收不到請求,所以便有了下面的算法nq。

基於wlc算法,簡單算法:(active+1)*256/weight (誰的小選誰)

(4).nq (Never Queue Scheduling): 永不排隊

說明:在上面我們說明了,由於某臺服務器的權重較小,比較空閒,甚至接收不到請求,而權重大的服務器會很忙,所此算法是sed改進,就是說不管你的權重多大都會被分配到請求。簡單說,無需隊列,如果有臺real server的連接數為0就直接分配過去,不需要在進行sed運算。

(5).LBLC(Locality-Based Least Connections) :基於局部性的最少連接

說明:基於局部性的最少連接算法是針對請求報文的目標IP地址的負載均衡調度,主要用於Cache集群系統,因為Cache集群中客戶請求報文的目標IP地址是變化的,這裡假設任何後端服務器都可以處理任何請求,算法的設計目標在服務器的負載基本平衡的情況下,將相同的目標IP地址的請求調度到同一個臺服務器,來提高服務器的訪問局部性和主存Cache命中率,從而調整整個集群系統的處理能力。

(6).LBLCR(Locality-Based Least Connections with Replication) :基於局部性的帶複製功能的最少連接

說明:基於局部性的帶複製功能的最少連接調度算法也是針對目標IP地址的負載均衡,該算法根據請求的目標IP地址找出該目標IP地 址對應的服務器組,按“最小連接”原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載,則按“最小連接”原則從這個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除, 以降低複製的程度。


Me範


具體要看代理的後端服務是否是無狀態的服務?

若無狀態,即不需要使用會話保持,使用輪詢策略即可。

若有狀態,即需要會話保持,則需要使用基於源IP地址哈希算法,即同一IP的請求會分發之同一臺後端服務器。

負載均衡有硬件設備和開源軟件,除IDC機房和大公司可以承受像F5這樣的昂貴物理設備,而物理設備也需要雙機實現HA。

開源軟件nginx haproxy lvs 等配合 keepalived使用也是很好的選擇。

根據使用的設備或軟件結合業務選擇合適的調度策略即可。


分享到:


相關文章: