您的位置 首页 kreess

LVS+Keepalived 構造高可用負載均衡集群

1、什麼是集群?集群就是將多臺服務器通過硬件或軟件的方式組合起來,完成特定的任務,而這些服務器對外表現為一個整體。2、集群的優勢2.1 高可靠性利用集群管理軟件,當主服務器

1、什麼是集群?

集群就是將多臺服務器通過硬件或軟件的方式組合起來,完成特定的任務,而這些服務器對外表現為一個整體。

2、集群的優勢

2.1 高可靠性

利用集群管理軟件,當主服務器故障時,備份服務器能夠自動接管主服務器的工作,並及時切換過去,以實現不間斷服務。

2.2 高性能

即充分利用集群中的每一臺計算機的資源,實現復雜運算的並行處理,通常用於科學計算領域。

2.3 負載均衡

即把負載壓力根據算法合理分配到集群中的每一臺計算機上,以減輕單臺服務器的壓力,降低對單臺服務器的硬件和軟件要求。

2.4 可伸縮性當服務器負載壓力增長的時候,集群能夠靈活擴展來滿足需求,不降低服務質量。

3、集群分類及特點計算機集群架構按照功能和結構一般分成以下幾類:

3.1負載均衡集群負載均衡集群(Loadbalancingclusters)簡稱LBC,負載均衡集群為企業提供瞭更為實用,性價比更高的系統架構解決方案。負載均衡集群把很多客戶集中訪問的請求負載壓力可能盡可能平均的分攤到計算機集群中處理。

3.2 高可用集群

高可用性集群(High-availabilityclusters)簡稱HAC,當集群中的任意一個節點失效的情況下,節點上的所有任務自動轉移到其他正常的節點上,並且此過程不影響整個集群的運行,不影響業務的提供。

3.3 高性能集群高性能計算集群(High-perfomanceclusters)簡稱HPC,高性能計算集群采用將計算任務分配到集群的不同計算節點兒提高計算能力,因而主要應用在科學計算領域。

4、 負載均衡集群介紹

負載均衡集群是一種將網絡上的訪問流量分佈於各個節點,以降低單臺服務器壓力,更好的向客戶端提供服務的一種方式。負載均衡集群的作用:提供一種廉價、有效、透明的方法,來擴展網絡設備和服務器的負載帶寬、增加吞吐量,加強網絡數據處理能力、提高網絡的靈活性和可用性。簡單來說,也就是:1) 把單臺計算機無法承受的大規模的並發訪問或數據流量分擔到多臺節點設備上分別處理,減少用戶等待響應的時間,提升用戶體驗。2) 7*24小時的服務保證,任意一個或多個設備節點設備宕機,不影響到業務。在負載均衡集群中,所有計算機節點都提供相同的服務,集群負載均衡獲取所有對該服務的入站請求。

5、 LVS負載均衡集群說明

5.1 什麼是LVS

LVS是Linux Virtual Server 的簡寫,即Linux虛擬服務器,是一個虛擬的服務器集群系統,本項目在1998年5月由章文嵩博士成立,目前LVS已經被集成到Linux內核模塊中,可以在UNIX/LINUX平臺下實現負載均衡集群功能。

5.2 LVS組成部分

ipvsadm:命令行工具, 用於管理集群服務及集群服務上的RS等

ipvs: 工作於內核上的程序, 可根據用戶定義的集群實現請求轉發

5.3 LVS集群常用結構

正常情況下,LVS集群都采用三層結構,其體系結構如圖所示:

第一層:負載調度器,負責將客戶端的請求以設定的方式發送到後端的服務器上執行。第二層:服務器池,是真正執行客戶請求的服務器。

第三層:共享存儲,它為服務器池提供一個共享的存儲區域,這樣使服務器池擁有相同的內容,提供相同的服務。

5.4 LVS集群工作模式

5.4.1 NAT模式-網絡地址轉換

