Keepalived 原理及配置(高可用)

一、Keepalived 原理

  • keepalived 基于 VRRP(虛擬路由冗余協議)實現高可用。

  • 核心原理是通過競選機制在多臺服務器(主 / 備節點)中選舉出一臺主節點承擔服務,同時備節點持續監控主節點狀態:主節點正常時,通過組播發送 VRRP 通告消息宣告存活,獨占虛擬 IP(VIP)對外提供服務;

  • 當主節點故障(如服務中斷、網絡異常),備節點因超時未收到通告,會觸發重新競選,優先級最高的備節點升級為主節點并接管 VIP,實現服務無縫切換,確保業務不中斷。

  • 此外,keepalived 還支持健康檢查(如檢測端口、URL 狀態),可更精準判斷服務可用性。

VRRP 原理

  • VRRP(虛擬路由冗余協議)是一種實現路由冗余的協議,核心是通過將多臺物理路由器組成一個 “虛擬路由器”,對外提供統一的虛擬 IP(VIP)和虛擬 MAC 地址,避免單點故障。

  • 工作時,虛擬路由器內的設備通過優先級競選主 / 備角色:優先級最高的成為主路由器,承擔數據包轉發任務,并定期發送 VRRP 通告消息(組播)宣告存活;

  • 備份路由器則監聽通告,若超時未收到主路由器消息(判定主節點故障),則觸發重新競選,優先級最高的備份節點升級為主路由器,接管 VIP 和虛擬 MAC,繼續提供路由服務,整個過程對客戶端透明,確保網絡持續可用。

?


?

二、Keepalived 日常配置

2.1.Keepalived 日志獨立

vim /etc/sysconfig/keepalived 
########
KEEPALIVED_OPTIONS="-D -S 6"
########
?
vim /etc/rsyslog.conf
########
local7.* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  /var/log/boot.log
local6.* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  /var/log/keepalived.log     # 添加此條
########
?
systemctl restart rsyslog.service
systemctl restart keepalived.service 
?
# 測試:查看新日志文件,有內容則實驗成功
cat /var/log/keepalived.log

?

2.2.Keepalived 子配置文件

