1. 程式人生 > 實用技巧 >負載均衡叢集

負載均衡叢集

文章目錄

一 、叢集是什麼?

1 叢集(cluster)技術是一種較新的技術,通過叢集技術,可以在付出較低成本的情況下獲得在效能、可靠性、靈活性方面的相對較高的收益,其任務排程則是集群系統中的核心技術。

2 叢集組成後,可以利用多個計算機和組合進行海量請求處理(負載均衡),從而獲得很高的處理效率,也可以用多個計算機做備份(高可用),使得任何一個機器壞了整個系統還是能正常執行。

二、負載均衡技術

負載均衡(Load Balance):負載均衡叢集為企業需求提供了可解決容量問題的有效方案。負載均衡叢集使負載可以在計算機叢集中儘可能平均地分攤處理

負載通常包括應用程式處理負載和網路流量負載,每個節點都可以承擔一定的處理負載,並且可以實現處理負載在節點之間的動態分配,以實現負載均衡

三、負載均衡技術的體現

負載均衡(Load Balance)

負載均衡技術型別:基於 4 層(傳輸層 TCP)負載均衡技術和基於 7 層(應用層 HTTP)負載均衡技術

負載均衡實現方式:硬體負載均衡裝置或者軟體負載均衡

硬體負載均衡產品:F5 、深信服 、Radware

軟體負載均衡產品: LVS(4層)(Linux Virtual Server)、 Haproxy(4/7層)、Nginx(4/7層)、Ats(apache traffic server)

四、效果實現圖

在這裡插入圖片描述

負載均衡分類

負載均衡根據所採用的裝置物件(軟/硬體負載均衡),應用的OSI網路層次(網路層次上的負載均衡

),及應用的地理結構(本地/全域性負載均衡)等來分類。下面著重介紹的是根據應用的 OSI 網路層次來分類的負載均衡型別。

負載均衡可以大致分為如下幾類

① 二層均衡負載(mac)

一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應

② 三層負載均衡(ip)

一般採用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP地址響應。

四層負載均衡(tcp)

在三層負載均衡的基礎上,用ip+port接收請求,再轉發到對應的機器。

七層負載均衡(http)

根據虛擬的url或IP,主機名接收請求,再轉向相應的處理伺服器。

在實際應用中,比較常見的就是四層負載及七層負載

六、四層負載均衡(基於ip+埠)

所謂四層負載均衡,也就是主要通過報文中的目標地址和埠,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
layer4

  1. 在三層負載均衡的基礎上,通過釋出三層的IP地址(VIP),然後加四層的埠號,來決定哪些流量需要做負載均衡,對需要處理的流量進行NAT處理,轉發至後臺伺服器,並記錄下這個TCP或者UDP的流量是由哪臺伺服器處理的,後續這個連線的所有流量都同樣轉發到同一臺伺服器處理
    \
  2. 以常見的TCP為例,負載均衡裝置在接收到第一個來自客戶端的SYN 請求時,即通過上述方式選擇一個最佳的伺服器,並對報文中目標IP地址進行修改(改為後端伺服器IP),直接轉發給該伺服器。TCP的連線建立,即三次握手是客戶端和伺服器直接建立的,負載均衡裝置只是起到一個轉發動作。在某些部署情況下,為保證伺服器回包可以正確返回給負載均衡裝置,在轉發報文的同時可能還會對報文原來的源地址進行修改。
    \
    1. 實現四層負載均衡的有:
  • F5:硬體負載均衡器,功能很好,但是成本很高。
  • lvs:重量級的四層負載均衡軟體
  • haproxy:模擬四層轉發,較靈活

七、七層的負載均衡(基於虛擬的URL或主機IP)

所謂七層負載均衡,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容,再加上負載均衡裝置設定的伺服器選擇方式,決定最終選擇的內部伺服器。
layer7

  • 在四層負載均衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,比如同一個Web伺服器的負載均衡,除了根據IP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。

  • 在四層負載均衡的基礎上(沒有四層是絕對不可能有七層的),再考慮應用層的特徵,比如同一個Web伺服器的負載均衡,除了根據IP加80埠辨別是否需要處理的流量,還可根據七層的URL、瀏覽器類別、語言來決定是否要進行負載均衡。

  • 對應的負載均衡器除了支援四層負載均衡以外,還有分析應用層的資訊,如HTTP協議URI等資訊,實現七層負載均衡。此種負載均衡器能理解應用協議。

  • 實現七層負載均衡的軟體有:

  • haproxy:天生負載均衡技能,全面支援七層代理,會話保持,標記,路徑轉移;

  • nginx:只在http協議和mail協議上功能比較好,效能與haproxy差不多;

  • apache:功能較差

  • Mysql proxy:功能尚可。

