3

就我的目的而言,我只想要一个运行的 redis 实例和一个 redis 哨兵。我正在运行 Redis 3.0.6。Mysentinel.conf是所有默认值,除了 quorum 为 1 并且通知脚本行未注释:sentinel notificication-script mymaster /etc/redis/notify_me.sh. 在里面notify_me.sh我执行了一个 python 脚本,用于测试目的只是说print "HEY SOMETHING IS UP WITH REDIS"

我只想将 redis sentinel 用于监视目的。稍后,我将在 python 脚本中写一些东西,当 redis 出现故障时,它会通过电子邮件/短信给我。然而,就像现在一样,它的发射太频繁了。我只想在哨兵确定redis已经死亡时收到一次消息。现在当我启动它时,该语句在开始时打印一次,然后在 failover-state-select-slave 之后再打印几次

23863:X 06 Jan 15:26:18.422 # Sentinel runid is db267af1b9257ced70eee9cbd076291db31f9335
23863:X 06 Jan 15:26:18.422 # +monitor master mymaster 127.0.0.1 6380 quorum 1
HEY SOMETHING IS UP WITH REDIS
23863:X 06 Jan 15:27:07.602 # +sdown master mymaster 127.0.0.1 6380
23863:X 06 Jan 15:27:07.602 # +odown master mymaster 127.0.0.1 6380 #quorum 1/1
23863:X 06 Jan 15:27:07.602 # +new-epoch 1
23863:X 06 Jan 15:27:07.602 # +try-failover master mymaster 127.0.0.1 6380
23863:X 06 Jan 15:27:07.604 # +vote-for-leader db267af1b9257ced70eee9cbd076291db31f9335 1
23863:X 06 Jan 15:27:07.604 # +elected-leader master mymaster 127.0.0.1 6380
23863:X 06 Jan 15:27:07.604 # +failover-state-select-slave master mymaster 127.0.0.1 6380
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
HEY SOMETHING IS UP WITH REDIS
23863:X 06 Jan 15:27:07.682 # -failover-abort-no-good-slave master mymaster 127.0.0.1 6380

我不希望它在一开始就打印,我只希望它在服务器死机时打印一次,这样我以后只会收到一封电子邮件/文本。任何人,对我能做什么有任何提示吗?谢谢!

4

2 回答 2

3

好的,我在 freenode 上的#redis 的帮助下弄明白了。在 mynotify_me.sh中,echo $*将向您展示一些内容,例如:

+odown master mymaster 127.0.0.1 6379 #quorum 1/1

首先是一条 pubsub 消息,如下所示:http ://redis.io/topics/sentinel#pubsub-messages 。+odown是当哨兵认为服务器客观地关闭时,这就是我想做我的 python 东西的时候。notify_me.sh每次有消息都会引起火灾,这就是为什么我收到这么多消息,HEY SOMETHING IS UP WITH REDIS所以我只是写了这个:

notify_me.sh,

#!/bin/sh
python notify_redis.py $*

然后在notify_redis.py,

import sys

def main(args):
    for arg in args:
        if arg == "+odown":
            print "HEY SOMETHING IS UP WITH REDIS"
            email_text_or_whatever_thing_you_wanna_do()

main(sys.argv)

希望这对某人有帮助!

于 2016-01-07T18:18:05.730 回答
0

不确定,但可能与sentinel.conf 注释中提到的重试规则有关:

使用以下错误处理规则执行脚本:

如果脚本以“1”退出,则稍后重试执行(最多当前设置为 10 次)。

如果脚本以“2”(或更高的值)退出,则不会重试脚本执行。

如果脚本因收到信号而终止,则行为与退出代码 1 相同。

脚本的最长运行时间为 60 秒。达到此限制后,脚本以 SIGKILL 终止并重试执行。

于 2016-01-07T05:16:04.700 回答