vrrp协议是解决网关单点故障的冗余机制,通过将多台路由器虚拟为一台拥有虚拟ip和mac的路由器,由master转发流量、backup监听心跳并在超时(默认3秒)后自动接管,支持毫秒级切换与免费arp更新,保障网络连续性。

VRRP 协议是 Nginx 双机热备架构中实现自动故障切换的底层通信机制,它不直接处理 HTTP 请求,而是让两台 Nginx 服务器“假装”成一台虚拟路由器,共用一个对外服务的虚拟 IP(VIP),从而屏蔽后端真实节点的单点风险。
为什么必须用 VRRP 而不是手动切 IP
若仅靠脚本在主节点宕机后手动绑定 VIP 到备机,存在明显缺陷:切换延迟高(秒级甚至分钟级)、易出错、无法感知网络层连通性、客户端 ARP 缓存未及时刷新会导致短暂不可达。VRRP 通过标准组播通告(目的地址 224.0.0.18,协议号 112)持续宣告主节点存活状态,备份节点在连续 3 次(默认每 1 秒一次)收不到心跳后立即接管,整个过程通常控制在 1~3 秒内,且自动触发免费 ARP 广播更新下游设备的 MAC 表,保障流量无缝续传。
VRRP 在 Nginx 热备中的实际角色
Keepalived 是 VRRP 的开源实现,它本身不代理请求,只负责三件事:
- 按 priority 值选举 Master/Backup 角色,virtual_router_id 必须一致才能组成同一备份组
- Master 节点周期性发送 VRRP Advertisement 报文,Backup 节点监听并判断超时
- 状态变更时调用系统命令(如 ip addr add)绑定或解绑 VIP,并可联动执行自定义脚本(如检测 nginx 进程是否存活)
没有 VRRP 就没有真正的“热备”
单纯部署两台 Nginx 并同步配置,只是静态冗余;只有引入 VRRP 才具备动态决策能力。例如:
- 主节点 Nginx 进程崩溃但系统仍在线 → 健康检查脚本触发优先级降为 0,VRRP 主动让出 Master 身份
- 主节点网卡故障或交换机链路中断 → VRRP 组播包发不出,Backup 自动升为 Master
- 主节点临时维护需人工切换 → 执行 keepalived -D 或调整 priority,VRRP 按协议平滑移交,不丢请求
关键配置不能错的细节
VRRP 行为高度依赖几个核心参数,任一错配都会导致 VIP 不漂移或脑裂:
- 两台机器必须在同一二层广播域(同网段),且能互相 ping 通
- firewalld/iptables 必须放行 VRRP 协议(IP proto 112),不是 TCP/UDP 端口
- virtual_router_id 在组内唯一,取值范围 1–255,主备必须完全一致
- priority 主节点建议设为 100+(如 110),备节点设为 90–99,避免相等导致选举失败
- 启用 nopreempt 时,原 Master 恢复后不会抢回 VIP,适合避免频繁切换场景











