Как CouchDB Replication ведет себя с отказавшими / восстановленными серверами? - PullRequest
5 голосов
/ 13 августа 2011

Рассмотрим следующий сценарий:

3 экземпляра EC2, расположенных в:

  • US-WEST
  • Ирландия
  • Токио

Каждый экземпляр является выделенным сервером CouchDB.Каждый сервер CouchDB настроен для запуска непрерывной репликации с каждым другим сервером (двунаправленный).

Теперь предположим, что сервер Ирландии отключается из-за некоторого сбоя AWS.Серверы US-WEST и Tokyo CouchDB будут повторять X раз, а затем в конечном итоге не смогут выполнить репликацию на этот сервер (верно?)

Допустим, прошло 6 часов, и AWS вернул регион в оперативный режим и этот сервервозвращается - я полагаю, что US-WEST и Токио будут игнорировать сервер в Ирландии до тех пор, пока ирландский сервер CouchDB не запустит двунаправленную синхронизацию с ними обоими, например:

Irish CouchDB _replicator Pseudo-Settings

  • копия [источник = localhost, цель = us-west]
  • копия [source = us-west, target =localhost]
  • копия [source = localhost, target = tokyo]
  • копия [source = tokyo, target = localhost]

Q1: это мое понимание Кушаошибка репликации / восстановление правильное?

Q2: Что если в случае сбоя в сети, который устраняется через час (в частности, не происходит перезапуска сервера, заставляющего БД повторно инициировать себя при запуске), как соответствующие экземпляры CouchDB реагируют на это??Я полагаю, что США-Запад и Токио забудут об Ирландии, но вдруг Ирландия снова начнет разговаривать с этими двумя серверами, повторно инициализируя двунаправленную непрерывную репликацию?

Меня особенно интересует восстановление после сбоев в EC2окружающая среда, поэтому, если в этой среде есть какие-то подробности, которые я пропустил, пожалуйста, дайте мне знать.

Спасибо!

1 Ответ

4 голосов
/ 13 августа 2011

До версии 1.1 задача репликации не была постоянной, даже непрерывной.В случае разъединения попытка повторной попытки ограничена, но в конечном итоге она прекратится.Когда подключение возобновится, вам нужно будет снова начать репликацию.Поскольку репликация идемпотентна (запуск одной и той же задачи репликации дважды аналогичен ее запуску один раз), вы можете просто добавить cronjob, чтобы запускать ее каждую минуту (или любой интервал, который вам кажется нормальным).Если задача уже выполняется, попытка возвращает успех (но не запускает другую репликацию).

В версии 1.1 вы можете создавать задачи постоянной репликации, создавая документ в специальной базе данных _replicator.CouchDB будет повторять это в случае сбоя или прерывания соединения.ПРИМЕЧАНИЕ: 1.1.0 в конце концов сдается, в следующем выпуске (1.1.1) мы разрешаем бесконечные повторы.

Поскольку CouchDB с самого начала разработан для поддержки репликации с несколькими мастерами, вы не удивитесьуслышать, что он очень хорошо обрабатывает прерывания связи.Изменения, которые произошли во время прерывания, быстро обнаруживаются и воспроизводятся.

...