0

当 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
  • 没有包装脚本

?

4

1 回答 1

1

是的,您通过使用正确的事件来做到这一点。

“所以只有事件类型(例如+odown)和事件描述,在+odown的情况下就是master。不知何故,我觉得这缺少重要信息。我们不仅想通知用户某些事情发生了变化,而且哪里变了。”

在 +odown 的情况下,没有其他信息可用。所有+odown表示主服务器宕机。在这一点上,没有其他任何事情发生。如果您想根据故障转移(发生 +odown之后)更新某些内容,则需要查看相应的事件:switch-masterswitch-master事件是故障转移完成时发生的事件。

直接取自文档

switch-master <master name> <oldip> <oldport> <newip> <newport> -- 主控新 IP 和地址是配置更改后指定的。这是大多数外部用户感兴趣的信息。

因此,让您的脚本查找并处理 switch-master 事件以获取有关更改内容的信息。没有更多的燃烧箍跳通过。

于 2015-08-26T15:48:22.827 回答