Вызывает ли добавление подчиненного устройства Redis блокирующий вызов на мастер? - PullRequest
7 голосов
/ 31 января 2011

Мне неясно из документации по репликации , блокирует ли команда SYNC .

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

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

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

1 Ответ

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

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

Итак, последовательность:

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

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

...