Nginx双机热备监控核心是判断节点主从角色、验证VIP及服务可达性、捕获并分析切换事件;需结合ip addr检查VIP、curl探测健康接口、日志关键词匹配状态变更,并设置阈值告警。

在 Nginx 双机热备(通常基于 Keepalived 实现主从 VIP 切换)架构中,真正需要监控的不是 Nginx 本身是否运行,而是“当前节点是否处于主状态”以及“主从切换是否异常”。实时监控与预警的核心在于:捕获角色变化、验证服务可达性、及时通知故障。
监控主从角色状态(关键指标)
Keepalived 通过 VRRP 协议选举主节点,其状态可直接从本地进程或日志中提取。推荐方式是读取 Keepalived 的状态文件(若启用)或解析 /var/run/keepalived.state(需 Keepalived 配置 state_file /var/run/keepalived.state),或使用命令:
-
kill -USR1 $(cat /var/run/keepalived.pid 2>/dev/null)后查看 /var/log/messages 或 journal 日志中的VRRP_Instance(XXX) Entering MASTER STATE等记录 - 更稳定的做法:用
systemctl is-active keepalived+ip addr show | grep "inet.*VIP"组合判断——有 VIP 且服务活跃,基本可判定为主节点 - 脚本示例(每 10 秒检查一次):
if ip addr show eth0 | grep -q "192.168.1.100/32"; then echo "MASTER"; else echo "BACKUP"; fi
验证主节点真实服务能力
仅持有 VIP 不代表服务可用。必须对 Nginx 提供的实际业务端口(如 80/443)做主动探测:
- 用
curl -I -s -m 3 http://127.0.0.1/healthz检查本地 Nginx 健康接口(建议在 nginx.conf 中配置 location /healthz { return 200; }) - 同时从另一台机器(或跳板机)用
nc -z -w2 VIP 80或curl -I -s -m 3 http://VIP/healthz验证 VIP 是否真正可达且响应正常 - 若主节点本地健康但 VIP 不通,大概率是 ARP 广播未生效、网卡未启用 VIP 或防火墙拦截,需立即告警
捕获主从切换事件并记录上下文
切换本身不是故障,但频繁切换或无故切换就是风险信号。应做到:
- 监听 Keepalived 日志(
journalctl -u keepalived -f或 /var/log/messages),用关键词匹配Entering MASTER、Entering BACKUP、Registering Kernel netlink reflector(启动)等事件 - 每次状态变更时,自动记录时间、原状态、新状态、本机 IP、VIP、CPU/内存负载、Nginx worker 数量(
ps aux | grep nginx | wc -l)等上下文信息到本地日志或转发至日志平台 - 设置阈值:5 分钟内切换 ≥ 2 次,触发 P1 级别告警(可能网络震荡或脑裂)
轻量级预警集成方案
无需引入复杂监控体系,用 Shell + cron + 短信/邮件即可落地:
- 写一个监控脚本(如 /opt/mon/keepalive_check.sh),包含角色判断、服务探测、日志扫描逻辑,返回 0(正常)、1(警告)、2(严重)
- 用
crontab -e添加:*/1 * * * * /opt/mon/keepalive_check.sh >> /var/log/keepalive_mon.log 2>&1 - 脚本内嵌告警:状态异常时调用
mail -s "NGINX VIP ALARM" admin@example.com ,或对接企业微信机器人 Webhook(用 curl 发送 JSON) - 进阶可接入 Prometheus + Alertmanager:用 Exporter 抓取角色和服务指标,配置
absent(keepalived_role{role="MASTER"} == 1) > 30s规则实现自动告警


















