Nginx 不负责双机热备调度,高可用由 Keepalived 通过 VIP 漂移实现;需用脚本检测 Nginx 真实服务能力,结合内核调优、精简服务与配置同步保障快速可靠切换。

Nginx 本身不直接调度资源,它作为反向代理或 Web 服务器,核心职责是请求分发与静态服务;真正的“双机热备”高可用,依赖 Keepalived 实现 VIP 漂移,而非 Nginx 自身做主备决策。资源优化调度的关键不在 Nginx 配置层,而在于整体架构协同设计——重点是让流量只打到健康节点、避免无效转发、减少切换延迟。
Keepalived 健康检查必须绑定 Nginx 进程状态
单纯靠端口通(如 curl -I http://localhost:80)不够可靠:Nginx 进程可能存活但 worker 全卡死、配置加载失败、磁盘满导致无法响应。推荐使用轻量级 shell 脚本主动探测真实服务能力:
- 编写
/opt/nginx_check.sh:检测nginx -t语法、systemctl is-active nginx状态、curl -s --max-time 2 http://127.0.0.1/health | grep "ok"(需在 Nginx 中配/health返回简单 JSON) - 在
keepalived.conf中定义vrrp_script,设置weight -20触发优先级降级,使故障节点自动让出 MASTER 身份
网络与系统层资源精简配置
双机热备场景下,冗余链路和心跳开销需严格控制:
- 关闭非必要服务:
systemctl stop postfix tuned && systemctl disable postfix tuned(避免争抢 CPU/IO) - 调整内核参数:
net.ipv4.conf.all.arp_ignore = 1和net.ipv4.conf.all.arp_announce = 2,防止 ARP 冲突影响 VIP 切换 - Keepalived 心跳间隔设为
advert_int 1(秒级),但避免过密(<0.5s 可能引发误判);日志级别调为debug仅调试期启用,生产环境用notice
Nginx 配置聚焦轻量与快速响应
热备节点虽不对外服务,但需保持随时接管能力,配置应极简且一致:
- 禁用耗资源模块:不启用
realip、geoip2、复杂map或lua脚本(除非业务强依赖) - worker 进程数设为
auto或固定小值(如worker_processes 2),避免抢占过多 CPU - 开启
sendfile on; tcp_nopush on; keepalive_timeout 30;即可,不盲目调大 buffer 或 timeout - 所有静态文件路径、SSL 证书、upstream 定义必须完全一致,用
rsync -avz /etc/nginx/ web02:/etc/nginx/定期同步
避免常见资源浪费陷阱
- 不在两台机器上同时运行监控 Agent 全量采集(如 Prometheus node_exporter + nginx_exporter),主节点采集,备节点仅开启基础 heartbeat 检测
- VIP 不要绑定到物理网卡别名(如
eth0:1),而是由 Keepalived 动态添加/删除,避免路由表污染 - 日志统一收集到外部系统(如 ELK),本地只保留 7 天
access_log /var/log/nginx/access.log main buffer=64k flush=5s;
不复杂但容易忽略


















