redis sentinel не синхронизирован с серверами в кластере

У нас есть установка с несколькими серверами redis (2.8) (скажем, 4) и таким же количеством дозорных redis. При запуске каждой машины мы устанавливаем предварительно выбранную машину в качестве ведущей через командную строку, а все остальные — в качестве подчиненных. а часовые все следят за этими машинами. Клиенты сначала подключаются к локальному дозорному и получают IP-адрес мастера, а затем подключаются к нему.

Эта настройка в большинстве случаев работает без проблем, но иногда сторожевые устройства не синхронизируются с серверами. если я назову машины A, B, C и D - часовые будут думать, что B является ведущим, в то время как все серверы Redis подключены к A как к главному. Отключение сервера Redis на B тоже не помогает. Мне пришлось отключить его и вручную «отказоустойчивость Sentinel» на A, чтобы решить проблему. Вопрос 1. Из-за чего это происходит и как проще и быстрее всего это исправить? 2. Какая конфигурация лучше? Есть ли что-то лучше этой?


person Osada Lakmal    schedule 27.03.2015    source источник


Ответы (1)


Единственный раз, когда вы должны установить мастер, это первый раз. Как только Sentinel возьмет на себя управление репликацией, вы должны позволить ему это сделать. Это включает в себя перезапуски. Не используйте командную строку для настройки репликации. Пусть Sentinel и Redis управляют этим. Вот почему у вас возникают проблемы — вы сказали дозорному, что он является авторитетным, но вы говорите серверам Redis игнорировать дозорный.

Sentinel сохраняет статус в своем файле конфигурации, поэтому при перезапуске он может восстановить последнюю конфигурацию. Так что даже при перезапуске пусть часовой делает свою работу.

Кроме того, если у вас есть 4 сервера (будьте конкретны, а не «скажем так»), вы должны использовать кворум из трех в своем заявлении монитора в дозорном. С кворумом из двух вы можете получить двух мастеров

person The Real Bill    schedule 28.03.2015
comment
Спасибо ! так что в основном проблема в том, что часовые пытаются начать с известной конфигурации, с которой они согласны, в то время как серверам через командную строку сообщается, что они находятся в другой конкретной конфигурации? Проблема в том, что мы перезагружаем четыре машины каждые выходные. Я хотел бы, чтобы мы перезагрузились с новой конфигурацией после этого перезапуска. Поможет ли удаление файла конфигурации? Или я должен просто оставить стражей, чтобы продолжить? - person Osada Lakmal; 29.03.2015
comment
Я бы порекомендовал позволить дозорному сделать свое дело и удалить биты, сообщающие серверам, кто является хозяином. Перезапуск не является проблемой, а смена мастеров может привести к потере данных (если ведомый отстает, и вы делаете его главным, например) и вышеупомянутым проблемам. Какой бы узел ни был главным до перезапуска, у него самые последние данные, поэтому вы все равно захотите его выбрать. Когда Sentinel делает это, вам не нужно об этом беспокоиться. Кроме того, в конфигурациях локальных экземпляров Redis все равно будет информация. - person The Real Bill; 30.03.2015