Redis哨兵通过notification-script配置脚本实现告警,关键事件+switch-master触发高优先级通知,脚本需可执行、绝对路径、权限正确,并支持邮件/日志/Webhook等多通道推送。

Redis 哨兵本身不内置邮件或短信推送功能,但提供了标准的事件通知机制,通过脚本回调实现告警。关键在于配置 notification-script 和 client-reconfig-script,并确保哨兵有执行权限和环境依赖。
配置故障转移告警脚本
在 sentinel.conf 中添加:
-
sentinel notification-script mymaster /path/to/notify.sh:当发生主观下线、客观下线、故障转移成功、主从切换完成等事件时触发,脚本会收到事件类型、主节点名、IP、端口等参数 - 脚本需可执行(
chmod +x /path/to/notify.sh),且以#!/bin/bash开头 - 常见事件类型包括:
+sdown(主观下线)、+odown(客观下线)、+failover(开始故障转移)、+switch-master(切换完成)——最后这个最适合作为“告警黄金信号”
编写轻量级告警脚本示例
以下是一个发邮件+记录日志的简单脚本(需系统已配置 sendmail 或 msmtp):
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 接收参数:
$1(事件类型)、$2(主节点名)、$3(旧主IP)、$4(旧主端口)、$5(新主IP)、$6(新主端口) - 只对
+switch-master发送高优先级告警,避免刷屏 - 示例内容:
echo "? Redis 故障转移完成:$2 从 $3:$4 切换至 $5:$6" | mail -s "【Redis HA Alert】" admin@example.com - 同时写入本地日志:
logger -t redis-sentinel "Failover completed: $2 → $5:$6"
验证与调试要点
哨兵调用脚本时默认使用 redis 用户身份运行,需注意权限问题:
- 脚本路径必须是绝对路径,且
redis用户有读取和执行权限 - 避免脚本阻塞:超时默认 10 秒,建议脚本内加
timeout 5s控制外部命令(如 curl、mail) - 查看哨兵日志确认是否触发:
grep "Executing notification script" /var/log/redis/sentinel.log - 手动模拟事件测试:
redis-cli -p 26379 sentinel failover mymaster,观察脚本是否执行
进阶告警方式(非脚本原生支持)
若需对接企业级告警平台(如 Prometheus + Alertmanager、钉钉/企微机器人、Zabbix),推荐两种方式:
- 脚本中用
curl调用 Webhook(例如钉钉机器人 URL),传入 JSON 格式告警体 - 配合
redis-cli订阅哨兵 Pub/Sub 频道:redis-cli -p 26379 pubsub channels查看可用频道,监听__sentinel__:hello或自定义事件发布 - 更稳定的做法是部署一个轻量服务(如 Python Flask),由哨兵脚本 POST 事件数据,再统一分发到多通道

















