У меня есть кластер Redis с 2 мастерами и 4 подчиненными (по 2 подчиненных устройства для каждого мастера). После того, как я вручную разбил мастер (т.е. redis-cli -p 6379 debug segfault
) рабы ничего не делают. Они обнаруживают, что с мастером что-то не так, но ничего не делают (я ждал 20 минут).
Вот вывод узлов кластера (т.е. redis-cli cluster nodes
):
08dfd1bdd470a8831b33b7b0409a40bf45ee22d0 192.168.0.15:6379 myself,slave 55787eb63780365a0c7d4a0ed72cac4b97a55ed0 0 0 1 connected
7fedf234aba8d906dca5a4725a54d1cc5c979c18 192.168.0.18:6379 slave a739cfbcd9b804345808bb3a78b6a00b2d6050f9 0 1477865886164 2 connected
a739cfbcd9b804345808bb3a78b6a00b2d6050f9 192.168.0.14:6379 master,fail? - 1477865551940 1477865548392 0 disconnected 8192-16383
5dcc0a0a3f13ea9343171a13fbf0ec7054dfc2ab 192.168.0.19:6379 slave a739cfbcd9b804345808bb3a78b6a00b2d6050f9 0 1477865884135 5 connected
55787eb63780365a0c7d4a0ed72cac4b97a55ed0 192.168.0.16:6379 master - 0 1477865885150 2 connected 0-8191
601a5e0dd9d40d8c01119714e89be63eaee87900 192.168.0.17:6379 slave 55787eb63780365a0c7d4a0ed72cac4b97a55ed0 0 1477865882100 3 connected
Как мы видим, это неисправный главный узел 192.168.0.14:6379
который отмечен как master,fail
? . Я не знаю, почему отображается вопросительный знак. Но жду 20 минут и ничего не изменилось. Почему рабы не захватывают хозяина?
Для формирования кластера Redis у вас должно быть как минимум 3 мастера. Если большинство мастеров умирают одновременно, кластер становится непригодным для использования. Отказоустойчивость не происходит, если большинство мастеров недоступны.
Потому что чистый Redis не может выполнить отказоустойчивость самостоятельно. Ведущее устройство и ведомые устройства с точки зрения redis предназначены только для балансировки нагрузки. Вы должны использовать Sentinel (модуль для redis, поставляемый с redis по умолчанию), чтобы добиться автоматического переключения при отказе.