一、網路二到七層負載均衡
1、網路七層協議(二到七層含義)
所謂四層即運輸層,就是基於 ip + 埠的負載均衡;
七層即應用層,就是基於 url 等應用層資訊的負載均衡;
同理,還有基於 mac 位址的二層負載均衡和基於 ip 位址的三層負載均衡。
換句換說,
二層負載均衡會通過乙個虛擬 mac 位址接收請求,然後再分配到真實的 mac 位址;
三層負載均衡會通過乙個虛擬 ip 位址接收請求,然後再分配到真實的 ip 位址;
四層通過虛擬 ip + 埠接收請求,然後再分配到真實的伺服器;
七層通過虛擬的 url 或主機名接收請求,然後再分配到真實的伺服器。
2、四到七層負載均衡定義
所謂的四到七層負載均衡,就是在對後台的伺服器進行負載均衡時,依據四層的資訊或七層的資訊來決定怎麼樣**流量。
比如四層的負載均衡,就是通過發布三層的 ip 位址(vip),然後加四層的埠號,來決定哪些流量需要做負載均衡,
對需要處理的流量進行 nat 處理,**至後台伺服器,並記錄下這個 tcp 或者 udp 的流量是由哪台伺服器處理的,
後續這個連線的所有流量都同樣**到同一臺伺服器處理。
七層的負載均衡,就是在四層的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,
比如同乙個 web 伺服器的負載均衡,除了根據 ip 加 80 埠辨別是否需要處理的流量,
還可根據七層的 url、瀏覽器類別、語言來決定是否要進行負載均衡。
舉個例子,如果你的 web 伺服器分成兩組,一組是中文語言的,一組是英文語言的,
那麼七層負載均衡就可以當使用者來訪問你的網域名稱時,自動辨別使用者語言,然後選擇對應的語言伺服器組進行負載均衡處理。
瀏覽器也同理,火狐和谷歌的伺服器的請求回根據瀏覽器的類別進行負載均衡處理。
3、四層,七層負載均衡技術原理
1)四層負載均衡,也就是主要通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
以常見的 tcp 為例,負載均衡裝置在接收到第乙個來自客戶端的 syn 請求時,即通過上述方式選擇乙個最佳的伺服器,
並對報文中的目標 ip 位址進行修改(改為後端伺服器 ip),直接**給該伺服器。
tcp 的連線建立,即三次握手是客戶端和伺服器直接建立的,負載均衡裝置只是起到乙個類似路由器的**動作。
在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡裝置,在**報文的同時可能還會對報文原來的源位址進行修改。
2)七層負載均衡,也稱為「內容交換」,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡裝置設定的伺服器選擇方式,
決定最終選擇的內部伺服器。
以常見的tcp為例,負載均衡裝置如果要根據真正的應用層內容再選擇伺服器,
只能先**最終的伺服器和客戶端建立連線(tcp 三次握手)後,才可能接收到客戶端傳送的真正應用層內容的報文,
然後再根據該報文中的特定字段,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
負載均衡裝置在這種情況下,更類似於乙個**伺服器。負載均衡和前端的客戶端以及後端的伺服器會分別建立 tcp 連線。
所以從這個技術原理上來看,七層負載均衡明顯地對負載均衡裝置的要求更高,處理七層的能力也必然會低於四層模式的部署方式。
4、負載均衡器
負載均衡器通常稱為四層交換機或七層交換機。
四層交換機主要分析 ip 層及 tcp/udp 層,實現四層流量負載均衡。
七層交換機除了支援四層負載均衡以外,還有分析應用層的資訊,如 http 協議 uri 或 cookie 資訊。
負載均衡分為 l4 switch(四層交換),即在 osi 第 4 層工作,就是 tcp 層啦。
此種 load balancer 不理解應用協議(如 http/ftp/mysql 等等)。例子:lvs,f5。
另一種叫做 l7 switch(七層交換),osi 的最高層,應用層。
此時,該 load balancer 能理解應用協議。例子: haproxy,mysql proxy。
注意:上面的很多 load balancer 既可以做四層交換,也可以做七層交換。
當前可以看到對於 f5, array 等硬體負載均衡裝置本身也是支援 7 層負載均衡的,
同時在 4 層負載均衡的時候我們還可以設定是否進行會話保持等高階特性。
要明白 4 層負載均衡本質是**,而 7 層負載本質是內容交換和**,具體說明如下:
二、常用負載均衡工具
nginx/lvs/haproxy是目前使用最廣泛的三種負載均衡軟體。
lvs:lvs主要用來做四層負載均衡。
lvs(linux virtual server),也就是linux虛擬伺服器, 是乙個由章文嵩博士發起的自由軟體專案。使用lvs技術要達到的目標是:
通過lvs提供的負載均衡技術和linux作業系統實現乙個高效能、高可用的伺服器群集,
它具有良好可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的服務效能。
nginx:nginx主要用來做七層負載均衡。
nginx(發音同engine x)是乙個網頁伺服器,它能反向**http, https, smtp, pop3, imap的協議鏈結,以及乙個負載均衡器和乙個http快取。
haproxy:haproxy主要用來做七層負載均衡。
haproxy是乙個使用c語言編寫的自由及開放源**軟體,其提供高可用性、負載均衡,以及基於tcp和http的應用程式**。
三、常見負載均衡演算法
上面介紹負載均衡技術的時候提到過,負載均衡伺服器在決定將請求**到具體哪台真實伺服器的時候,是通過負載均衡演算法來實現的。
負載均衡演算法可以分為兩類:靜態負載均衡演算法和動態負載均衡演算法。
1、靜態負載均衡演算法包括:輪詢,比率,優先權
2、動態負載均衡演算法包括: 最少連線數,最快響應速度,觀察方法,**法,動態效能分配,動態伺服器補充,服務質量,服務型別,規則模式。
1)輪詢(round robin):順序迴圈將請求一次順序迴圈地連線每個伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從順序迴圈佇列中拿出,不參加下一次的輪詢,直到其恢復正常。
2)比率(ratio):給每個伺服器分配乙個加權值為比例,根椐這個比例,把使用者的請求分配到每個伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配, 直到其恢復正常。
3)優先權(priority):給所有伺服器分組,給每個組定義優先權,big-ip 使用者的請求,分配給優先順序最高的伺服器組(在同一組內,採用輪詢或比率演算法,分配使用者的請求);當最高優先順序中所有伺服器出現故障,big-ip 才將請求送給次優先順序的伺服器組。這種方式,實際為使用者提供一種熱備份的方式。
4)最少的連線方式(least connection):傳遞新的連線給那些進行最少連線處理的伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配, 直到其恢復正常。
5)最快模式(fastest):傳遞連線給那些響應最快的伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
6)觀察模式(observed):連線數目和響應時間以這兩項的最佳平衡為依據為新的請求選擇伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
7)**模式(predictive):big-ip利用收集到的伺服器當前的效能指標,進行**分析,選擇一台伺服器在下乙個時間片內,其效能將達到最佳的伺服器相應使用者的請求。(被big-ip 進行檢測)
8)動態效能分配(dynamic ratio-apm):big-ip 收集到的應用程式和應用伺服器的各項效能引數,動態調整流量分配。
9)動態伺服器補充(dynamic server act.):當主伺服器群中因故障導致數量減少時,動態地將備份伺服器補充至主伺服器群。
10)服務質量(qos):按不同的優先順序對資料流進行分配。
11)服務型別(tos): 按不同的服務型別(在type of field中標識)負載均衡對資料流進行分配。
12)規則模式:針對不同的資料流設定導向規則,使用者可自行。
四層負載均衡和七層負載均衡
第一,技術原理上的區別。所謂四層負載均衡,也就是主要通過報文中的目標位址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。以常見的 tcp為例,負載均衡裝置 在接收到第乙個來自客戶端的 syn請求時 即通過上述方式選擇乙個最佳的伺服器,並對報文中目標 ip位址進行修改 改為後端...
四層負載均衡與七層負載均衡
1 四層負載均衡與七層負載均衡區別 個人理解 網路七層協議包括,應用層 第七層 表示層,會話層,傳輸成 第四層 網路層,資料鏈路層,物理層。所謂的七層和四層負載均衡就是指基於哪一層做的負載均衡。nginx反向 就是一種七層負載均衡,可以通過使用者的請求url來進行劃分 lvs就屬於四層負載均衡,是基...
四層負載均衡與七層負載均衡
四層負載均衡與七層負載均衡 負載均衡的分層是針對osi網路模型來說的,負載均衡模型也不僅僅只有四層和七層的。下面先給出osi網路模型架構 根據上述模型,可以快速了解負載均衡的分層 二層負載均衡 基於虛擬mac與真實mac的位址互聯。三層負載均衡 基於虛擬ip與真實ip的位址互聯。四層負載均衡 基於三...