Nginx双机热备+负载均衡的核心是Keepalived通过VIP漂移保障单台活跃Nginx高可用,由该Nginx的upstream模块实现后端业务负载均衡;需主备配置同步、健康检查脚本触发降权切换,并统一管理SSL证书与状态数据。

在 Nginx 环境中实现双机热备 + 业务负载均衡,核心不是让两台 Nginx 同时对外提供服务(那是双主或集群),而是通过 Keepalived 实现 VIP 高可用接管,再由 单台活跃的 Nginx 节点执行负载均衡转发。真正的负载均衡发生在 Nginx 的 upstream 层,而双机热备保障的是这台“负载均衡器”本身不宕机。
Keepalived 主备机制是基础
两台 Nginx 服务器(例如 192.168.1.11 和 192.168.1.12)各自安装 Nginx 和 Keepalived,但只有一台持有虚拟 IP(VIP,如 192.168.1.100)。用户始终访问 VIP,流量只打到当前 MASTER 节点:
- MASTER 节点优先级设为 100,BACKUP 设为 50 或更低
- MASTER 定期发送 VRRP 通告;BACKUP 检测超时(默认 1 秒×3 次)即升为 MASTER
- VIP 会自动漂移到新 MASTER,整个过程对客户端透明
- 需配置
vrrp_script监控 Nginx 进程(如检查nginx -t && systemctl is-active nginx),失败则降权触发切换
Nginx upstream 才负责业务分发
无论哪台机器当前是 MASTER,其 Nginx 配置中的 upstream 块都指向后端真实业务节点(如 Web 服务、API 服务等):
- 后端节点可部署在独立服务器或容器中,IP 地址写入
upstream块 - 支持多种调度算法:
round_robin(默认)、least_conn、ip_hash(会话保持) - 建议启用健康检查:用
max_fails=3 fail_timeout=30s自动剔除异常节点 - 示例配置:
upstream app_servers {
server 192.168.2.10:8080 weight=3;
server 192.168.2.11:8080 weight=2;
server 192.168.2.12:8080 backup;
}
数据与配置需保持同步
两台 Nginx 服务器不能各自维护不同配置,否则切换后行为不一致。关键同步项包括:
- Nginx 主配置文件(
/etc/nginx/nginx.conf)和站点配置(/etc/nginx/conf.d/*.conf) - SSL 证书文件(
/etc/nginx/ssl/)——建议用 rsync 或 Git 部署统一管理 - 若使用 Nginx Proxy Manager(NPM),其数据库必须外置(如 PostgreSQL),两节点共用同一实例,避免配置分裂
- 禁止在本地文件系统存储状态类数据(如 session、缓存),应交由 Redis 或后端统一处理
验证与监控不可省略
上线前必须实测故障转移效果,并建立持续观测能力:
- 手动停止 MASTER 的 Nginx 服务,观察 VIP 是否 5 秒内迁移、业务是否无感恢复
- 用
curl -I http://VIP和ip addr show确认请求落到正确节点 - 在两台 Nginx 上启用 access_log 并记录
$upstream_addr,确认请求确实分发到了后端不同机器 - 部署轻量监控(如 Prometheus + Node Exporter),重点关注 keepalived 状态、Nginx worker 连接数、upstream 健康状态


















