Redis Sentinel: принудительное переключение на другого мастера
Контекст:
У меня 3 узла redis и 3 стража. Отработка отказа работает правильно. Когда я снимаю мастера, избирается другой мастер.
Необходимость:
Мне нужен способ проверить поведение, чтобы убедиться, что все работает как положено. Я хотел бы заставить дозорных выбрать конкретный узел Redis, чтобы быть мастером.
Я думаю, что я мог бы сделать это, убрав два узла, которые не должны быть мастерскими, но я бы хотел просто дать команду одному из стражей, чтобы решить мою проблему.
ТЛ; др:
Могу ли я дать указание моим стражам выбрать конкретный узел redis в качестве главного?
1 ответ
Вы можете вызвать зависание на двух серверах Redis, которые вы не хотите использовать в качестве главного, и я думаю (не проверено) Sentinel выберет оставшийся. Это может занять две выборы...
Имитация зависания на серверах Redis:
redis-cli DEBUG sleep 30
или же
redis-cli DEBUG segfault
Затем принудительное переключение при сбое:
SENTINEL failover
Возможно, лучшим подходом является использование опции приоритета.
С https://redis.io/topics/sentinel
Приоритеты рабов
У экземпляров Redis есть параметр конфигурации, который называется slave-priority. Эта информация предоставляется ведомыми экземплярами Redis в их выходных данных INFO, и Sentinel использует ее, чтобы выбрать подчиненное устройство из тех, которые можно использовать для переключения при отказе мастера:
Если приоритет подчиненного устройства равен 0, ведомое устройство никогда не повышается до ведущего. Sentinel предпочитает рабов с более низким номером приоритета.
Например, если есть подчиненный S1 в том же центре обработки данных текущего ведущего устройства и другой подчиненный S2 в другом центре обработки данных, можно установить S1 с приоритетом 10 и S2 с приоритетом 100, так что если Ведущий отказывает, и оба S1 и S2 доступны, S1 будет предпочтительным.
Для получения дополнительной информации о том, как выбираются ведомые устройства, пожалуйста, проверьте раздел выбора ведомого и приоритета этой документации.