八、四層負載與七層負載的區別

四層負載均衡七層負載均衡
基於基於IP+Port基於URL或主機IP等
類似於路由器代理伺服器
複雜度
效能高;無需解析內容中;需要演算法識別 URL和 HTTP head 等資訊
安全性
額外功能會話保持,圖片壓縮,等

總結:從上面的對比看來四層負載與七層負載最大的區別就是效率與功能的區別。四層負載架構設計比較簡單,無需解析具體的訊息內容,在網路吞吐量及處理能力上會相對比較高,而七層負載均衡的優勢則體現在功能多,控制靈活強大。在具體業務架構設計時,使用七層負載或者四層負載還得根據具體的情況綜合考慮。

九、LVS實現四層負載均衡專案實戰

1.LVS介紹

(1)LVS 是Linux Virtual Server的簡稱,也就是 Linux 虛擬伺服器, 是一個由章文嵩博士發起的自由軟體專案,它的官方站點是**www.linuxvirtualserver.org。**現在LVS已經是 Linux標準核心的一部分,因此效能較高。

(2)LVS軟體作用:通過LVS提供的負載均衡技術實現一個高效能、高可用的伺服器群集,它具有良好可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的服務效能。

2.LVS優勢與不足

優勢

高併發連線:LVS基於核心工作,有超強的承載能力和併發處理能力。單臺LVS負載均衡器,可支援上萬併發連線。

**穩定性強:**是工作在網路4層之上僅作分發之用,這個特點也決定了它在負載均衡軟體裡的效能最強,穩定性最好,對記憶體和cpu資源消耗極低。

**成本低廉:**硬體負載均衡器少則十幾萬,多則幾十萬上百萬,LVS只需一臺伺服器和就能免費部署使用,價效比極高。

**配置簡單:**LVS配置非常簡單,僅需幾行命令即可完成配置,也可寫成指令碼進行管理。

**支援多種演算法:**支援多種論調演算法,可根據業務場景靈活調配進行使用

**支援多種工作模型:**可根據業務場景,使用不同的工作模式來解決生產環境請求處理問題。

應用範圍廣:因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、資料庫、DNS、ftp服務等等

不足

工作在4層,不支援7層規則修改,機制過於龐大,不適合小規模應用

3.LVS 核心元件和專業術語

(1)核心元件

LVS的管理工具和核心模組 ipvsadm/ipvs

ipvsadm:使用者空間的命令列工具,用於管理叢集服務及叢集服務上的RS等;

ipvs:工作於核心上的程式,可根據使用者定義的叢集實現請求轉發;

(2)專業術語

VS:Virtual Server #虛擬服務

Director, Balancer #負載均衡器、分發器

RS:Real Server #後端請求處理伺服器

CIP: Client IP #使用者端IP

VIP:Director Virtual IP #負載均衡器虛擬IP

DIP:Director IP #負載均衡器真實IP

RIP:Real Server IP #後端請求處理伺服器IP

(3)具體圖解

在這裡插入圖片描述
LVS工作核心模型及工作模式
① 當客戶端的請求到達負載均衡器的核心空間時,首先會到達 PREROUTING 鏈。
② 當核心發現請求資料包的目的地址是本機時,將資料包送往 INPUT 鏈。
③ LVS由使用者空間的ipvsadm和核心空間的IPVS組成,ipvsadm用來定義規則,IPVS利用ipvsadm定義的規則工作,IPVS工作在INPUT鏈上,當資料包到達INPUT鏈時,首先會被IPVS檢查,如果資料包裡面的目的地址及埠沒有在規則裡面,那麼這條資料包將被放行至使用者空間。
④ 如果資料包裡面的目的地址及埠在規則裡面,那麼這條資料報文將被修改目的地址為事先定義好的後端伺服器,並送往POSTROUTING鏈。
⑤ 最後經由POSTROUTING鏈發往後端伺服器。

