負載均衡
1.概念
負載均衡(Load Balance),是一種計算機技術,意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上進行執行。是解決高效能,單點故障(高可用),擴充套件性(水平伸縮)的終極解決方案。負載平衡服務通常可以由專用軟體(nginx、Lvs等)和硬體(F5負載均衡器)來完成。
2.負載均衡原理
系統的擴充套件可以分為縱向(垂直)擴充套件和橫向(水平)擴充套件。
- 縱向擴充套件:從單機角度出發,通過增加硬體處理能力,例如CPU處理能力、記憶體容量、磁碟等,目的是實現伺服器處理能力的提升,但缺點是不能滿足大型分散式系統或者網站大流量、高併發、海量資料的問題。
- 橫向擴充套件:通過新增機器數量來滿足大型網站服務的處理能力。例如一臺機器不能滿足需求,我就增加兩臺或者多臺機器,共同承擔訪問壓力,這就是典型的叢集和負載均衡的原理,
叢集和負載均衡的架構圖如下:
- 應用叢集:將同一應用部署到多臺機器上,組成處理叢集,接收負載均衡裝置分發的請求,進行處理,並返回相應資料。
- 負載均衡裝置:將使用者訪問的請求,根據負載均衡演算法,分發到叢集中的一臺處理伺服器。
負載均衡的作用:
- 解決併發壓力,提高應用處理效能(增加吞吐量,加強網路處理能力);
- 提供故障轉移,實現高可用;
- 通過新增或減少伺服器數量,提供網站伸縮性(擴充套件性);
- 安全防護;(負載均衡裝置上做一些過濾,黑白名單等處理)
3.負載均衡的實現
根據實現技術不同,可分為DNS域名解析負載均衡,HTTP重定向負載均衡,IP負載均衡,鏈路層負載均衡,反向代理負載均衡等。
3.1 DNS域名解析負載均衡
原理
最早的負載均衡技術,在DNS伺服器內配置多個記錄,這些記錄對應伺服器構成叢集,每次域名解析請求都會根據負載均衡演算法計算一個不同的IP地址返回,這樣就實現了負載均衡。
優點
- 使用簡單:載均衡工作,交給DNS伺服器處理,省掉了負載均衡伺服器維護的麻煩
- 提高效能:可以支援基於地址的域名解析,解析成距離使用者最近的伺服器地址,可以加快訪問速度,改善效能;
缺點
- 可用性差:DNS解析是多級解析,新增/修改DNS後,解析時間較長;解析過程中,使用者訪問網站將失敗;
- 擴充套件性差:DNS負載均衡的控制權在域名商那裡,無法對其做更多的改善和擴充套件;
適用場景
所以,結合DNS域名解析負載均衡的原理,大型網站一般都會把DNS負載均衡作為第一級負載均衡手段,然後再在內部做第二級負載均衡。
3.2 HTTP重定向負載均衡
原理
HTTP重定向負載均衡伺服器是一臺普通的應用伺服器,其唯一的功能就是根據使用者的HTTP請求以及負載均衡演算法計算出一臺真實的伺服器地址,並將真實的伺服器地址寫入HTTP重定向響應中(響應狀態碼302)返回給瀏覽器,然後瀏覽器再自動請求真實的伺服器。
優點
簡單易實現
缺點
- 缺點是瀏覽器需要每次請求兩次伺服器才能拿完成一次訪問,效能較差;
- 重定向伺服器自身的處理能力有可能成為瓶頸
適用場景
綜上,此方案在實際中並不經常使用。
3.3 IP負載均衡
原理
在網路層結合負載均衡演算法通過修改請求目標IP地址進行負載均衡。
使用者請求資料包,到達負載均衡伺服器後,負載均衡伺服器在作業系統核心程式獲取網路資料包,根據負載均衡演算法得到一臺真實伺服器地址,然後將請求目的地址修改為獲得的真實ip地址,整個過程不需要經過使用者程式處理。真實伺服器處理完成後,響應資料包回到負載均衡伺服器,負載均衡伺服器再將資料包源地址修改為自身的ip地址,傳送給使用者瀏覽器。
整個流程的關鍵在於真實WEB伺服器響應資料包如何返回給負載均衡伺服器,
- 一種是負載均衡伺服器在修改目的IP地址的同時修改源地址,將資料包源地址改為自身的IP,即源地址轉換(SNAT)
- 另一種方案是將負載均衡伺服器同時作為真實物理伺服器的閘道器伺服器,這樣所有的資料都會到達負載均衡伺服器。
優點
IP負載均衡在核心程式完成資料分發,處理效能更好
缺點
由於所有請求響應的資料包都需要經過負載均衡伺服器,因此負載均衡的網路卡頻寬成為系統的瓶頸
3.4 資料鏈路層負載均衡
原理
資料鏈路層負載均衡是指在通訊協議的資料鏈路層修改mac地址進行負載均衡。
這種資料傳輸方式又稱作三角傳輸模式,即資料在分發過程中不修改IP地址,只根據負載均衡演算法修改目的地的mac地址,然後通過配置真實物理伺服器叢集所有機器虛擬IP和負載均衡伺服器IP地址一樣,從而達到依靠mac地址進行傳輸,這種負載均衡方式又稱為直接路由方式(DR).
在上圖中,使用者請求到達負載均衡伺服器後,負載均衡伺服器將請求資料的目的mac地址修改為真實WEB伺服器的mac地址,並不修改資料包目標IP地址,因此資料可以正常到達目標WEB伺服器,該伺服器在處理完資料後可以不經過負載均衡伺服器直接到達使用者瀏覽器。
優點
使用三角傳輸模式的鏈路層負載均衡是目前大型網站所使用的最廣的一種負載均衡手段。在linux平臺上最好的鏈路層負載均衡開源產品是LVS(linux virtual server)。
缺點
配置可能複雜一點。
3.5 反向代理負載均衡
原理
傳統代理伺服器位於瀏覽器一端,代理瀏覽器將HTTP請求傳送到網際網路上(正向代理)。而反向代理伺服器則位於網站機房一側,代理網站web伺服器接收http請求。反向代理伺服器也可以實現負載均衡的功能,典型的反向代理服務就是nginx。
除此之外,代理伺服器也可以配置快取加速web請求。當使用者第一次訪問靜態內容的時候,靜態記憶體就被快取在反向代理伺服器上,這樣當其他使用者訪問該靜態內容時,就可以直接從反向代理伺服器返回,加速web請求響應速度,減輕web伺服器負載壓力。
由於反向代理伺服器轉發請求在HTTP協議層面,因此也叫應用層負載均衡。優點是部署簡單,缺點是可能成為系統的瓶頸。
4.負載均衡的演算法
上面介紹負載均衡技術的時候提到過,負載均衡伺服器在決定將請求轉發到具體哪臺真實伺服器時,是通過負載均衡演算法來實現的。
4.1 輪詢法
(1) 概念
將請求按照順序輪流的分配到伺服器上,它均衡的對待每一臺後端的伺服器,不關心伺服器的的連線數和負載情況.
(2) 缺點
- 輪詢的策略目的在於請求的絕對均衡,但是在實際的情況下,可能伺服器並不是完全一樣。導致有些效能高的伺服器不能完全發揮出來。
- [待定!!!]請求到目的結點的不確定,造成其無法適用於有寫的場景(快取,資料庫寫),適用於資料庫或應用服務層中只有讀的場景
(3) 加權輪詢法
以輪詢的方式依次請求排程不同的伺服器;實現時,一般為伺服器帶上權重;這樣有兩個好處:
- 針對伺服器的效能差異可分配不同的負載;
- 當需要將某個結點剔除時,只需要將其權重設定為0即可;
4.2 隨機法
通過系統的隨機函式,根據後端伺服器列表的大小來隨機獲取其中的一臺來訪問,隨著呼叫量的增大,實際效果越來越近似於平均分配到沒一臺伺服器.和輪詢的效果類似.[請求隨機分配到各個伺服器。]
4.3 最小連線數法
最小連線數演算法比較靈活和智慧,由於後端伺服器的配置不盡相同,對於請求的處理有快有慢,它正是根據後端伺服器當前的連線情況,動態地選取其中當前積壓連線數最少的一臺伺服器來處理當前請求,儘可能地提高後端伺服器的利用效率,將負載合理地分流到每一臺機器。
4.4 源地址hash法
源地址hash法的思想是獲取客戶端訪問的ip地址,通過hash函式計算出一個hash值,用該hash值對伺服器列表的大小進行取模運算,得到的值就是要訪問的伺服器的序號.
4.5 最快響應演算法
負載均衡裝置對內部各伺服器發出一個探測請求(例如Ping),然後根據內部中各伺服器對探測請求的最快響應時間來決定哪一臺伺服器來響應客戶端的服務請求。
4.6 總結
5.負載均衡的分類
負載均衡可以分為二層、三層、四層、七層負載均衡。
5.1 二層負載均衡
負載均衡伺服器對外依然提供一個VIP(虛IP),叢集中不同的機器採用相同IP地址,但機器的MAC地址不一樣。當負載均衡伺服器接受到請求之後,通過改寫報文的目標MAC地址的方式將請求轉發到目標機器實現負載均衡。
其實二層負載均衡也就是資料鏈路層負載均衡
5.2 三層負載均衡
和二層負載均衡類似,負載均衡伺服器對外依然提供一個VIP(虛IP),但叢集中不同的機器採用不同的IP地址。當負載均衡伺服器接受到請求之後,根據不同的負載均衡演算法,通過IP將請求轉發至不同的真實伺服器。
其實三層負載均衡也就是IP負載均衡
5.3 四層負載均衡
(1) 概念
四層負載均衡工作在OSI模型的傳輸層,主要工作是轉發,它在接收到客戶端的報文以後主要通過修改報文中的目標地址和埠,再加上負載均衡演算法,決定最終選擇的真實物理伺服器。
(2) 常見的例子:
以常見的TCP為例,負載均衡裝置在接收到第一個來自客戶端的SYN請求時,即通過上述方式選擇一個最佳的伺服器,並對報文中目標IP地址進行修改(改為後端伺服器IP),直接轉發給該伺服器。TCP的連線建立,即三次握手是客戶端和伺服器直接建立的,負載均衡裝置只是起到一個類似路由器的轉發動作。在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡裝置,在轉發報文的同時可能還會對報文原來的源地址進行修改。
5.4 七層負載均衡
(1) 概念
七層負載均衡工作在OSI模型的應用層,因為它需要解析應用層流量,所以七層負載均衡在接到客戶端的流量以後,還需要一個完整的TCP/IP協議棧。它的主要特點在於:通過報文中的有意義的應用層內容以及負載均衡演算法,決定最終選擇的真實物理伺服器。
(2) 常見例子
負載均衡裝置在這種情況下,更類似於一個代理伺服器。負載均衡和前端的客戶端以及後端的伺服器會分別建立TCP連線。所以從這個技術原理上來看,七層負載均衡明顯的對負載均衡裝置的要求更高,處理七層的能力也必然會低於四層模式的部署方式。