【问题标题】:Redis Sentinel for monitoring purposes? Notification script fires off too many timesRedis Sentinel 用于监控目的?通知脚本触发太多次
【发布时间】:2016-01-07 00:27:27
【问题描述】:

出于我的目的,我只想要一个运行的 redis 实例和一个 redis 哨兵。我正在运行 Redis 3.0.6。我的sentinel.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

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

【问题讨论】:

    标签: linux redis redis-sentinel


    【解决方案1】:

    好的,我已经在 freenode 上的#redis 的帮助下想通了。在我的notify_me.sh 中,echo $* 会向您展示一些内容,例如:

    +odown master mymaster 127.0.0.1 6379 #quorum 1/1
    

    首先是一条发布订阅消息,就像这里列出的消息: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)
    

    希望这对某人有所帮助!

    【讨论】:

      【解决方案2】:

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

      脚本按照以下错误处理规则执行:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        相关资源
        最近更新 更多