LVS+KEEPALIVED負載均衡實驗

我是你下藥都得不到的男人發表於2020-12-11

吐槽【2020.12.11】

---------------------------------------<僅個人課件>----------------------------------------

  最近,按照學校老師佈置的作業要求,選了個看起來難度較高的負載均衡系統搭建實驗來做,一方面是自己對這個東西早有耳聞,一直想了解一下;一方面又是想讓自己通過這次實驗更好的加深對於linux這個作業系統的使用和理解。   但是 -_- ,接觸後才發現,這需要有點計算機網路的基礎還要會shell程式設計。(os:啊這,我沒學過啊,shell程式設計我還沒看完入門教程呢)只好多看點資料,多找點視訊一個個看咯,又是抽時間又是熬夜的,斷斷續續的肝了好幾天,可算是大概懂了,並且做出來了,還是挺感動的(os:感動到自己,感動的已經開始學計算機網路了= =)   總體來說,學是學到不少東西的,不能說很懂linux(os:現在也就只會一些簡單的指令)想記的筆記還有一部分沒搞完,打算再找個時間補出來,感興趣的朋友可以期待一下下(os:假裝有人會看)

一、 簡介

1. 什麼是負載均衡

負載均衡(圖1),英文名稱為Load Balance,其含義就是指將負載(工作任務)進行平衡、分攤到多個操作單元上進行執行,例如FTP伺服器、Web伺服器、企業核心應用伺服器和其它主要任務伺服器等,從而協同完成工作任務。
負載均衡構建在原有網路結構之上,它提供了一種透明且廉價有效的方法擴充套件伺服器和網路裝置的頻寬、加強網路資料處理能力、增加吞吐量、提高網路的可用性和靈活性。
在這裡插入圖片描述

圖一

2. 負載均衡的型別

• 負載均衡可以採用硬體裝置(例如常常聽見的 F5),也可以採用軟體負載
• 商用硬體負載裝置成本通常較高(一臺幾十萬甚至上百萬),所以一般 情況下會採用軟體負載
• 軟體負載解決的兩個核心問題是:選誰、轉發,其中最著名的是 lvs

3. LVS 是什麼?

• 英文全稱是 Linux Virtual Server,即 Linux 虛擬伺服器
• 由 章 文 嵩 博 士 發 起 的 自 由 軟 件 項 目 , 它 的 官 方 站 點 是 www.linuxvirtualserver.org
• Linux2.4 核心以後,LVS 已經是 Linux 標準核心的一部分
• 可以將請求分發給後端真實伺服器處理
• 有許多比較著名網站和組織都在使用 LVS 架設的叢集系統,例如:Linux 的入口網站(www.linux.com)、向 RealPlayer 提供音訊視訊服務而聞 名的 Real 公司(www.real.com )、全球最大的開源網站 (sourceforge.net)等

排程演算法

  1. 輪詢排程(Round-Robin Scheduling)
  2. 加權輪詢排程(Weighted Round-Robin Scheduling)
  3. 最小連線排程(Least-Connection Scheduling)
  4. 加權最小連線排程(Weighted Least-Connection Scheduling)
  5. 基於區域性性的最少連結(Locality-Based Least Connections Scheduling)
  6. 帶 復 制 的 基 於 局 部 性 最 少 鏈 接 ( Locality-Based Least >Connections with Replication Scheduling)
  7. 目標地址雜湊排程(Destination Hashing Scheduling)
  8. 源地址雜湊排程(Source Hashing Scheduling)
  9. 最短預期延時排程(Shortest Expected Delay Scheduling)
  10. 不 排 隊 調 度 ( Never Queue Scheduling )對應: >rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

三種轉發規則

  1. NAT:簡單理解,就是資料進出都通過 LVS,效能不是很好。
  2. TUNL:簡單理解:隧道
  3. DR:最高效的負載均衡規則

Keepalived是什麼?

keepalived軟體起初是專門為LVS負載均衡軟體而設計,用來管理並監控LVS叢集系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能,因此,keepalived除了能夠管理LVS軟體ipvsadm外,還可以作為其它服務(例如:Nginx、HAProxy、MySQL等)的高可用解決方案軟體 keepalived軟體主要使用過VRRP協議實心高可用功能;VRRP是Virtual Route Redundancy Protocol(虛擬路由冗餘協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題的,它能夠保證當個別節點當機時,整個網路可以不間斷地執行 所以,Keepalived一方面具有配置管理LVS的功能,同時還具有LVS下面節點進行健康檢查的功能。
Keepalived服務的三個重要功能
1)管理LVS負載均衡軟體ipvsadm
2)實現LVS叢集節點的健康檢查
3)作為系統網路服務的高可用性