NAT模式是通過網絡地址轉換的方法來實現調度的。首先調度器(DS)接收到客戶的請求數據包時(請求的目的IP為VIP),根據調度算法決定將請求發送給哪個後端的真實服務器(RS)。然後調度就把客戶端發送的請求數據包的目標IP地址及端口改成後端真實服務器的IP地址(RIP),這樣真實服務器(RS)就能夠接收到客戶的請求數據包瞭。真實服務器響應完請求後,查看默認路由(NAT模式下需要將RS的默認路由設置為DS服務器。)把響應後的數據包發送給DS,DS再接收到響應包後,把包的源地址改成虛擬地址(VIP)然後發送回給客戶端。

NAT模式-的體系結構如圖所示:

NAT模式特點:

  • 集群節點,必須在一個網絡中
  • 真實服務器必須將網關指向負載調度器
  • RIP 通常都是私有 IP,僅用於各個集群節點通信
  • 負載調度器必須位於客戶端和真實服務器之間,充當網關
  • 負載調度器操作系統必須是Linux,真實服務器可以使用任意系統
  • NAT模式支持IP地址和端口進行轉換,即用戶請求的端口和真實服務器的端口可以不一致。
  • NAT方式請求的報文和響應的報文都需要通過調度器進行地址改寫,因此網站訪問量比較大的時候負載均衡調度器會成為整個集群的瓶頸,一般要求最多隻能添加10-20臺節點。

5.4.2 TUN模式-IP隧道模式 IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用於移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。它的連接調度和管理與VS/NAT中的一樣,隻是它的報文轉發方法不同。調度器根據各個服務器的負載情況,動態地選擇一臺服務器,將請求報文封裝在另一個IP報文中,再將封裝後的IP報文轉發給選出的服務器; 服務器收到報文後,先將報文解封獲得原來目標地址為 VIP 的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然後根據路由表將響應報文直接返回給客戶。

TUN模式的體系結構如圖所示:

TUN模式特點:

  • 不支持端口映射功能;
  • 負載調度器隻負責入站請求;
  • 發送方和接收方必須支持隧道功能;
  • 真實服務器不能將網關指向負載調度器;
  • 集群節點不必位於同一個物理網絡但必須都擁有公網 IP;

5.4.3 DR模式-直接路由模式 DR模式也就是直接用路由技術實現虛擬服務器。DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器響應後的處理結果直接返回給客戶端用戶。同TUN模式一樣,DR模式可以極大的提高集群系統的伸縮性。而且DR模式沒有IP隧道的開銷,對集群中的真實服務器也沒有必要必須支持IP隧道協議的要求。但是要求調度器與真實服務器都有一塊網卡連接到同一物理網段上,必須在同一個局域網環境。

DR模式的體系結構如圖所示:

DR模式特點

  • 集群節點必須在一個網絡中;
  • 真實服務器網關必須指向路由器;
  • 集群節點既可以是私網地址,也可以是公網地址;
  • 負載調度器隻負責入站請求,大大減輕負載調度器壓力,支持更多的服務器節點;

6、LVS負載均衡調度算法

調度算法決定瞭如何在集群節點之間分佈工作負荷。當負載調度器收到來自客戶端的入站請求時,調度器必須決定哪個集群節點應該處理請求。調度器用的調度方法分為兩類 :

6.1 靜態調度算法

特點:隻根據算法本身去調度,不考慮服務器本身

6.1.1 rr(輪詢)

輪詢調度:這種是最簡單的調度算法,將每次用戶的請求分配給後端的服務器,從第一臺服務器開始到第 N 臺結束,然後循環。

6.1.2 wrr(加權輪詢)

加權輪詢調度:這種算法是在rr基礎上實現的,隻不過加瞭權重,權重范圍為1-100,假設A的服務器性能好,就給A的權重設置的高一點,設為2,而B主機是1。這樣就實現A二個,B一個,A二個,B一個的循環發,這樣照顧到瞭服務器性能。

