2016-12-02 15 views
0

Чтобы подписаться на Sentinel failover, каково имя канала и как определить, что мне нужно обновить мастер в подписанной функции?Как переустановить новый мастер-узел при использовании Redis с Sentinel и redis-py?

У меня есть настройка нескольких узлов Redis с использованием Redis Sentinel для высокой доступности и восстановления после сбоя.

Мне нужно настроить Pub/Sub на Redis, чтобы обнаружить, когда мастер Redis потерпел неудачу, и система выбрала нового Master.

_sentinel = redis.sentinel.Sentinel([(app.config["REDIS_HOSTNAME"],app.config["REDIS_SENTINEL_PORT"])]) 
_master = _sentinel.master_for(app.config["REDIS_SERVICE_NAME"]) 

def _sentinel_message_handler(message): 
    #TODO how do I detect that there is a new Redis Master? 

_pubsub = _master.pubsub() 
_pubsub.subscribe(**{app.config["TODO"]:_sentinel_message_handler}) 
+1

Список каналов можно найти здесь: https://redis.io/topics/sentinel#pubsub-messages – davissp14

+0

я вижу один вопрос здесь в том, что REDIS_HOSTNAME должен запускаться через список имен узлов Sentinel, каждый из которых будет последовательно запускаться до тех пор, пока не будет достигнуто соединение. Это предотвращает сбой при запуске только потому, что один дозорный узел выключен. – 0111001101110000

ответ

1

Для этого вы захотите подписаться на часового, а не на главный узел. Канал, который вы ищете, - "+switch-master". Документация Sentinel указывает на канал как "switch-master" «без +», но с 3.2.4 включен +.

Redis Sentinel Pub/Sub Message Docs

Вы должны быть в состоянии ссылаться на Redis-р документации для остальные. Redis-py Docs


UPDATE

Вы могли бы также рассмотреть возможность использования установки client-reconfig-script.

Когда мастер изменилась из-за перехода на другой ресурс сценарий может быть вызван в Для выполнения конкретных приложений задач для уведомления клиентов, что конфигурация изменилась, и Мастер по другому адресу.

http://download.redis.io/redis-stable/sentinel.conf

Надежда, что помогает

+0

У дозорного объекта нет метода pubsub. Только мастер. Я согласен с тем, что это кажется странным, поскольку я хочу, чтобы переход на другой ресурс работал, даже если мастер отключен от сети. Нужно ли мне найти всех рабов и пабсубов для каждого раба, а также для мастера? – 0111001101110000

+0

Ну, основная проблема заключается в том, что события отказоустойчивости не публикуются в узлах Redis, а только у Sentinels. Единственное, что вы увидите в пабе Redis/sub, - это события «__sentinel __: hello». – davissp14

+1

Я предполагаю, что вы хотите слушать отказы, чтобы вы могли быстро перенастроить свой клиент? Если у вас не обнаружено дозорного паба/sub, одна из идей заключается в том, чтобы использовать: https://github.com/andymccurdy/redis-py/blob/master/redis/client.py#L414 как источник истины. Не идеальный, хотя. – davissp14

 Смежные вопросы

  • Нет связанных вопросов^_^