目錄
一:Keepalived雙機熱備基礎知識
1.Keepalived 概述及安裝
1.1.Keepalived的熱備方式
1.2.Keepalived 的安裝與服務控制
(1)安裝Keepalived
(2)控制Keepalived服務
2.使用Keepalived實現雙機熱備
2.1.主服務器的配置
2.2.備用服務器配置
2.3.檢測雙機熱備功能
(1)連通性測試
(2)web訪問測試
(3)查看日志記錄
二:使用Keepalived實現雙機熱備
1.基礎環境配置
2.配置主調度器
(1)全局配置,熱備配置
(2)web服務器池配置
(3)重新啟動Keepalived
3.配置從調度器
4.配置web節點服務器
5.測試LVS+Keepalived高可用群集
一:Keepalived雙機熱備基礎知識
? ? ? Keepalived 起初是專門針對 LVS 設計的一款強大的輔助工具,主要用來提供故障切換(Failover)和健康檢査(Health Checking)功能--判斷 LVS 負載調度器、節點服務器的可用性,當master 主機出現故障及時切換到 backup節點保證業務正常,當 master 故障主機恢復后將其重新加入群集并且業務重新切換回 master 節點。
1.Keepalived 概述及安裝
? ? ? Keepalived 的官方網站位于 http://www.keepalived.org/,本章將以 YUM方式講解 Keepalived 的安裝、配置和使用過程。在非 LVS 群集環境中使用時,Keepalived 也可以作為熱備軟件使用。
1.1.Keepalived的熱備方式
? ? ? Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議)熱備份協議,以軟件的方式實現 Linux 服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案--由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務;每個熱備組內同一時刻只有一臺主路由器提供服務,其他路由器處于冗余狀態。若當前在線的路由器失效,則其他路由器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。
? ? ? 熱備組內的每臺路由器都可能成為主路由器,虛擬路由器的IP地址(VIP)可以在熱備組內的路由器之間進行轉移,所以也稱為漂移IP地址。使用Keepalived 時,漂移地址的實現不需要手動建立虛接口配置文件(如 ens33 :0),而是由 Keepalived 根據配置文件自動管理。
操作系統 | 配置 | IP | 服務 |
OpenEuler24 | 2C4G | 192.168.10.101 | keepalived/nginx |
OpenEuler24 | 2C4G | 192.168.10.102 | keepalived/nginx |
?
1.2.Keepalived 的安裝與服務控制
(1)安裝Keepalived
yum install -y keepalived ipvsadm nginx
(2)控制Keepalived服務
systemctl enable keepalived
2.使用Keepalived實現雙機熱備
2.1.主服務器的配置
systemctl stop firewalld //關閉防火墻
setenforce 0
cd /etc/keepalived/
cp keepalived.conf.sample keepalived.conf
vi keepalived.conf
global_defs {router_id HA_TEST_R1 //本路由器(服務器)的名稱
}
vrrp_instance VI_1 { //定義 VRRP 熱備實例state MASTER //熱備狀態,MASTER 表示主服務器interface ens33 //承載 VIP 地址的物理接口virtual_router_id 1 //虛擬路由器的 ID 號,每個熱備組保持一致priority 100 //優先級,數值越大優先級越高advert_int 1 //通告間隔秒數(心跳頻率)authentication { //認證信息,每個熱備組保持一致auth_type PASS //認證類型auth_pass 123456 //密碼字串}virtual_ipaddress { //指定漂移地址(VIP),可以有多個192.168.10.100}
}
systemctl start keepalived
ip addr show dev ens33
2.2.備用服務器配置
- 在同一個 Keepalived 熱備組內,所有服務器的 Keepalived 配置文件基本相同,包括虛擬路由器的 ID 號、認證信息、漂移地址、心跳頻率等。不同之處主要在于路由器名稱、熱備狀態、優先級。
- 路由器名稱(router_id):建議為每個參與熱備的服務器指定不同的名稱。
- 熱備狀態(state):至少應有一臺主服務器,將狀態設為 MASTER;可以有多臺備用的服務器,將狀態設為 BACKUP。
- 優先級(priority):數值越大則取得 VIP 控制權的優先級越高,因此主服務器的優先級應設為最高;其他備用服務器的優先級可依次遞減,但不要相同,以免在爭奪 VIP 控制權時發生沖突。
配置備用服務器(可以有多臺)時,可以參考主服務器的 keepalived.conf 配置文件內容,只需修改路由器名稱、熱備狀態、優先級
systemctl stop firewalld //關閉防火墻
setenforce 0
cd /etc/keepalived/
cp keepalived.conf.sample keepalived.conf
vi keepalived.conf
global_defs {router_id HA_TEST_R2 //本路由器(服務器)的名稱
}
vrrp_instance VI_1 { //定義 VRRP 熱備實例state BACKUP //熱備狀態,BACKUP 表示備用服務器interface ens33 //承載 VIP 地址的物理接口virtual_router_id 1 //虛擬路由器的 ID 號,每個熱備組保持一致priority 90 //優先級,低于主服務器advert_int 1 //通告間隔秒數(心跳頻率)authentication { //認證信息,每個熱備組保持一致auth_type PASS //認證類型auth_pass 123456 //密碼字串}virtual_ipaddress { //指定漂移地址(VIP),可以有多個192.168.10.100}
}
systemctl start keepalived
ip addr show dev ens33
2.3.檢測雙機熱備功能
? ? ? Keepalived 的日志消息保存在 /var/log/messages 文件中,在測試主、備故障自動切換功能時,可以跟蹤此日志文件來觀察熱備狀態的變化。以針對連通性和 Web 服務的測試為例,主要操作如下。
(1)連通性測試
? ? ? 在客戶機中執行 “ping -t 192.168.10.100” 命令,能夠正常、持續 ping 通,根據以下操作繼續觀察測試結果。
① 停止啟用主服務器的 Keepalived 服務,發現 ping 測試只中斷了 1 或 2 個包即恢復正常,說明已有其他服務器接替 VIP 地址,并及時響應客戶機請求。
② 重新啟用主服務器的 Keepalived 服務,發現 ping 測試再次中斷 1 或 2 個包即恢復正常,說明主服務器已恢復正常,并奪回 VIP 地址的控制權。
(2)web訪問測試
# Keepalived01
systemctl start nginx
echo "web01" >/usr/share/nginx/html/index.html# Keepalived02
systemctl start nginx
echo "web02" >/usr/share/nginx/html/index.html
? ? ?在 keepalived 運行的主機上啟動 nginx 服務并寫入不通的測試頁面內容
① 停止啟用主服務器的 Keepalived 服務,再次訪問上述 Web 服務,將看到由備用服務器 192.168.10.102 提供的網頁文檔,說明 VIP 地址已切換至備用服務器。
② 重新啟用主服務器的 Keepalived 服務,再次訪問上述 Web 服務,將看到重新由主服務器 192.168.10.101 提供的網頁文檔,說明主服務器已重新奪取 VIP 地址。
(3)查看日志記錄
在執行主、備服務器故障切換的過程中,分別觀察各自的 /var/log/messages 日志文件,可以看到 MASTER、SLAVE 狀態的遷移記錄。
① 主服務器中,Keepalived 服務狀態先變為 “stop”,移除 VIP 地址,恢復后重新變為 MASTER。
less /var/log/messages
二:使用Keepalived實現雙機熱備
操作系統 | 配置 | 主機名 | IP | 服務 |
---|---|---|---|---|
OpenEuler24 | 2C4G | lb01 | 192.168.10.101 | Keepalived/ipvsadm |
OpenEuler24 | 2C4G | lb01 | 192.168.10.102 | Keepalived/ipvsadm |
OpenEuler24 | 2C4G | web01 | 192.168.10.103 | Nginx |
OpenEuler24 | 2C4G | web02 | 192.168.10.104 | Nginx |
OpenEuler24 | 2C4G | nfs-server | 192.168.10.105 | nfs-utils/rpcbind |
1.基礎環境配置
# 關閉防火墻
systemctl stop firewalld
systemctl disable firewalld# 關閉內核安全機制
setenforce 0
sed -i "s/^SELINUX=.*$/SELINUX=disabled/g" /etc/selinux/config# 修改主機名
hostnamectl set-hostname lb01
hostnamectl set-hostname lb02
hostnamectl set-hostname web01
hostnamectl set-hostname web02# 加載 ip_vs 模塊
modprobe ip_vs# 查看 ip_vs 版本信息
cat /proc/net/ip_vs# 安裝服務并備份模板配置文件
yum install ipvsadm keepalived -y
cp /etc/keepalived/keepalived.conf{,.bak}
2.配置主調度器
(1)全局配置,熱備配置
vi keepalived.conf
global_defs {router_id HA_TEST_R1 //本路由器(服務器)的名稱
}
vrrp_instance VI_1 { //定義 VRRP 熱備實例state MASTER //熱備狀態,MASTER 表示主服務器interface ens33 //承載 VIP 地址的物理接口virtual_router_id 1 //虛擬路由器的 ID 號,每個熱備組保持一致priority 100 //優先級,數值越大優先級越高advert_int 1 //通告間隔秒數(心跳頻率)authentication { //認證信息,每個熱備組保持一致auth_type PASS //認證類型auth_pass 123456 //密碼字串}virtual_ipaddress { //指定漂移地址(VIP),可以有多個192.168.10.100}
}
(2)web服務器池配置
vi /etc/keepalived/keepalived.conf
...... #省略部分信息
virtual_server 192.168.10.100 80 { #虛擬服務器地址(VIP)、端口delay_loop 15 #健康檢查的間隔時間(秒)lb_algo rr #輪詢(rr)調度算法lb_kind DR #直接路由(DR)群集工作模式! persistence 60 #連接保持時間(秒),若啟用請去掉!號protocol TCP #應用服務采用的是 TCP 協議real_server 192.168.10.103 80 { #第一個 Web 節點的地址、端口weight 1 #節點的權重TCP_CHECK { #健康檢查方式connect_port 80 #檢查的目標端口connect_timeout 3 #連接超時(秒)nb_get_retry 3 #重試次數delay_before_retry 4 //重試間隔(秒)}}
real_server 192.168.10.104 80 { #第二個 Web 節點的地址、端口weight 1 #節點的權重TCP_CHECK { #健康檢查方式connect_port 80 #檢查的目標端口connect_timeout 3 #連接超時(秒)nb_get_retry 3 #重試次數delay_before_retry 4 //重試間隔(秒)
}
(3)重新啟動Keepalived
systemctl restart keepalived
3.配置從調度器
vi /etc/keepalived/keepalived.conf
...... #省略部分信息
virtual_server 192.168.10.100 80 { #虛擬服務器地址(VIP)、端口delay_loop 15 #健康檢查的間隔時間(秒)lb_algo rr #輪詢(rr)調度算法lb_kind DR #直接路由(DR)群集工作模式! persistence 60 #連接保持時間(秒),若啟用請去掉!號protocol TCP #應用服務采用的是 TCP 協議real_server 192.168.10.103 80 { #第一個 Web 節點的地址、端口weight 1 #節點的權重TCP_CHECK { #健康檢查方式connect_port 80 #檢查的目標端口connect_timeout 3 #連接超時(秒)nb_get_retry 3 #重試次數delay_before_retry 4 //重試間隔(秒)}}
real_server 192.168.10.104 80 { #第二個 Web 節點的地址、端口weight 1 #節點的權重TCP_CHECK { #健康檢查方式connect_port 80 #檢查的目標端口connect_timeout 3 #連接超時(秒)nb_get_retry 3 #重試次數delay_before_retry 4 //重試間隔(秒)
}
systemctl restart keepalived
4.配置web節點服務器
ip addr add 192.168.10.100/32 dev lo label lo:0
nmcli c reload
nmcli c up lo
ip router add local 192.168.10.100/30 dev lo #不需要敲
router add -host 192.168.10.172 dev lo
永久生效:
vim /etc/rc.local
ip addr add 192.168.10.100/32 dev lo label lo:0
:wq
chmod +x /etc/rc.localvim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p