Keepalived工作原理
         **Keepalived執行機制示意圖**

在這裡插入圖片描述

工作機制

Keepalived通過VRRP協議來競爭實現虛擬路由的功能,所有的協議報文都是通過IP多播(multicast)包傳送(多播地址224.0.0.18)每個傳送的多播資料包都是從多播地址傳送;虛擬路由器由VRID(範圍0-255)和一組IP地址組成,對外表現為一個周知的MAC地址:00-00-5E-00-01-{VRID}.所以在一個虛擬路由器中,不管誰是MASTER,對外都是相同的MAC和IP(稱之為VIP)。客戶端主機並不需要因為MASTER的改變而修改自己的路由配置,對他們來說,這一切都是透明的。在一個虛擬路由器中,只有作為MASTER的VRRP路由器會一直髮送VRRP多播包,這裡說的MASTER傳送多播包就是指的是上面所說的由VRRP協議224.0.0.18地址所發出的多播包,發多播包是為了告訴Backup節點自己還活著,BACKUP就不會搶佔MASTER,除非它的優先順序(priority更高)。工作原理:Keepalived高可用對之間是通過VRRP通訊的,因此,我們從 VRRP開始瞭解起:

  1. VRRP,全稱 Virtual Router Redundancy Protocol,中文名為虛擬路由冗餘協議,VRRP的出現是為了解決靜態路由的單點故障。
  2. VRRP是通過一種竟選協議機制來將路由任務交給某臺 VRRP路由器的。
  3. VRRP用 IP多播的方式(預設多播地址(224.0_0.18))實現高可用對之間通訊。
  4. 工作時主節點發包,備節點接包,當備節點接收不到主節點發的資料包的時候,就啟動接管程式接管主節點的開源。備節點可以有多個,通過優先順序競選,但一般 Keepalived系統運維工作中都是一對。
  5. VRRP使用了加密協議加密資料,但Keepalived官方目前還是推薦用明文的方式配置認證型別和密碼。

Keepalived服務的工作原理:Keepalived高可用對之間是通過 VRRP進行通訊的,VRRP是通過競選機制來確定主備的,主的優先順序高於備,因此,工作時主會優先獲得所有的資源,備節點處於等待狀態,當主掛了的時候,備節點就會接管主節點的資源,然後頂替主節點對外提供服務。在 Keepalived服務對之間,只有作為主的伺服器會一直髮送 VRRP廣播包,告訴備它還活著,此時備不會槍佔主,當主不可用時,即備監聽不到主傳送的廣播包時,就會啟動相關服務接管資源,保證業務的連續性.接管速度最快可以小於1秒。

二、 LVS+Keepalived的負載均衡系統搭建

1. LVS+Keepalived搭建

1.1準備虛擬機器(圖2)

1臺lvs(主機)—配置 ip:192.168.240.128
1臺lvs(備機)—配置 ip: 192.168.240.129

2臺webserver —配置 ip:192.168.240.132 和192.168.240.133

(考慮到採用 的DR模式要在同一個網段,但伺服器ip地址不是固定的)

在這裡插入圖片描述

**圖二**

1.2配置兩臺webserver

下載httpd服務:yum -y install httpd

在這裡插入圖片描述

1.3往web伺服器中寫入內容,兩個伺服器各寫一個html檔案

vi /var/www/html/index.html

在這裡插入圖片描述

Web:
在這裡插入圖片描述

啟動httpd服務:

service httpd start

在這裡插入圖片描述

設定開機自啟動(省的下一次開機再手動開啟服務)
systemctl enable httpd.service

1.4 編寫RS伺服器的自動化響應程式

分別在兩臺web伺服器上做相同的操作

1.4.1建立一個自動化服務

vim /etc/init.d/realserver

  • /etc/init.d/的簡單介紹:
    1、init.d 目錄中存放的是一系列系統服務的管理(啟動與停止)指令碼。
    2、用service命令可執行init.d目錄中相應服務的指令碼。
    例:執行命令“service resin start”,可啟動/etc/init.d/resin指令碼
