linux集群漂移浮动ip的核心是通过keepalived实现vip在主备节点间自动切换,确保服务高可用;需配置state、priority、virtual_router_id及virtual_ipaddress,禁用vrrp_strict,放行vrrp协议,并可添加nginx健康检查脚本增强可靠性。

Linux中配置集群漂移浮动IP,核心目标是让一个虚拟IP(VIP)在主备节点间自动切换,保证服务不中断。这不是简单地给网卡加个IP,而是要结合高可用机制实现“谁健康谁持有VIP”。实际部署中,推荐使用 Keepalived,它轻量、稳定、基于标准VRRP协议,比手动脚本更可靠。
Keepalived基础配置(双节点主备)
以两台服务器为例:主节点 IP 192.168.72.50,备节点 IP 192.168.72.51,浮动IP设为 192.168.72.70。
- 两台都安装 Keepalived:
yum install -y keepalived(CentOS/Rocky)或apt install -y keepalived(Ubuntu) - 编辑主节点
/etc/keepalived/keepalived.conf:state MASTERpriority 100-
virtual_router_id 70(同一集群必须相同,且 1–255 范围内) -
virtual_ipaddress { 192.168.72.70/24 }(注意带子网掩码) - 务必注释或删除
vrrp_strict—— 否则 VIP 无法响应 ping 和业务请求
- 备节点配置基本一致,仅修改三项:
state BACKUP-
priority 90(必须低于主节点) -
virtual_router_id与主节点完全相同
- 启动服务:
systemctl enable --now keepalived,然后用ip a查看 VIP 是否出现在主节点的网卡上
关键避坑点(生产环境常出问题的地方)
很多 VIP 配置后“显示存在却无法访问”,往往卡在这几个细节:
-
禁用 vrrp_strict 模式:默认开启时,只有 VIP 是本机真实地址才允许响应 ICMP;去掉这行或加
#注释即可 -
清理冗余 virtual_server 块:如果只是做 VIP 漂移,不要保留 LVS 相关配置(如
virtual_server、real_server),它们会加载 ipvs 内核模块,抢占端口并干扰 VRRP - 关闭防火墙或放行 VRRP 协议:VRRP 使用协议号 112,需在 firewalld 或 iptables 中允许,否则主备无法通信、无法检测心跳
-
确保网络层支持多播:Keepalived 默认用多播(224.0.0.18)发 VRRP 报文;若网络设备禁用多播,需改用单播并在配置中指定
unicast_src_ip和unicast_peer
增强可靠性:加入服务健康检查
只靠网络连通性判断不够——比如 Nginx 进程挂了但系统还活着。这时需要自定义检查脚本:
- 写一个检查 Nginx 是否监听 80 端口的脚本,例如
/etc/keepalived/check_nginx.sh:#!/bin/bash killall -0 nginx >/dev/null 2>&1 || exit 1
- 在 keepalived.conf 的 global_defs 下添加:
vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight -10 } - 在 vrrp_instance 块里引用:
track_script { chk_nginx } - 这样一旦 Nginx 异常,主节点优先级自动降低,触发 VIP 漂移到备节点
验证与日常维护
配置完成后,重点验证三件事:
- 主节点运行时,
ip a | grep 192.168.72.70应有输出;备节点无此 IP - 从外部
ping 192.168.72.70和访问对应服务(如 curl http://192.168.72.70)应成功 - 手动停掉主节点的 keepalived:
systemctl stop keepalived,1–3 秒内 VIP 应出现在备节点,且服务持续可访问 - 日志查看:
journalctl -u keepalived -f,关注 state change 和 transition 日志











