Redis master / slave replication - единая точка отказа? - PullRequest
37 голосов
/ 18 января 2011

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

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

Ответы [ 4 ]

29 голосов
/ 06 января 2012

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

Основные шаги:

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

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

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

22 голосов
/ 18 января 2011

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

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

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

10 голосов
/ 18 апреля 2014

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

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

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

6 голосов
/ 09 мая 2013

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

redis-cli config set slave-read-only no

- Пример

-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"
...