Keepalived双机热备核心靠VRRP实现VIP自动漂移,需配置同步、网络可达、权限合规和状态可观察;主备环境一致、VRRP通信畅通、优先级合理时,5分钟内可完成部署验证。

Keepalived 在双机热备中核心是通过 VRRP 协议实现 VIP(虚拟 IP)自动漂移,部署关键在于配置同步、网络可达、权限合规和状态可观察。只要主备节点基础环境一致、VRRP 通信畅通、优先级设置合理,5 分钟内即可完成最小可行部署并验证成功。
基础准备:系统与依赖检查
确保两台服务器(如 node1/node2)满足以下条件:
- 操作系统版本一致(推荐 CentOS 7+/Ubuntu 20.04+),内核支持 VRRP(默认开启,无需额外加载模块)
- 关闭或放行防火墙对 VRRP 组播(224.0.0.18)及协议号 112 的访问:iptables -I INPUT -d 224.0.0.18/32 -p vrrp -j ACCEPT
- 安装 keepalived:yum install -y keepalived(CentOS)或 apt install -y keepalived(Ubuntu)
- 确认未启用 NetworkManager 管理网卡(易与 keepalived VIP 冲突),建议使用 systemd-networkd 或传统 network 服务
配置要点:主备角色与健康检查
编辑 /etc/keepalived/keepalived.conf,以 Nginx 后端为例(VIP=192.168.10.100):
- 全局段:设置 router_id(唯一标识)、notification_email(可选告警)
-
VRRP 实例段:
- 主节点:state MASTER,priority 100;备节点:state BACKUP,priority 90
- interface 指定真实网卡名(如 eth0),virtual_router_id 必须相同(1–255 范围内)
- advert_int 设为 1(秒级探测),authentication 使用 PASS(明文密码,两端一致)
- virtual_ipaddress 块中写入 VIP 及子网掩码,如 192.168.10.100/24 dev eth0
- 健康检查(可选但推荐):用 track_script 定义检测脚本(如检查 Nginx 进程或端口),并在 vrrp_instance 中引用,使 VIP 仅在服务可用时接管
启动与状态验证:三步确认是否生效
执行以下操作逐层验证:
- 启动服务:systemctl enable --now keepalived(两节点均执行)
- 查看日志:journalctl -u keepalived -n 20 -f,确认无“invalid”、“auth failure”或“no interface”错误
- 检查 VIP 归属:ip addr show eth0 | grep 192.168.10.100 —— 应仅在主节点出现;同时在备节点执行 ip route get 192.168.10.100 验证路由可达性
- 模拟故障:在主节点执行 systemctl stop keepalived,1–2 秒内 VIP 应自动出现在备节点,且客户端 ping/VIP 访问不中断
快速排障:常见失败原因直击
若 VIP 未漂移或频繁切换,优先排查:
- 网络层不通:主备间无法收发 VRRP 报文(用 tcpdump -i eth0 host 224.0.0.18 抓包确认)
- 配置不一致:virtual_router_id、auth password、interface 名称任一不同都会导致实例隔离
- 权限限制:非 root 用户无法绑定 VRRP 协议(systemctl status keepalived 查看 failed with code 1)
- 脚本误判:track_script 返回非 0 导致主节点主动降级,用 /etc/keepalived/check_nginx.sh 手动执行验证逻辑