6.1.3 sh(源地址哈希)

源地址散列:主要是實現將此前的session(會話)綁定。將此前客戶的源地址作為散列鍵,從靜態的散列表中找出對應的服務器,隻要目標服務器是沒有超負荷的就將請求發送過去。就是說某客戶訪問過A,現在這個客戶又來瞭,所以客戶請求會被發送到服務過他的A主機。

6.1.4 dh(目的地址哈希)

目的地址散列:以目的地址為關鍵字查找一個靜態hash表來獲得需要的RS。以目標地址為標準挑選。 功能是和sh近似的,但應用場景不同; 舉個dh調度算法的例子:假設1號客戶訪問瞭web集群的一個動態頁面,調度器將請求轉發個A服務器,A服務器的PHP將這個動態請求運行瞭一遍,生成瞭緩存並回應1號客戶。這下2號客戶也訪問瞭這個動態頁面,調度器應該將請求發給A。畢竟A已經跑過這段程序瞭,有緩存,所以這既是dh算法。

6.2動態調度算法

特點:除瞭算法本身,還要考慮服務器狀態

6.2.1 lc(最少鏈接)

最少連接調度:這種算法是看A、B主機誰的連接少,請求就發給誰。

簡單算法:active*256+inactive (誰小發給誰)

6.2.2 wlc(加權最少鏈接)LVS的理想算法

加權最少鏈接:這種算法就是比lc多瞭一個權重。

簡單算法:( active*256+inactive )/weight (誰小就發給誰)

6.2.3 sed(最短期望延遲)

基於wlc算法,假設A,B的權重分別是1、2 。而A的鏈接數為1,B的鏈接數為2 。這樣的話,用wlc算法得出的結果一樣,而明顯B的權重大,B的能力較強。用sed算法的話,就可以避免wlc出現的問題。

簡單算法:(active+1)*256/weight (活動的連接數+1)*256/除以權重 (誰小發給誰)

6.2.4 NQ算法

基於sed算法:在sed的基礎上,若誰的鏈接數為0,直接將請求發送給它。

6.2.5 LBLC(基於局部性的最少連接)

這個算法主要用於Cache集群系統,因為Cache集群的中客戶請求報文的目標IP地址的變化,將相同的目標URL地址請求調度到同一臺服務器,來提高服務器的訪問的局部性和Cache命中率。從而調整整個集群的系統處理能力。但是,如果realserver的負載處於一半負載,就用最少鏈接算法,將請求發送給活動鏈接少的主機。

6.2.6 LBLCR(帶復制的基於局部性的最少鏈接)

該算法首先是基於最少鏈接的,當一個新請求收到後,一定會將請求發給最少連接的那臺主機的。但這樣又破壞瞭cache命中率。但這個算法中,集群服務是cache共享的,假設A的PHP跑瞭一遍,得到緩存。但其他realserver可以去A那裡拿緩存,這是種緩存復制機制。

註:活動鏈接(active):客戶與服務器建立連接並且有數據傳送

非活動鏈接(inactive):隻是建立連接,沒有數據傳送,沒有斷開連接

7、Keepalived是什麼?

Keepalived是Linux下一個輕量級別的高可用解決方案。可以實現服務的高可用或熱備,用來防止單點故障的問題,Keepalived起初是為LVS設計的,專門用來監控集群系統中各個服務節點的狀態,它根據TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節點的狀態,如果某個服務器節點出現異常,或者工作出現故障,Keepalived將檢測到,並將出現的故障的服務器節點從集群系統中剔除,這些工作全部是自動完成的,不需要人工幹涉。而Keepalived的核心是VRRP協議,VRRP(Vritrual Router Redundancy Protocol,虛擬路由冗餘協議) 主要實現瞭在路由器或三層交換機處的冗餘,通過VRRP可以實現網絡不間斷穩定運行,因此Keepalvied 一方面具有服務器狀態檢測和故障隔離功能,另外一方面也有HA cluster功能,下面介紹一下VRRP協議實現的過程。

