单台nginx负载均衡存在单点故障,需通过keepalived+vrrp实现主备高可用:配置双nginx节点一致,设置master/backup状态与优先级,绑定同一vip,并加入nginx进程健康检查脚本以触发自动降权切换。

靠单台 Nginx 做负载均衡,本身就是单点故障。要实现高可用主备切换,核心是让两台(或以上)Nginx 服务器对外共用一个虚拟 IP(VIP),当主节点宕机时,VIP 自动漂移到备用节点,流量无缝接管——这通常由 Keepalived 配合 VRRP 协议完成。
配置双 Nginx 节点作为负载均衡器
先确保两台服务器都已安装并配置好功能一致的 Nginx:
- 在每台机器上部署相同的 upstream 配置,指向后端真实服务(如应用服务器集群)
- 启用 proxy_pass、健康检查(如 max_fails/fail_timeout)、真实 IP 透传(proxy_set_header)等基础反向代理能力
- 确认 Nginx 可正常启动且能访问后端服务,避免切换后因配置错误导致整体不可用
用 Keepalived 实现 VIP 漂移
Keepalived 通过 VRRP 协议协调主备状态,关键在于三要素:状态标识、优先级、虚拟 IP。
- 主节点 keepalived.conf 中设置 state MASTER、priority 101(数值越高越优先)
- 备节点设为 state BACKUP、priority 99,并保持 virtual_router_id 和 auth_pass 完全一致
- virtual_ipaddress 块中声明同一个 VIP(如 192.168.1.100/24),该地址将绑定到主节点网卡,故障时自动迁移到备节点
加入 Nginx 进程健康检查
仅靠 Keepalived 心跳不够——如果 Nginx 进程崩溃但系统仍在运行,VIP 不会自动切换。需添加主动检测脚本:
- 定义 vrrp_script,例如执行 killall -0 nginx 或 curl -f http://127.0.0.1/health 检查服务存活
- 在 vrrp_instance 中 track_script 引用该脚本,配合 weight 调整优先级(如检测失败则 priority -2)
- 这样即使 Keepalived 进程还在,只要 Nginx 不可用,主节点就会主动降权,触发 VIP 切换
验证与注意事项
部署完成后,务必实测切换效果:
- 手动 systemctl stop nginx 后,观察备用节点是否几秒内获得 VIP(ip addr show 查看)
- 从客户端持续 curl 测试,确认连接不中断(理想情况下丢包 ≤ 1 次)
- 注意网卡名(interface)必须写对(如 ens160、eth0),防火墙需放行 VRRP 组播(协议号 112)











