Redis Cluster: нет автоматического переключения при сбое главного устройства

Я пытаюсь реализовать кластер Redis с 6 машинами. У меня бродячий кластер из шести машин:

192.168.56.101
192.168.56.102
192.168.56.103
192.168.56.104
192.168.56.105
192.168.56.106

все работает redis-server

Я отредактировал файл /etc/redis/redis.conf всех вышеперечисленных серверов, добавив это

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-slave-validity-factor 0
appendonly yes

Затем я запустил это на одной из шести машин;

./redis-trib.rb create --replicas 1 192.168.56.101:6379 192.168.56.102:6379 192.168.56.103:6379 192.168.56.104:6379 192.168.56.105:6379 192.168.56.106:6379

Кластер Redis запущен и работает. Я проверил вручную, установив значение на одном компьютере, которое отображается на другом компьютере.

$ redis-cli -p 6379 cluster nodes
3c6ffdddfec4e726f29d06a6da550f94d976f859 192.168.56.105:6379 master - 0 1450088598212 5 connected
47d04bc98ab42fc793f9f382855e5c54ab8f2e20 192.168.56.102:6379 slave caf2cec45114dc8f4cbc6d96c6dbb20b62a39f90 0 1450088598716 7 connected
040d4bb6a00569fc44eec05440a5fe0796952ccf 192.168.56.101:6379 myself,slave 5318e48e9ef0fc68d2dc723a336b791fc43e23c8 0 0 4 connected
caf2cec45114dc8f4cbc6d96c6dbb20b62a39f90 192.168.56.104:6379 master - 0 1450088599720 7 connected 0-10922
d78293d0821de3ab3d2bca82b24525e976e7ab63 192.168.56.106:6379 slave 5318e48e9ef0fc68d2dc723a336b791fc43e23c8 0 1450088599316 8 connected
5318e48e9ef0fc68d2dc723a336b791fc43e23c8 192.168.56.103:6379 master - 0 1450088599218 8 connected 10923-16383

Моя проблема в том, что когда я выключаю или останавливаю redis-server на любой машине, которая master, весь кластер выходит из строя, но если все три подчиненных устройства умирают, кластер по-прежнему работает правильно.

Что мне делать, чтобы подчиненное устройство превратилось в мастера в случае отказа главного устройства (отказоустойчивость)?

Я исхожу из предположения, что redis обрабатывает все эти вещи, и мне не нужно беспокоиться об этом после развертывания кластера. Я прав, или мне придется делать что-то самому?

Другой вопрос: допустим, у меня шесть машин с 16 ГБ ОЗУ. Какой общий объем данных я смогу обработать в этом кластере Redis с тремя ведущими и тремя ведомыми устройствами?

Спасибо.


person Nagri    schedule 14.12.2015    source источник
comment
Близко почему? Что не так с вопросом? Было бы неплохо сделать несколько комментариев.   -  person Nagri    schedule 16.12.2015
comment
//, кто это закрыл?   -  person Nathan Basanese    schedule 13.06.2016


Ответы (1)


настройка cluster-slave-validity-factor 0 может быть здесь виноватой.

из redis.conf

# A slave of a failing master will avoid to start a failover if its data
# looks too old.

В вашей настройке ведомое устройство завершенного ведущего считает себя непригодным для избрания ведущим, поскольку время последнего контакта с ведущим превышает вычисленное значение:

(node-timeout * slave-validity-factor) + repl-ping-slave-period

Следовательно, даже с резервным ведомым устройством состояние кластера изменяется на DOWN и становится недоступным.

Вы можете попробовать другое значение, например, предлагаемое по умолчанию

cluster-slave-validity-factor 10

Это гарантирует, что кластер сможет выдержать один случайный сбой экземпляра Redis. (это может быть ведомый или главный экземпляр)

По вашему второму вопросу: шесть машин с 16 ГБ ОЗУ каждая смогут функционировать как кластер Redis из 3 экземпляров Master и 3 экземпляров Slave. Таким образом, теоретический максимум составляет 16 ГБ x 3 данных. Такой кластер может выдержать сбой максимум ОДНОГО узла, если cluster-require-full-coverage включен. в противном случае он может по-прежнему обслуживать данные в сегментах, которые все еще доступны в действующих экземплярах.

person Asad    schedule 27.01.2017
comment
Этот ответ неверен, 0 отключил эту функцию и гарантирует, что ведомое устройство будет всегда пытаться переключиться при отказе в качестве ведущего. - person Jeremy Smitherini; 04.08.2017