7.1 VRRP協議與工作原理

虛擬路由冗餘協議(Virtual Router Redundancy Protocol,簡稱VRRP) VRRP是一種路由容錯協議,也可以叫做備份路由協議。VRRP可以將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由,這個虛擬路由器通過虛擬IP對外提供服務,而在虛擬路由器內部有多個物理路由器協同工作,同一時間隻有一臺物理路由器對外提供服務,這臺物理路由設備被設置成為:主路由器(Master角色),一般情況下Master是由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,而且其它的物理路由器不擁有對外的虛擬IP,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱為“BACKUP的角色”,當主路由器失敗時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色,繼續提供對外服務,這種選舉角色切換非常之快,因而保證瞭服務的持續可用性。

7.2 Keepalvied的工作原理

Keepalived是通過VRRP協議實現高可用性的,Keepalived作為一個高性能集群軟件,它還能實現對集群中服務器運行狀態的監控以及故障隔離。

Keepalived工作在TCP/IP 參考模型的 三層、四層、五層,也就是分別為:網絡層,傳輸層和應用層,根據TCP、IP參數模型隔層所能實現的功能,Keepalived運行機制如下:

在網絡層: Keepalived在網絡層采用最常見的工作方式是通過ICMP協議向服務器集群中的每一個節點發送一個ICMP數據包,如果某個節點沒有返回響應數據包,那麼認為該節點發生瞭故障,Keepalived將報告這個節點失效,並從服務器集群中剔除故障節點。

在傳輸層: Keepalived在傳輸層裡利用瞭TCP協議的端口連接和掃描技術來判斷集群節點的端口是否正常,比如對於常見的WEB服務器80端口。或者SSH服務22端口,Keepalived一旦在傳輸層探測到這些端口號沒有數據響應和數據返回,就認為這些端口發生異常,然後強制將這些端口所對應的節點從服務器集群中剔除掉。

在應用層:可可以通過編寫程序或者腳本來運行Keepalived,而Keepalived將根據用戶的設定參數檢測各種程序或者服務是否允許正常,如果Keepalived的檢測結果和用戶設定的不一致時,Keepalived將把對應的服務器從服務器集群中剔除

8、實驗部分

實驗環境:VMware® Workstation 16 Pro

名稱 操作系統 IP地址
LVS-Master Centos7.4 192.168.126.101
LVS-Backup Centos7.4 192.168.126.102
Web-A Centos7.4 192.168.126.121
Web-B Centos7.4 192.168.126.122
Client Windows10 192.168.126.200

l 負載均衡集群采用LVS DR模式搭建

l 高可用集群采用Keepalived軟件搭建

實驗拓撲:

8.1 LVS – DR模式構建負載均衡集群

負載調度器(LVS101)

systemctl stop NetworkManager # 關閉網卡守護進程
cp /etc/sysconfig/network-scripts/ifcfg-ens32 ifcfg-ens32:0
# 拷貝 ens32 網卡子接口充當集群入口接口
vim ifcfg-ens32:0
DEVICE=ens32:0
IPADDR=192.168.126.100
NETMASK=255.255.255.0
ifup ens32:0 #啟動網卡
yum -y install ipvsadm #安裝LVS
modprobe ip_vs #重載 ipvs 模塊
ipvsadm -v #查看當前ipvs版本
ipvsadm -A -t 192.168.126.100:80 -s rr #添加一個集群並采用輪詢算法
ipvsadm -a -t 192.168.126.100:80 -r 192.168.126.121:80 -g
ipvsadm -a -t 192.168.126.100:80 -r 192.168.126.122:80 -g
#添加ipvsadm集群節點
ipvsadm -Ln #查看當前集群
chkconfig ipvsadm on #設置為開機自啟

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部