Keepalived 基於 VRRP(Virtual Router Redundancy Protocol)協議,提供輕量級的高可用方案:多台節點共享一個虛擬 IP(VIP),主節點故障時備節點自動漂移 VIP 接管流量,實現秒級故障切換。本文記錄四節點雙主雙備實戰部署全過程。

/etc/hosts 配置所有節點 hostname ↔ IP,或 DNS 解析。ntpdate 或 chrony 同步 NTP,避免日志時間混亂、VRRP 廣播間隔異常。keepalived、ipvsadm、kernel-headers 可安裝。224.0.0.18)與單播健康檢查端口通過。yum install -y gcc openssl-devel libnl3-devel ipset-devel iptables-devel \
kernel-headers make automake autoconf libtool

wget https://www.keepalived.org/software/keepalived-2.2.8.tar.gz # 示例版本
tar xf keepalived-2.2.8.tar.gz
cd keepalived-2.2.8
./configure --prefix=/usr/local/keepalived
make
make install

mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
/etc/keepalived/keepalived.conf 詳解! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com
}
notification_email_from keepalived@master
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER_01 # 全局唯一標識
}
vrrp_instance VI_1 {
state MASTER # 狀態:MASTER
interface eth0 # 綁定網卡(發送 VRRP 報文)
virtual_router_id 51 # VRRP 組 ID(0-255,主備一致)
priority 100 # 優先級(主 > 備)
advert_int 1 # 心跳間隔(秒)
authentication {
auth_type PASS
auth_pass 123456 # 簡單密碼認證(建議用 AH/IPsec)
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 # VIP/掩碼/設備
}
# 可選:健康檢查腳本,檢測 Nginx 進程/端口
# track_script {
# chk_nginx
# }
}
# 可選:定義健康檢查腳本
# vrrp_script chk_nginx {
# script "/etc/keepalived/check_nginx.sh"
# interval 2
# weight -20
# fall 3
# rise 2
# }
vrrp_instance VI_1 {
state BACKUP # 狀態:BACKUP
interface eth0
virtual_router_id 51 # 必須一致
priority 90 # 低於 Master
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.1.100/24 dev eth0
}
}
# 兩節點均執行
systemctl start keepalived
systemctl enable keepalived
# 驗證 VIP 掛載在 Master 上
ip addr show eth0 | grep 192.168.1.100
# 模擬 Master 故障
systemctl stop keepalived # Master 上執行
# 觀察 Backup 日志:VRRP_Instance VI_1 Transition to MASTER STATE
# 驗證 VIP 已漂移到 Backup
ip addr show eth0 | grep 192.168.1.100
/etc/keepalived/check_nginx.sh#!/bin/bash
# 檢測 Nginx 進程存活,死則權重 -20 觸發 VIP 漂移
if ! pgrep -x nginx >/dev/null; then
exit 1
fi
# 可選:檢測 80 端口響應
# curl -s -o /dev/null -w "%{http_code}" https://127.0.0.1 | grep -q 200 || exit 1
exit 0
配置 chmod +x,在 vrrp_instance 中引用 track_script { chk_nginx }。
firewall-cmd --add-protocol=vrrp --permanent 或允許 224.0.0.18 組播。單播模式需指定 unicast_peer。virtual_router_id 不重複,router_id 全局唯一。virtual_ipaddress 顯式指定 dev eth0。weight 設置不當導致主備頻繁切換,建議 fall 3 rise 2 增加穩定性。keepalived -d -D -S 1 前台調試模式輸出詳細日志到 syslog。延伸: Keepalived 常與 LVS(IPVS)結合實現四層負載均衡 + 高可用;七層場景常搭配 Nginx/HAProxy 做反向代理,Keepalived 僅負責 VIP 漂移。生產環境建議引入 notify_master/notify_backup/notify_fault 腳本對接監控告警(Zabbix/Prometheus/钉钉/企微)。