Redis Sentinel用于监控目的?通知脚本发射太多次

时间:2016-01-07 00:27:27

标签: linux redis redis-sentinel

出于我的目的,我只想要一个redis运行实例和一个redis sentinel。我正在运行Redis 3.0.6。我的sentinel.conf是默认值,除了仲裁为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已经死亡的哨兵一次收到这条消息。 现在,当我开始它时,语句在开始时打印出来一次,然后在故障转移后再打印几次 - 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

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

2 个答案:

答案 0 :(得分:3)

好的,我已经在freenode的#redis的帮助下弄明白了。在我的notify_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)

希望这有助于某人!

答案 1 :(得分:0)

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

  

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

     

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

     

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

     

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

     

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