Keepalived 通过 notify 脚本、健康检查脚本、日志采集及巡检机制实现 Nginx 高可用状态的实时告警。具体包括:1. 利用 notify 指令在 MASTER/BACKUP/FAULT 状态变更时执行告警脚本;2. 在 vrrp_script 中嵌入健康检查失败告警逻辑;3. 通过 Filebeat/Fluentd 采集日志并结合 Prometheus+Alertmanager 实现关键词告警;4. 部署巡检脚本与 arping 探测 VIP 异常漂移及脑裂风险。

Keepalived 本身不提供内置告警通道,但可通过脚本联动、日志解析或外部监控系统实现 Nginx 高可用状态的实时预警。关键在于把 Keepalived 的状态变化(如主备切换)、健康检查失败、VIP 异常漂移等事件转化为可观测、可通知的信号。
Keepalived 状态变更触发告警
Keepalived 支持在 vrrp_instance 中配置 notify 指令,当角色变为 MASTER/BACKUP/FAULT 时自动执行脚本:
- 在
/etc/keepalived/keepalived.conf的vrrp_instance VI_1块内添加:notify /usr/local/sbin/notify.sh -
notify.sh示例(记录日志并调用 webhook):#!/bin/bash<br>case "$1" in<br> "MASTER") echo "$(date): VIP acquired on $(hostname)" >> /var/log/keepalived-alert.log<br> curl -X POST -H 'Content-Type: application/json' \<br> -d '{"msgtype":"text","text":{"content":"【HA切换】$(hostname) 成为 MASTER,VIP 已接管"}}' \<br> https://oapi.dingtalk.com/robot/send?access_token=xxx ;;<br> "BACKUP") echo "$(date): VIP released by $(hostname)" >> /var/log/keepalived-alert.log ;;<br> "FAULT") echo "$(date): Keepalived 进入故障态,$(hostname)" >> /var/log/keepalived-alert.log ;;<br>esac - 确保脚本有执行权限:
chmod +x /usr/local/sbin/notify.sh
NGINX 健康检查失败主动上报
Keepalived 的 vrrp_script 脚本不仅用于权重调整,还可嵌入告警逻辑:
- 修改检测脚本(如
/usr/local/sbin/check_ng.sh),在判定 Nginx 不可用时同步发送通知:if [ $n -eq 0 ]; then<br> echo "$(date): Nginx down on $(hostname)" >> /var/log/keepalived-health.log<br> curl -s -X POST "https://alert.example.com/v1/alert" \<br> -H "Content-Type: application/json" \<br> -d '{"level":"critical","service":"nginx","host":"'"$(hostname)"'"}'<br> systemctl stop keepalived<br>fi - 避免重复告警:可在脚本中加入简单去重(如用
touch /tmp/nginx_down_alerted标记,5 分钟内不再触发)
日志采集 + 外部监控统一告警
将 Keepalived 和 Nginx 日志接入集中监控系统,实现多维度关联预警:
- Keepalived 默认日志输出到
/var/log/messages(或 systemd journal),关键词包括:
•VRRP_Instance(VI_1) Entering MASTER STATE
•Opening script file /usr/local/sbin/check_ng.sh
•Track script chk_nginx failed - 使用 Filebeat 或 Fluentd 抓取日志,过滤含
MASTER、FAULT、failed的行,打上service:keepalived标签 - 在 Prometheus + Alertmanager 中定义规则:
count_over_time(journalctl_unit{job="keepalived", message=~".*(MASTER|FAULT).*"}[5m]) > 1
触发后通过邮件、钉钉、企业微信等渠道推送
脑裂与 VIP 冲突的防御性预警
主备同时持有 VIP 是严重隐患,需主动探测并预警:
- 在两台节点上部署轻量级巡检脚本(每 10 秒执行一次):
ip addr show | grep "192.168.71.110" && echo "VIP present" || echo "VIP missing" - 若发现双方都拥有 VIP(或某方丢失 VIP 但未降级),立即写入告警日志并触发通知
- 配合
arping -c 2 -I ens33 192.168.71.110检查 ARP 响应唯一性,异常时告警









