Кластер Redis не поддерживает одновременный отказ нескольких главных узлов

У меня есть следующая конфигурация:

  • Redis_version: 3.2.0
  • 3 главных узла и 3 подчиненных узла

Каждый главный узел реплицируется на подчиненный. Все правильно. Когда один главный узел дает сбой по команде "kill", соответствующий подчиненный узел становится главным, как и ожидалось. Через несколько секунд cluster_state возвращается в состояние ОК.

НО, если два главных узла терпят неудачу одновременно, ни один из связанных подчиненных узлов не становится главным. Cluster_state остается в состоянии "сбой".

cluster nodes command output.
b60c284a515b31aa6b11022fc07cf1a399171e04 127.0.0.1:7000 master,fail? - 1464690455030 1464690454930 1 disconnected 0-5460
637d1f074419963653b206c5ed7cbed4c3d0ace0 127.0.0.1:7001 master,fail? - 1464690455030 1464690454930 2 disconnected 5461-10922
d2aae2a3d87c6407e002076740c8febf80f37865 127.0.0.1:7003 myself,slave b60c284a515b31aa6b11022fc07cf1a399171e04 0 0 4 connected
72d4c9ce140fb57436c1b21702bf3c646ef29db3 127.0.0.1:7002 master - 0 1464690718480 3 connected 10923-16383
af34a7b2241943baf23e634e81b552d8bf23cdd0 127.0.0.1:7005 slave 72d4c9ce140fb57436c1b21702bf3c646ef29db3 0 1464690718480 6 connected
d0fec0609c9e786ac9ca4629f36cabd7c5c3130c 127.0.0.1:7004 slave 637d1f074419963653b206c5ed7cbed4c3d0ace0 0 1464690718480 5 connected

1 ответ

Автоматическое аварийное переключение подчиненного устройства не произойдет, когда по крайней мере половина мастеров отключится, потому что требуется отработка отказа, когда более половины мастеров приходят к согласию.

Чтобы запустить аварийное переключение вручную, подключитесь к подчиненному узлу с помощью redis-cli и отправить cluster failover TAKEOVER команда (takeover необходимо).

В твоем случае

redis-cli -h 127.0.0.1 -p 7003 cluster failover takeover

После :7003 становится ведущим, другой ведомый также запускает автоматический переход на другой ресурс, так как более половины (2/3) мастеров живы.

Другие вопросы по тегам