nginx双机热备的状态同步指配置一致、服务可用、故障可接管三类状态的分层协同保障,需通过inotify+rsync实现配置同步、keepalived实现健康检测与vip漂移、上层组件解决应用层状态延续。

在 Nginx 双机热备环境中,“状态同步”不是指 Nginx 自身维护连接或会话状态(它本身是无状态的),而是指**配置一致、服务可用、故障可接管**这三类关键状态的协同保障。真正的“同步”需分层实现,不能依赖 Nginx 单一机制。
配置文件实时同步
两台 Nginx 服务器必须运行完全相同的配置,否则 VIP 切换后行为可能异常。推荐使用 inotify + rsync 组合实现主→备自动同步:
- 在主节点安装
inotify-tools,监控/etc/nginx/conf.d/或整个/etc/nginx/目录的增删改事件 - 备节点启用
rsyncd服务,配置只读权限受限的模块(如[nginx-conf]) - 主节点脚本监听到变更后,立即执行
rsync -avz --delete /etc/nginx/ user@backup::nginx-conf - 配合密码文件(
/etc/rsync.passwd)和严格权限(chmod 600),确保传输安全
服务健康与故障感知同步
Nginx 不自带心跳检测,需借助 Keepalived 实现状态同步判断:
- Keepalived 通过 VRRP 协议周期性发送通告(
advert_int 1),双方据此确认对方存活 - 主节点优先级设为
100,备节点设为90;当主节点 Keepalived 进程退出或网卡失联,VIP 自动漂移到备节点 - 可增强检测:在
vrrp_script中加入对nginx -t && pgrep nginx的校验,失败则降低优先级触发切换
应用层状态不依赖 Nginx 同步
Nginx 本身不保存用户会话、连接池或缓存状态。若业务需要状态延续,必须由上层解决:
- 会话(Session):统一存入 Redis 或数据库,而非本地内存
- 缓存:使用分布式缓存(如 Redis Cluster、Memcached 池),避免单机本地缓存不一致
- 静态资源:共享存储(NFS、对象存储)或通过 CDN 分发,禁止两台机器各自独立更新文件
注意区分“双机热备”与“负载均衡”模式
容易混淆的是 Nginx 的 backup 参数用法——它属于单点反向代理内的容错,不是双机热备:
-
upstream { server 192.168.1.10:80; server 192.168.1.11:80 backup; }是客户端始终连同一台 Nginx,仅在其后端全挂时才切 backup,仍存在单点风险 - 真正的双机热备要求两台 Nginx 都对外提供服务入口(通过 VIP),且任意一台宕机不影响用户访问,核心依赖 Keepalived + VIP 漂移











