当 Redis Sentinel 通知事件时,它不提供 Redis 主节点的名称。
配置摘录:
# sentinel notification-script <master-name> <script-path>
#
# Call the specified notification script for any sentinel event that is
# generated in the WARNING level (for instance -sdown, -odown, and so forth).
# This script should notify the system administrator via email, SMS, or any
# other messaging system, that there is something wrong with the monitored
# Redis systems.
#
# The script is called with just two arguments: the first is the event type
# and the second the event description.
所以只有事件类型(例如+odown
)和事件描述,在+odown
简单的情况下是master
。不知何故,我觉得这缺乏重要的信息。我们不仅要通知用户某些事情发生了变化,还要通知用户发生了变化。
您不能注册带有附加参数的脚本,例如
sentinel notification-script <master-name> "<script-path> <master-name>"
Redis 将使用该值作为一个整体,并检查它是否存在并且是否可执行。
我们通过创建小型包装脚本来解决这个问题,每个主实例都有一个。
$ cat /some/path/notify-master42.sh
#!/bin/sh
/some/path/notify.sh master42 $1 $2
然后将此包装器脚本附加到主控器:
sentinel notification-script <master-name> notification-script /some/path/notify-<master-name>.sh
这有点不舒服,但也不算太糟,只要你有固定数量的大师并且不要在网上快速创建它们。
您只需通过网络与哨兵交互即可注册新主人。( redis-cli -h <host> -p <port> sentinel whatever...
) 但是创建这些包装脚本更加复杂。并不是说这是不可能的,但感觉就像白白地跳过燃烧的箍。
有没有办法通知包括主姓名:
- 无需修补 redis
- 没有包装脚本
?