Кластер 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) мастеров живы.