(4)LVS負載均衡的四種工作模式

LVS/NAT:網路地址轉換模式,進站/出站的資料流量經過分發器/負載均衡器(IP負載均衡,他修改的是IP地址) --利用三層功能
LVS/DR :直接路由模式,只有進站的資料流量經過分發器/負載均衡器(資料鏈路層負載均衡,因為他修改的是目的mac地址)–利用二層功能mac地址
LVS/TUN: 隧道模式,只有進站的資料流量經過分發器/負載均衡器
LVS/full-nat:雙向轉換:通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發

(5)LVS四種工作模式原理、優缺點比較

1、NAT模式(LVS-NAT)
原理:就是把客戶端發來的資料包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,轉發至此RS來處理,RS處理完成後把資料交給經過負載均衡器,負載均衡器再把資料包的源IP地址改為自己的IP,將目的地址改為客戶端IP地址即可。期間,無論是進來的流量,還是出去的流量,都必須經過負載均衡器。
優點:叢集中的物理伺服器可以使用任何支援TCP/IP作業系統,只有負載均衡器需要一個合法的IP地址。
缺點:擴充套件性有限。當伺服器節點(普通PC伺服器)增長過多時,負載均衡器將成為整個系統的瓶頸,因為所有的請求包和應答包的流向都經過負載均衡器。當伺服器節點過多時,大量的資料包都交匯在負載均衡器那,速度就會變慢!
在這裡插入圖片描述

2、直接路由(Direct Routing)模式(LVS-DR)
原理:負載均衡器和RS都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP請求保持靜默。也就是說,閘道器會把對這個服務IP的請求全部定向給DR,而DR收到資料包後根據排程演算法,找出對應的RS,把目的MAC地址改為RS的MAC(因為IP一致)並將請求分發給這臺RS。這時RS收到這個資料包,處理完成之後,由於IP一致,可以直接將資料返給客戶,則等於直接從客戶端收到這個資料包無異,處理後直接返回給客戶端。
優點:和TUN(隧道模式)一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數作業系統做為物理伺服器。
缺點:(不能說缺點,只能說是不足)要求負載均衡器的網絡卡必須與物理網絡卡在一個物理段上。在這裡插入圖片描述

3、IP隧道(Tunnel)模式(VS-TUN)

​ 原理:網際網路上的大多Internet服務的請求包很短小,而應答包通常很大。那麼隧道模式就是,把客戶端發來的資料包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把資料包的頭解開,還原資料包,處理後,直接返回給客戶端,不需要再經過負載均衡器。注意,由於RS需要對負載均衡器發過來的資料包進行還原,所以說必須支援IPTUNNEL協議。所以,在RS的核心中,必須編譯支援IPTUNNEL這個選項
​ 優點:負載均衡器只負責將請求包分發給後端節點伺服器,而RS將應答包直接發給使用者。所以,減少了負載均衡器的大量資料流動,負載均衡器不再是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器能夠為很多RS進行分發。而且跑在公網上就能進行不同地域的分發。
​ 缺點:隧道模式的RS節點需要合法IP,這種方式需要所有的伺服器支援”IP Tunneling”(IP Encapsulation)協議,伺服器可能只侷限在部分Linux系統上。在這裡插入圖片描述

4、FULL-NAT模式

原理:客戶端對VIP發起請求,Director接過請求發現是請求後端服務。Direcrot對請求報文做full-nat,把源ip改為Dip,把目標ip轉換為任意後端RS的rip,然後發往後端,rs接到請求後,進行響應,相應源ip為Rip目標ip還是DIP,又內部路由路由到Director,Director接到響應報文,進行full-nat。將源地址為VIP,目標地址改為CIP

請求使用DNAT,響應使用SNAT

lvs-fullnat(雙向轉換)

通過請求報文的源地址為DIP,目標為RIP來實現轉發:對於響應報文而言,修改源地址為VIP,目標地址為CIP來實現轉發:

​ CIP --> DIP VIP --> RIP

​ RIP --> VIP DIP–>CIP

5、四者的區別

lvs-nat與lvs-fullnat:請求和響應報文都經由Director

  lvs-nat:RIP的閘道器要指向DIP

   lvs-fullnat:雙向轉換

lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client

   lvs-dr:通過封裝新的MAC首部實現,通過MAC網路轉發

   lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支援遠距離通訊