keepalived 不直接守护 nginx 进程,仅通过健康检查(tcp/http/自定义脚本)感知其状态,失败时降权或触发 vip 切换,并依赖 systemd 等工具实现真正的进程拉起。

Keepalived 本身不直接守护 Nginx 进程,它只负责监控 Nginx 是否存活,并在检测失败时触发 VIP 漂移或执行自定义脚本——真正的进程守护仍需由 systemd、supervisord 或 Keepalived 内置的健康检查配合外部脚本完成。
Keepalived 不替代 Nginx 自身进程管理
Nginx 采用 Master-Worker 多进程模型:Master 进程负责管理 Worker 进程、加载配置、平滑重启;Worker 进程处理实际请求。这个模型本身具备一定健壮性,但无法自动拉起崩溃的 Master 进程。Keepalived 并不具备进程启停能力,它的核心职责是 VRRP 协议实现和 VIP 管理,不是进程看护工具。
Keepalived 如何间接“守护”Nginx
它通过 健康检查机制感知 Nginx 状态,再联动动作,形成间接守护逻辑:
- 支持 TCP 端口检测(如检查 80/443 是否可连),快速判断 Nginx 是否监听
- 支持 HTTP GET 请求检测(如访问 /health 或 /status),验证服务响应是否正常
- 支持自定义 shell 脚本检测(推荐方式):例如检查 nginx 进程是否存在、配置语法是否正确、端口是否被占用
- 当检查失败时,Keepalived 会降低自身优先级(或直接停止 vrrp_instance),促使 VIP 切换到备用节点
- 可配置 notify_master / notify_backup / notify_fault 脚本,在状态变更时执行命令,例如重启 nginx 或发告警
典型守护组合方案
生产环境中,建议分层协作:
- 底层:用 systemd 管理 Nginx 服务(启用 Restart=always、RestartSec=5),确保进程意外退出后自动拉起
- 中层:Keepalived 配置 check_script,定期调用脚本检查 nginx -t 和 ps aux | grep nginx,失败则触发降权
- 上层:在 notify 脚本中加入 systemctl restart nginx(慎用,避免雪崩),或仅记录日志+告警,人工介入
关键配置示例(check_script)
在 keepalived.conf 中定义:
vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
}
对应脚本 /etc/keepalived/check_nginx.sh 可包含:
#!/bin/bashif ! pgrep -x "nginx" > /dev/null; then
exit 1
elif ! nginx -t &> /dev/null; then
exit 1
else
exit 0
fi











