Nginx 中双机热备中 VIP(虚拟 IP)的配置与漂移原理

作者:袖梨 2026-08-07

双机热备中VIP由Keepalived动态管理,绑定于活跃Nginx节点,主故障时2–3秒内漂移到备节点;依赖VRRP协议(组播224.0.0.18)、一致virtual_router_id及健康检查脚本保障服务可用性与配置一致性。

双机热备中 VIP 的配置与漂移,本质是让客户端始终访问同一个 IP(即 VIP),而这个 IP 实际只绑定在当前活跃的 Nginx 节点上;主节点故障时,VIP 快速迁移到备节点,整个过程对用户透明。

VIP 不是静态配置的地址

VIP 是一个未分配给任何物理网卡的、仅由 Keepalived 动态管理的 IP 地址。它不写入 /etc/sysconfig/network-scripts/ 或通过 ip addr add 手动添加,而是由 Keepalived 在运行时自动绑定/解绑到指定网卡(如 ens33)。一旦 Keepalived 停止或降级为 BACKUP 状态,VIP 就会从该节点剥离。

  1. 主节点正常时:VIP 出现在 ip a 输出中,且 Nginx 正在监听该 VIP 的 80/443 端口
  2. 主节点宕机或 Keepalived 异常退出:VIP 在 2–3 秒内消失,并在备节点的同一网卡上出现
  3. 网络层无路由配置依赖:VIP 只需与主备真实 IP 处于同一子网,不需要额外网关或静态路由

漂移靠 VRRP 协议驱动

VRRP 是 Keepalived 实现 VIP 漂移的底层机制。主备节点通过组播地址 224.0.0.18 发送和监听 VRRP 报文(协议号 112),形成一个逻辑上的“虚拟路由器”。其中:

  1. MASTER 节点以高优先级(如 priority 100)持续广播通告,宣告自己持有 VIP
  2. BACKUP 节点监听这些通告,若连续多个周期(默认 3 秒)收不到 MASTER 的报文,就触发选举并升为 MASTER
  3. virtual_router_id 必须一致(1–255 之间),否则节点无法识别彼此属于同一 VRRP 组

防“假活”必须加健康检查

仅靠 Keepalived 进程存活不足以保证服务可用——Nginx 可能崩溃但 Keepalived 仍在运行,导致 VIP 滞留在故障节点上。因此需引入自定义健康检查脚本:

  1. 脚本定期执行 curl -I http://127.0.0.1:80 或检测 Nginx 进程是否存在
  2. 失败时,脚本返回非零值,Keepalived 将主动降低自身 priority,触发 VIP 漂移
  3. 该机制集成在 keepalived.conf 的 vrrp_scripttrack_script 段中

主备切换不是“IP 复制”,而是服务能力同步

VIP 漂移本身只是网络层动作,真正决定切换是否成功的,是主备节点的服务一致性:

  1. Nginx 配置文件(nginx.conf 及 include 的所有子配置)必须逐字相同
  2. 后端服务地址、SSL 证书路径、rewrite 规则、负载均衡策略等若有差异,用户会立即感知到跳转异常或 502 错误
  3. 静态资源、缓存目录、日志路径等建议使用共享存储或同步机制(如 rsync 定时同步),避免内容不一致

相关文章

精彩推荐