Redis master/slave replication-одна точка сбоя?

Как можно перейти на более новую версию Redis с нулевым временем простоя? Рабы Redis доступны только для чтения, поэтому кажется, что вам придется снять Мастера, и ваш сайт будет доступен только для чтения в течение 45 секунд или более, пока вы ждете его перезагрузки БД.

есть ли способ обойти это?

4 ответов


при переходе узла в автономный режим повысьте ведомого до master с помощью команды SLAVEOF, затем, когда вы вернете его в онлайн, вы настроите его как ведомого, и он скопирует все данные из онлайн-узла.

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

Если вы хотите получить действительно фантазии, вы можете настроить своего клиента для продвижения ведомого, если он обнаруживает ошибку записи в мастер.


команда Redis имеет очень хорошую документацию по этому

Основные Действия:

  • настройте новый экземпляр Redis в качестве ведомого для текущего экземпляра Redis. Для этого вам нужен другой сервер или сервер, на котором достаточно ОЗУ для одновременного запуска двух экземпляров Redis.
  • если вы используете один сервер, убедитесь, что ведомый запущен в другом порту, чем главный экземпляр, иначе ведомый не сможет начать на все.
  • дождитесь завершения начальной синхронизации репликации (проверьте ведомый файл журнала).
  • убедитесь, используя информацию, что есть такое же количество ключей в master и в slave. Проверьте с redis-cli, что ведомый работает так, как вы хотите, и отвечает на ваши команды.
  • настройте всех своих клиентов для использования нового экземпляра (то есть ведомого).
  • если вы уверены, что мастер не получает никаких запросов (вы можно проверить это с помощью команды MONITOR), выберите подчиненного для управления с помощью команды SLAVEOF NO ONE и выключите своего хозяина.

Полная Документация:

обновление или перезапуск экземпляра Redis без простоя


вы можете использовать Redis Sentinel для этого, sentinel автоматически повысит раба как нового хозяина. вы можете найти более подробную информацию здесь http://redis.io/topics/sentinel.

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

здесь там не будет простоя или ручная настройка файла конфигурации не требуется. Вы можете посетить ссылку выше, чтобы узнать, как настроить sentinel для ваших серверов redis.


Примечание, возможно, вам придется проверить и установить следующую конфигурацию для записи на ведомое устройство. ("Поскольку Redis 2.6 по умолчанию рабы доступны только для чтения")

redis-cli config set slave-read-only no

-- Example

-bash-4.1$ redis-cli info
 Server
redis_version:2.6.9

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
(error) READONLY You can't write against a read only slave.

-bash-4.1$ redis-cli slaveof no one
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"


-bash-4.1$ redis-cli config set slave-read-only no
OK

-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK

-bash-4.1$ redis-cli set temp 42
OK

-bash-4.1$ redis-cli get temp
"42"