1.4.2在realserver中寫入程式碼
#!/bin/bash  
#description : start realserver  
SNS_VIP=192.168.240.100 #定義了一個VIP變數,必須跟真是服務在一個網段
#我這裡定了VIP:192.168.240.100

/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of REALServer"  
/sbin/ifconfig lo:0 $SNS_VIP  netmask 255.255.255.255 up  #增加一個本地路由 lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"  
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"  
exit 1
esac

抑制ARP搶包設定?

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  • arp_ignore 引數說明:

​ 0:預設值,回應任務網路介面上對任何本地IP地址的arp查詢請求
​ 1:只回答目標IP地址是來訪網路介面本地地址的ARP查詢請求
​ 2:只回答目標IP地址是來訪網路介面本地地址的ARP查詢請求,且來訪IP必須在該網路介面的子網段內。
​ 3:不回應該網路介面的ARP請求,而只對設定的唯一和連結地址做出回應。
​ 4-7:保留未使用。
​ 8:不回應所有(本地地址)的arp查詢。

  • arp_announce 引數說明:

對網路介面上,本地IP地址發出的ARP回應作出相應級別的限制,確定不同程度的限制,對來自本地源IP地址發出ARP請求的介面。
0:預設,在任意網路介面上的任何本地地址。
​ 1:進來避免不在該網路介面子網段的本地地址作出ARP回應,當發起ARP請求的源IP地址是被設定應該經由路由達到此網路介面的時候很有用。此時會檢查來訪IP是否為所有介面上的子網段內IP之一。如果該來訪IP不屬於各網路介面上的子網段內,那麼將採用級別2的方式來進行處理。
2:對查詢目標使用最適當的本地地址,在此模式下降忽略這個IP資料包的源地址並嘗試選擇能與該地址通訊的本地地址,首要是選擇所有的網路介面的子網中外出訪問子網中包含該目標IP地址的本地地址。如果沒有合適的地址唄發現,將選擇當前的傳送網路介面或其他的有可能接受到該ARP回應的網路介面來進行傳送,限制了使用本地的VIP地址作為優先的網路介面。

1.4.3修改檔案許可權

在這裡插入圖片描述

1.4.4啟動剛剛建立的服務

在這裡插入圖片描述

1.4.5檢視服務執行結果

在這裡插入圖片描述
!!!Web2服務重複前幾步操作


1.5下載keepalived

1.5.1在兩臺LVS主機上下載keepalived

yum -y -install keepalived

1.5.2配置LVS主機

vim /etc/keepalived/keepalived.conf

在這裡插入圖片描述

1.5.3配置LVS備機

在這裡插入圖片描述

1.5.4兩臺LVS主、備機啟動keepalived服務

service keepalived start
在這裡插入圖片描述
在這裡插入圖片描述

到此LVS+keepalived負載均衡系統搭建完成

三 測試負載均衡系統的功能,以及其對於伺服器的檢測和高可用性

2.1安裝ipvsadm,檢視伺服器之間的連線狀況

yum install ipvsadm -y

2.2檢視連線情況ipvsadm -ln

ipvsadm -ln

在這裡插入圖片描述

2.3在主機的window作業系統訪問192.168.240.100檢視結果

在這裡插入圖片描述

2.4按F5重新整理,會有輪詢下一臺伺服器

在這裡插入圖片描述
(ps:之所以內容地址和設定地址不一樣,是因為沒搭建成功前遇到許許多多的問題,虛擬機器被我弄的亂七八糟的,就換了幾次新的虛擬機器,配了不一樣的地址,但是內容懶得改了,照搬了。畢竟能區分伺服器就行)

在這裡插入圖片描述

2.5關閉httpd伺服器2(也就是node2結點)

在web2伺服器上操作?
在這裡插入圖片描述
在MASTER主機看到的連線的變化?
在這裡插入圖片描述

發現,keepalived已經自動拆除該問題伺服器結點

2.6重新啟用伺服器後

在這裡插入圖片描述
在這裡插入圖片描述

發現,keepalived又自動加入該伺服器結點

2.7把LVS主伺服器關掉

  • 主機沒有問題前,主機和備機的vip關係在這裡插入圖片描述
    在這裡插入圖片描述

2.8關閉主機keepalived

在這裡插入圖片描述

2.9檢視備機,會發現VIP:192.168.240.100已經發生ip漂移去到LVS備機上了

在這裡插入圖片描述
在這裡插入圖片描述

此時從windows電腦傳送訪問請求,依舊可以實現

在這裡插入圖片描述

相關文章