2011-01-31 4 views
7

Непонятно мне, что блокирует.Добавляет ли redis slave-сообщение блокирующий вызов ведущему устройству?

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

Для контекста я ищу добавление подчиненного устройства к ведущему хостингу, содержащему около 8 ГБ данных без синхронизации с диском *.

* Исторически сложилось так, что потеря данных не вызывала беспокойства. Мы меняем это, поэтому репликация и настойчивость «доводятся» до некоторой степени.

ответ

18

Мастер выполнит запрос BGSAVE по запросу SYNC от подчиненного устройства, так что это не операция блокировки.

Таким образом, последовательность:

  • ведомые запрашивает SYNC
  • мастера BGSAVE, ведомый ждет
  • мастера BGSAVE закончил, начальный массив данных (файл .rdb) перетекают к подчиненным
  • мастер накапливает все новые отличия для подчиненного устройства
  • Мастер заканчивает отправку всего исходного файла rdb на ведомый
  • ma ster начинает кормить подчиненного с накопленным буфером и с чем-то новым прибывающим от клиентов, если они пишут.

Он также работает, если мастер не настроен на сохранение, просто он создаст .rdb только для мастера < -> ведомая синхронизация. В мастер-экземплярах, настроенных без «сохранения» строк в redis.conf, BGSAVE не вызывается автоматически, но все равно может быть вызван пользователем, если есть необходимость сохранить файл .rdb.

+0

Как предотвратить bgsave? Я хочу перейти на последний шаг. Еще один способ: у меня есть один и тот же экземпляр redis, подчиненный другому экземпляру, который, как я знаю, мне не нужно делать с помощью команды rdb SYNC. Это возможно ? – wener

+0

Существует экспериментальная ветка, которая делает это на самом деле, если вы проверите Github, называется «nosync» и закодирована против «нестабильной». – antirez

+0

Спасибо, я проверю – wener

Смежные вопросы