Подтвердить что ты не робот

Редизайн master/slave Redis - единственная точка отказа?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

Примечание. Возможно, вам придется проверить и установить следующую конфигурацию для записи на ваш подчиненный. ( "Поскольку 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"