2016-01-07 1 views
3

Для моих целей мне нужен только один экземпляр redis running и один 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 для целей мониторинга? Сценарий уведомления срабатывает слишком много раз

Я хочу использовать redis sentinel только для целей мониторинга. Позже я напишу что-нибудь в скрипте python, который будет отправлять по электронной почте/текст мне, когда redis спускается. Однако, как сейчас, он слишком часто стреляет. Я только хочу получить сообщение один раз, когда страж, как определено, что redis умер. Прямо сейчас, когда я начинаю его, заявление распечатывается один раз в начале, а затем еще несколько раз после отказоустойчивого состояния -выбор раба

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 

Я не хочу, чтобы напечатать в начале и я только хочу, чтобы он печатался один раз, когда сервер умирает, так что я получаю только один email/текст позже. Кто-нибудь, получил какие-то советы о том, что я могу сделать? Благодаря!

ответ

3

Хорошо, я выяснил это с помощью #redis на freenode. Внутри моего 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) 

Надежда это помогает кому-то!

0

Не уверен, но, вероятно, что-то делать с правилом повторных попыток, упомянутых в sentinel.conf comments:

скрипты выполняются следующие правила для обработки ошибок:

Если скрипт завершает работу с «1» исполнение будет выполнено позже (до максимальное количество раз в настоящее время установленное значение 10).

Если сценарий завершен с «2» (или более высоким значением), выполнение сценария не повторено.

Если сценарий завершается, поскольку он принимает сигнал поведение является же, как код выхода 1.

Скрипт имеет максимальное время работы 60 секунд. После этого предела достиг скрипта, заканчивается SIGKILL, а исполнение повторено.