vim /etc/keepalived/keepalived.conf 
######
include /etc/keepalived/conf.d/*.conf           # 在主配置文件添加此條,表示包含 conf.d 目錄下 .conf 結尾的文件
######
?
# 檢查語法
keepalived -t -f /etc/keepalived/keepalived.conf 
?
# 重啟服務
systemctl restart keepalived.service 

?


?

三、Keepalived 模式配置

3.1.Keepalived 單主模式

實驗準備:兩臺 keepalived 主機,兩臺 rs 主機,一臺 client 主機

  • ka-master 主機:192.168.67.100

  • ka-slave 主機:192.168.67.200

  • rs1主機:192.168.13.10

  • rs2 主機:192.168.13.20

keepalived 主機配置

# 時間同步
# 100 作為服務vim /etc/chrony.conf端,200 作為客戶端
# 服務端配置(100)
vim /etc/chrony.conf
...
allow 192.168.67.0/24               # 開啟服務端允許 67 網段連接本機
...
systemctl restart chronyd.service 
?
#客戶端配置(200)
vim /etc/chrony.conf 
...
server 192.168.67.100 iburst
...
systemctl restart chronyd.service 
?
# 客戶端測試:查看時間同步結果,顯示 ^* 則同步成功
chronyc sources -v

# 安裝 keepalived 并配置
dnf install keepalived -y
vim /etc/keepalived/keepalived.conf
##################
...
! Configuration File for keepalived
?
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44
}
vrrp_instance VI_1 {state MASTER                # slave 主機設置為 BACKUPinterface eth0virtual_router_id 51priority 100                # 優先級,slave 主機設置為 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
...
# 其他都注釋掉
##################
?
# 重啟服務
systemctl restart keepalived.service
systemctl enable --now keepalived.service
?
# 測試:在優先級高的主機上查看 VIP
ifconfig

# 查看組播情況
tcpdump -i eth0 -nn host 224.0.0.44

master 的主機會發送組播消息,告訴 slave 的主機自己存活,如果 master 的主機故障,則會出現 VIP 飄逸到 slave 的主機。

如果 master 主機恢復運行,VIP 會重新漂移到 master 主機,因為 master 主機的優先級高于 slave 主機。

問題:VIP 反復飄逸,會導致網絡波動。

所以產生了非搶占模式。

?

3.2.Keepalived 非搶占模式

在搶占模式的基礎上,修改 Keepalived 主機配置文件

vim /etc/keepalived/keepalived.conf
#######
vrrp_instance VI_1 {state BACKUP                # 兩個主機的 state 都需要是 BACKUP,因為非搶占模式沒有主備之分interface eth0virtual_router_id 51priority 100                # 優先級,另一臺主機設置為 80nopreempt                   # 在搶占模式的基礎上,添加此條,實現非搶占模式advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
#######

測試

systemctl restart keepalived.service

# 停止 master 主機服務
# 發生 VIP 飄逸
systemctl stop keepalived.service

# 再次重啟 master 服務,VIP 不發生飄逸
# master 優先級高于 slave 主機,但是服務恢復后,不發生 VIP 搶占
systemctl start keepalived.service
# VIP 仍然在 slave 上

非搶占模式弊端:如果 slave 主機的性能沒有 master 主機好,那么讓 slave 注意一直承載 VIP 會發生性能瓶頸,所以出現了延遲搶占模式。

3.3.Keepalived 延遲搶占模式

在搶占模式的基礎上,修改 Keepalived 主機配置文件

vim /etc/keepalived/keepalived.conf
#######
vrrp_instance VI_1 {state BACKUP                # 延遲搶占模式兩臺主機都為 BACKUPinterface eth0virtual_router_id 51priority 100                # slave 主機優先級 80preempt_delay 10            # 延遲時間配置,默認時間單位 s,不用加 sadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
#######

測試:延遲搶占模式,master 主機故障,VIP 會飄逸到 slave 主機,如果 master 主機恢復 VIP 會在設置的延遲搶占時間完畢后搶占 VIP。

systemctl stop keepalived.service 

master 沒有 VIP,VIP 漂移到 slave 上。

10 s 后 VIP 會飄逸回 master。

?

3.4.Keepalived 單播模式

因為 Keepalived 的心跳檢測默認是發送組播的形式保活,會造成網絡擁堵,所以需要配置單播模式,減少網絡流量。

vim /etc/keepalived/keepalived.conf
#######
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100preempt_delay 10advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}unicast_src_ip 192.168.67.100           # 本機 IP,注意:兩臺主機需按需配置unicast_peer {192.168.67.200                      # 對端主機 IP,注意:兩臺主機需按需配置}
}
#######

測試

# 在承載 vIP 的主機上查看單播情況
tcpdump -i eth0 -nn src host 192.168.67.100 and dst 192.168.67.200

?

3.5.Keepalived 郵件告警

Keepalived 下載軟件

注意:Keepalived 主機的主機名要是域名的模式,這樣發郵件才不會被卡住。

# 配置主機名
hostnamectl set-hostname ka-master.zyz.org
?
# 下載軟件
dnf install s-nail sendmail -y
?
vim /etc/mail.rc
######
set from=zhaoyz0911@163.com
set smtp=smtp.163.com
set smtp-auth-user=zhaoyz0911@163.com
set smtp-auth-password=QXbQYU3c48EWe8Ch         # 此驗證碼要到郵箱里開啟 POP3 并獲得
set smtp-auth=login
set ssl-verify=ignore
######
?
systemctl restart sendmail.service
netstat -antlupe | grep 25

# 測試郵件是否可以發出
echo hello | mailx -s test zhaoyz0911@163.com

郵箱收到此郵件

vim /etc/keepalived/mail.sh
######
#!/bin/bash
mail_dest='zhaoyz0911@163.com'
?
mail_send()
{mail_subj="$HOSTNAME to be $1 vip 轉移"mail_mess="`date +%F\ %T`: vrrp 轉移,$HOSTNAME 變為 $1"echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 inmaster)mail_send master;;backup)mail_send backup;;fault)mail_send fault;;*)exit 1;;
esac
######
?
chmod +x /etc/keepalived/mail.sh
# 修改 Keepalived 配置文件,添加 keepalived 的狀態變化時,可以自動觸發腳本的功能
vim /etc/keepalived/keepalived.conf 
######
! Configuration File for keepalived
?
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44enable_script_security               # 啟用腳本安全機制,限制健康檢查腳本的執行權限script_user root                     # 指定健康檢查腳本的執行用戶為 root
}
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100preempt_delay 10advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}unicast_src_ip 192.168.67.100unicast_peer {192.168.67.200}notify_master "/etc/keepalived/mail.sh master"      # 當當前節點從其他狀態切換為 master 狀態時觸發notify_backup "/etc/keepalived/mail.sh backup"      # 當當前節點從其他狀態切換為 backup 狀態時觸發notify_fault "/etc/keepalived/mail.sh faild"        #當前節點因故障進入 fault 狀態時觸發
}
######

測試

systemctl restart keepalived.service

?

收到 VIP 轉移的郵件,試驗成功

3.6.Keepalived 雙主模式

Keepalived 主機配置

! Configuration File for keepalived
?
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44
}
vrrp_instance WEB_VIP {state MASTER                    # 第二臺 Keepalived 主機改為 BACKUPinterface eth0virtual_router_id 51priority 100                    # 第二臺 Keepalived 主機改為 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
vrrp_instance DB_VIP {state BACKUP                    # 第二臺 Keepalived 主機改為 MASTERinterface eth0virtual_router_id 52        priority 80                     # 第二臺 Keepalived 主機改為 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.160/24 dev eth0 label eth0:1}
}

重啟服務,測試

systemctl restart keepalived.service

?

關閉一臺 Keepalived 主機,VIP 自動漂移到第二臺 Keepalived 主機,則有兩個 VIP。

systemctl stop keepalived.service 


?

四、Keepalived 高可用

4.1.Keepalived + LVS - DR 單主模式

實驗準備:關閉所有主機的 SElinux 和 防火墻,全都為 NAT 模式網卡

  • client:192.168.67.123

  • ka-master:192.168.67.100、VIP:192.168.67.150

  • ka-slave:192.168.67.200、VIP:192.168.67.150

  • rs1:192.168.67.10、VIP:192.168.67.150

  • rs2:198.168.67.20、VIP:192.168.67.150

后端 rs 配置

配置 nginx 服務、配置虛擬網卡添加 VIP、arp 抑制

yum install nginx -y
echo 192.168.67.10 > /usr/share/nginx/html/index.html       # 另一個主機配置自己的 IP 作為默認發布文件內容
systemctl enable --now nginx
curl localhost

# 兩個主機都需要配置 VIP
nmcli connection add type dummy ifname rstest ipv4.method manual ipv4.addresses 192.168.67.150/32 connection.autoconnect yes
nmcli connection up dummy-rstest
ip a

# arp 抑制
echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf 
echo net.ipv4.conf.rstest.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf 
echo net.ipv4.conf.rstest.arp_announce = 2 >> /etc/sysctl.conf 
sysctl -p

Keppalived 主機配置

安裝 ipvsadm 工具、配置 Keepalived 實現后端檢測和負載均衡

yum install ipvsadm -y

修改 Keepalived 配置文件

vim /etc/keepalived/keepalived.conf
########
! Configuration File for keepalived
?
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44             # 組播
}
vrrp_instance WEB_VIP {state MASTER                            # 另一個主機設置為 BACKUPinterface eth0virtual_router_id 51priority 100                            # 另一個主機設置為 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
virtual_server 192.168.67.150 80 {          # 類似于 ipvsadm -A 調度主機delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.67.10 80 {          # 類似于 ipvsadm -a 后端主機weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2retry 3delay_before_retry 3}}real_server 192.168.67.20 80 {          # 類似于 ipvsadm -a 后端主機weight 1TCP_CHECK {connect_timeout 2retry 3delay_before_retry 3connect_port 80}}
}
########
?
systemctl restart keepalived.service 

驗證:查看 VIP

在持有 VIP 的主機上查看 ipvs 策略

客戶端測試:輪詢結果

4.2.Keepalived + LVS - DR 雙主模式

實驗準備:關閉所有主機的 SElinux 和 防火墻,全都為 NAT 模式網卡

  • client:192.168.67.123

  • ka-master:192.168.67.100/24、VIP1:192.168.67.150/24、VIP2:192.168.67.160/24

  • ka-slave:192.168.67.200/24、VIP1:192.168.67.150/24、VIP2:192.168.67.160/24

  • rs1:192.168.67.10/24、VIP1:192.168.67.150/32、VIP2:192.168.67.160/32

  • rs2:198.168.67.20/24、VIP1:192.168.67.150/32、VIP2:192.168.67.160/32

(VIP1 是提供 Nginx 服務的 VIP,VIP2 是提供 Mariadb 服務的 VIP)

后端 rs 配置

配置 nginx 服務:安裝軟件、默認發布文件、測試

配置虛擬網卡添加 VIP、arp 抑制

yum install nginx -y
echo 192.168.67.10 > /usr/share/nginx/html/index.html       # 另一個主機配置自己的 IP 作為默認發布文件內容
systemctl enable --now nginx
curl localhost

# 兩個主機都需要配置 VIP
nmcli connection add type dummy ifname rstest ipv4.method manual ipv4.addresses 192.168.67.150/32 connection.autoconnect yes
nmcli connection add type dummy ifname dbtest ipv4.method manual ipv4.addresses 192.168.67.160/32 connection.autoconnect yes
nmcli connection up dummy-rstest
nmcli connection up dummy-dbtest
ip a

# arp 抑制
echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf 
echo net.ipv4.conf.rstest.arp_ignore = 1 >> /etc/sysctl.conf
echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf 
echo net.ipv4.conf.rstest.arp_announce = 2 >> /etc/sysctl.conf 
sysctl -p

配置 Mariadb 服務:安裝軟件、配置 server-id、授權用

# 安裝 mariadb
yum install mariadb-server ?-y
?
vim /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
...
server-id=10        # 添加此行,注意兩個主機的 id 需要不一致
...
?
systemctl enable --now mariadb
?
mysql -e "grant all on *.* to zyz@'%' identified by 'zyz'"      # 添加可遠程登錄的用戶
?
# 測試:遠程登錄 mysql
mysql -uzyz -pzyz -h192.168.13.10
mysql -uzyz -pzyz -h192.168.13.20

測試 mysql server_id

Keppalived 主機配置

安裝 ipvsadm 工具、配置 Keepalived 實現后端檢測和負載均衡

yum install ipvsadm -y

修改 Keepalived 配置文件:雙主模式,需要配置兩個 vrrp_instance 和兩個 virtual_server,一個提供 Web 服務,一個提供 Mysql 服務。

vim /etc/keepalived/keepalived.conf
########
! Configuration File for keepalived
?
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44                 # 組播
}
vrrp_instance WEB_VIP {state MASTER                                # 另一個主機設置為 BACKUPinterface eth0virtual_router_id 51priority 100                                # 另一個主機設置為 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}
}
vrrp_instance DB_VIP {state BACKUP                                # 另一個主機設置為 MASTERinterface eth0virtual_router_id 52priority 80                                 # 另一個主機設置為 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.160/24 dev eth0 label eth0:1}
}
virtual_server 192.168.67.150 80 {              # 提供 Web 服務的 VIP,端口 80delay_loop 6lb_algo rrlb_kind DRprotocol TCP
?real_server 192.168.67.10 80 {              # 提供 Web 服務的 RS1,端口80weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2retry 3delay_before_retry 3}}real_server 192.168.67.20 80 {              # 提供 Web 服務的 RS2,端口80weight 1TCP_CHECK {connect_timeout 2retry 3delay_before_retry 3connect_port 80}}
}
virtual_server 192.168.67.160 3306 {            # 提供 Mysql 服務的 VIP,端口 3306delay_loop 6lb_algo rrlb_kind DRprotocol TCP
?real_server 192.168.67.10 3306 {            # 提供 Mysql 服務的 RS1,端口 3306weight 1TCP_CHECK {connect_timeout 10retry 3delay_before_retry 5connect_port 3306}}real_server 192.168.67.20 3306 {            # 提供 Mysql 服務的 RS2,端口 3306weight 1TCP_CHECK {connect_timeout 10retry 3delay_before_retry 5connect_port 3306}}
}
########
?
systemctl restart keepalived.service 

驗證:查看 VIP

查看 ipvs 策略,兩個 Keepalived 主機都可查到

客戶端測試:Web 結果

客戶端測試:Mysql 結果

?

4.3.Keepalived + HAProxy(Vrrp)腳本檢測修改優先級

實驗準備:關閉所有主機的 SElinux 和 防火墻,全都為 NAT 模式網卡

  • client:192.168.67.123

  • ka-master:192.168.67.100/24、VIP:192.168.67.150/24

  • ka-slave:192.168.67.200/24、VIP:192.168.67.150/24

  • rs1:192.168.67.10/24

  • rs2:198.168.67.20/24

Haproxy 實現后端檢測和流量分發,Keepalived 實現 HAProxy 的健康檢測,如果 HAProxy 故障,通過 VRRP 健康檢測腳本實現動態改變優先級,實現 VIP 的漂移。Keepalived + HAProxy 模式只能使用搶占模式和延遲搶占模式,不適用于非搶占模式。

后端 rs 配置

配置 nginx 服務:安裝軟件、默認發布文件、測試

yum install nginx -y
echo 192.168.67.10 > /usr/share/nginx/html/index.html       # 另一個主機配置自己的 IP 作為默認發布文件內容
systemctl enable --now nginx
curl localhost

Keepalived 主機配置 HAProxy 服務

兩個 Keepalived 主機都需配置 HAProxy 服務,內容相同。

yum install haproxy -y
vim /etc/haproxy/haproxy.cfg
# 除以下內容都注釋掉
##########
globallog ? ? ? ? 127.0.0.1 local2chroot ? ?  /var/lib/haproxypidfile ? ? /var/run/haproxy.pidmaxconn ? ? 4000user ? ? ?  haproxygroup ? ? ? haproxydaemonstats socket /var/lib/haproxy/statsssl-default-bind-ciphers PROFILE=SYSTEMssl-default-server-ciphers PROFILE=SYSTEM
defaultsmode ? ? ? ? ? ? ? ? ?  httplog ? ? ? ? ? ? ? ? ? ? globaloption ? ? ? ? ? ? ? ?  httplogoption ? ? ? ? ? ? ? ?  dontlognulloption http-server-closeoption forwardfor ? ? ? except 127.0.0.0/8option ? ? ? ? ? ? ? ?  redispatchretries ? ? ? ? ? ? ? ? 3timeout http-request ?  10stimeout queue ? ? ? ? ? 1mtimeout connect ? ? ? ? 10stimeout client ? ? ? ?  1mtimeout server ? ? ? ?  1mtimeout http-keep-alive 10stimeout check ? ? ? ? ? 10smaxconn ? ? ? ? ? ? ? ? 3000
listen webclusterbind ?  *:80mode ?  httpbalance roundrobinserver web1 192.168.67.10:80 check inter 3 fall 2 rise 2server web2 192.168.67.20:80 check inter 3 fall 2 rise 2
#############

Keepalived 主機配置 Keepalived 服務

mkdir /etc/keepalived/scrips/
?
cat >> /etc/keepalived/scrips/haproxy.sh << EOF
#!/bin/bash
killall -0 haproxy &> /dev/null
EOF
?
chmod +x /etc/keepalived/scrips/haproxy.sh 
?
?
vim /etc/keepalived/keepalived.conf
#############
! Configuration File for keepalived
global_defs {notification_email {haha@haha.org}notification_email_from haha@haha.orgsmtp_server 127.0.0.0smtp_connect_timeout 30router_id ka-mastervrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.44enable_script_security           # 啟用腳本安全檢查機制script_user root                 # 指定執行腳本時使用的用戶身份為 root
}
vrrp_script TEST_CHECK {                        # 定義健康檢查腳本script "/etc/keepalived/scrips/haproxy.sh"  # 腳本路徑interval 1                                  # 腳本執行間隔,每1秒檢查一次weight -30                                  # 腳本返回值非 0 時,當前節點優先級減少30fall 2                                      # 連續失敗2次后,判定服務異常rise 2                                      # 連續成功2次后,判定服務恢復正常timeout 2                                   # 腳本執行超時時間,超過2秒視為執行失敗
}
vrrp_instance WEB_VIP {state MASTER                                # 第二臺主機配置為 BACKUPinterface eth0virtual_router_id 51priority 100                                # 第二臺主機配置為 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.67.150/24 dev eth0 label eth0:0}track_script {                              # 關聯健康檢查腳本TEST_CHECK                              # 引用上面定義的 TEST_CHECK 腳本,監控haproxy 狀態}unicast_src_ip 192.168.67.100               # 單播配置:源 IP,第二臺主機配置為本機 IPunicast_peer {192.168.67.200                          # 單播配置:目標 IP,第二臺主機配置為對方 IP}
}
#############
?
echo net.ipv4.ip_nonlocal_bind = 1 >> /etc/sysctl.conf 
sysctl -p
?
systemctl start keepalived.service 
systemctl enable --now keepalived.service 
systemctl start haproxy
systemctl enable --now haproxy

測試

持有 VIP 的主機查看單播情況:可以看到 vrid 51 的優先級是 100.

在此主機上關閉 HAProxy 服務,Keepalived 檢測到 HAProxy 故障,運用腳本降低此主機的優先級為 70。

再開啟此主機上的 HAProxy 服務,可以看到優先級恢復為 100。

在以上的操作過程中,client 客戶端訪問 VIP,Web 服務不停滯,客戶端感受不到服務的故障,實現了高可用。

?


?

五、總結

  1. LVS + Keepalived

    • LVS 本身是內核態的負載均衡模塊(工作在 TCP/IP 協議棧的傳輸層),但它的管理和后端健康檢查依賴 Keepalived實現。

    • Keepalived 不僅負責 LVS 的主備高可用(VIP 漂移),還內置了對后端 RS 的健康檢查(如 ICMP、TCP 端口檢測),并能動態調整 LVS 的路由表(通過 ipvsadm 接口)。

    • 簡單說:Keepalived 是 “大腦”,既管高可用,又管后端檢測和指揮 LVS 做流量分發;LVS 更像 “執行器”,只負責按 Keepalived 的規則轉發流量。

  2. HAProxy + Keepalived

    • HAProxy 是用戶態的負載均衡軟件(工作在應用層),自帶完整的流量分發邏輯(支持 HTTP/HTTPS 等七層規則)和后端 RS 健康檢查(更精細,如 URL 返回碼檢測)。

    • 此時 Keepalived 的作用被簡化:僅負責 HAProxy 的主備高可用(監控 HAProxy 進程狀態,通過優先級調整實現 VIP 漂移),不參與流量分發和后端檢測。

    • 簡單說:HAProxy 是 “全能選手”,自己管流量分發和后端檢測;Keepalived 只當 “保鏢”,確保 HAProxy 本身不單點故障。

底層核心差異: LVS 與 Keepalived 的耦合度更高(Keepalived 原生支持 LVS 配置),而 HAProxy 是獨立的負載均衡器,Keepalived 僅為其提供高可用保障。這種差異導致 LVS 方案更適合四層高性能場景,HAProxy 方案更適合七層復雜規則場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916128.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916128.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916128.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從代碼混亂到井然有序:飛算JavaAI的智能治理之道

文章目錄一、前言二、飛算JavaAI平臺三、飛算JavaAI安裝流程3.1 Idea安裝配置3.2 官網注冊登入四、飛算JavaAI獨特魅力:合并項目場景4.1 ERP老項目精準翻新&#xff1a;保留核心邏輯的智能改造方案4.2 智能合并&#xff1a;重構ERP系統的代碼迷宮4.3 ERP接口智能導航&#xff1…

iOS打開開發者模式

啟用開發者模式的方法在iOS設備上啟用開發者模式通常需要連接Xcode或通過設置手動開啟&#xff0c;以下是具體步驟&#xff1a;通過Xcode啟用將iOS設備通過USB線連接到Mac電腦。打開Xcode&#xff08;需提前安裝&#xff09;。在Xcode的菜單欄中選擇 Window > Devices and S…

leetcode101.對稱二叉樹樹(遞歸練習題)

文章目錄一、 題目描述二、 核心思路&#xff1a;判斷左右子樹是否互為鏡像三、 遞歸的終止條件 (Base Cases)四、 代碼實現與深度解析五、 關鍵點與復雜度分析六、 總結與對比 (LC100 vs LC101)LeetCode 101. 對稱二叉樹 - 力扣【難度&#xff1a;簡單&#xff1b;通過率&…

【國內電子數據取證廠商龍信科技】誰是躲在“向日葵”后的

一、前言大家可能每天都在使用在遠控軟件&#xff0c;我們在享受遠控軟件帶來的便利同時&#xff0c;犯罪者也在使用遠控軟件進行違法犯罪活動&#xff0c;以達到隱藏自己的目的。市面上常用的遠控軟件有“向日葵”、“TeamViewer”。二、案件背景在一次電信詐騙案件支援中&…

SAP-PP-MRPLIST

MRP(物料需求計劃)分析功能,主要包含以下要點: 程序通過選擇工廠和物料/銷售訂單范圍作為輸入條件,支持兩種展示方式:ALV表格和樹形結構 核心功能包括: 物料主數據查詢(MAKT/MARA表) 銷售訂單數據查詢(VBAP表) BOM展開(CS_BOM_EXPL_MAT_V2函數) MRP數據獲取(MA…

MIT線性代數01_方程組的幾何解釋

Linear Algebra Lecture #1 W. Gilbert Strangn linear equations, n unknowns row picturecol pictureMatrix form {2x?y0?x2y3 \left\{\begin{matrix} 2x - y 0 \\ -x 2y 3 \end{matrix}\right. {2x?y0?x2y3? 1 Row Picture2 Column PictureWhat are all combination…

FreeRTOS-中斷管理

學習內容中斷概念中斷是計算機系統中一種重要的事件驅動機制&#xff0c;用于在特定條件下打斷正在執行的程序&#xff0c;并跳轉到預定義的中斷處理程序中執行特定的操作。當發生中斷時&#xff0c;處理器會立即中止當前正在執行的指令&#xff0c;保存當前的執行狀態&#xf…

圖像梯度處理與邊緣檢測

在圖像處理的世界里&#xff0c;我們常常需要從復雜的像素矩陣中提取有意義的信息 —— 比如一張照片中物體的輪廓、醫學影像中病灶的邊界、自動駕駛視野里的道路邊緣。這些 “邊界” 或 “輪廓” 在專業術語中被稱為 “邊緣”&#xff0c;而捕捉邊緣的核心技術&#xff0c;離不…

GPU服務器與PC 集群(PC農場):科技算力雙子星

在數字經濟高速發展的今天&#xff0c;算力已成為驅動科技創新與產業變革的核心引擎。GPU服務器憑借其強大的并行計算能力&#xff0c;在圖形渲染、人工智能訓練等領域展現出不可替代的優勢&#xff1b;而PC集群則通過分布式架構&#xff0c;以高性價比和靈活擴展特性&#xff…

秋招Day19 - 分布式 - 分布式鎖

單體時代&#xff0c;可以直接用本地鎖來實現對競爭資源的加鎖&#xff0c;分布式環境下就要用到分布式鎖了有哪些分布式鎖的實現方案&#xff1f;MySQL分布式鎖、Zookeeper分布式鎖、Redis分布式鎖MySQL分布式鎖如何實現&#xff1f;創建一張鎖表&#xff0c;對字段定義唯一性…

AIStarter平臺亮點解析:從ComfyUI項目上架到一鍵運行的完整指南

大家好&#xff01;今天分享一個AIStarter平臺的深度體驗&#xff0c;帶你了解如何通過這個平臺輕松上架和運行AI項目&#xff01;視頻中&#xff0c;博主在凌晨分享了AIStarter的強大功能&#xff0c;重點展示了ComfyUI 4.0和5.0整合包的上架過程&#xff0c;以及如何簡化AI項…

電腦錄屏軟件推薦:如何使用oCam錄制游戲、教程視頻

在工作、學習或游戲過程中&#xff0c;我們經常需要錄制電腦屏幕&#xff0c;比如制作教程視頻、記錄游戲操作、分享軟件使用過程等。oCam 是一款功能強大且操作簡單的屏幕錄制工具&#xff0c;支持 Windows 系統&#xff0c;深受用戶喜愛。今天簡鹿辦公就來手把手教你如何使用…

安裝cuml報錯

安裝命令 &#xff08;注意cuda的版本&#xff09; pip install --no-cache-dir --extra-index-urlhttps://pypi.nvidia.com cuml-cu11 報錯&#xff1a; 找了很多網上的教程 1.版本問題 沒解決 pip install --upgrade pip pip install --upgrade setuptools 2.參考下面博…

【ECharts?】解決Vue 中 v-show 導致組件 ECharts 樣式異常問題

解決Vue 中 v-show 導致組件 ECharts 樣式異常問題 問題概述 在使用 Vue 的 v-show 指令實現 <PageOne/>、<PageTwo/>、<PageThree/> 三個視圖的定時切換時&#xff0c;<PageTwo/> 顯示時出現了異常&#xff0c;具體表現為 ECharts 圖表渲染圖表尺寸異…

旅游管理虛擬仿真實訓室:重構實踐教學新生態

在旅游產業數字化轉型與教育信息化深度融合的背景下&#xff0c;旅游管理虛擬仿真實訓室成為連接理論教學與行業實踐的關鍵紐帶。它通過沉浸式技術還原旅游場景&#xff0c;解決傳統實訓中資源受限、風險較高、時空局限等問題&#xff0c;為旅游管理專業人才培養提供全新路徑。…

【在線五子棋對戰】十、對戰玩家匹配管理模塊

文章目錄前言Ⅰ. 匹配隊列實現Ⅱ. 匹配隊列管理類實現完整代碼前言 五子棋對戰的玩家匹配是根據自己的天梯分數進行匹配的&#xff0c;而服務器中將玩家天梯分數分為三個檔次&#xff1a; 青銅&#xff1a;天梯分數小于 2000 分白銀&#xff1a;天梯分數介于 2000~3000 分之間…

k8s之ingress定義https訪問方式

接上文&#xff1a;https://blog.csdn.net/soso678/article/details/149607069?spm1001.2014.3001.5502定義后端應用與service [rootmaster ingress]# cat my-nginx.yml apiVersion: apps/v1 kind: Deployment metadata:name: my-nginx spec:selector:matchLabels:run: my-n…

《C++ vector 完全指南:vector的模擬實現》

《C vector 完全指南&#xff1a;vector的模擬實現》 文章目錄《C vector 完全指南&#xff1a;vector的模擬實現》一、定義vector的成員變量二、用vector實現動態二維數組三、vector的接口實現1.vector的默認成員函數&#xff08;1&#xff09;構造函數實現&#xff08;2&…

騰訊云代碼助手使用指南

騰訊云代碼助手使用指南什么是騰訊云代碼助手功能區展示功能介紹功能演示一、創建新項目1.先用Chat 把口語化的需求轉換成AI更容易接受的結構化提示詞2.再用Craft 模式進行代碼生成3.成果展示二、老項目探索1.使用Codebase 幫理解項目代碼三、代碼補全1.只需輸入標準的函數名&a…

【vue3+vue-pdf-embed】實現PDF+圖片預覽

【vue3vue-pdf-embed】實現PDF圖片預覽項目背景項目代碼分析代碼項目背景 技術棧&#xff1a;vue3Tselementplus 需要實現PDF和圖片預覽 圖片預覽很好解決了&#xff0c;可以用elementplus 自帶的組件el-image 可實現 PDF預覽可以用搜了一圈&#xff0c;有兩個方案&#xff0c…