Как репликация CouchDB ведет себя с неисправными/восстановленными серверами?

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

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

  • США-ЗАПАД
  • Ирландия
  • Токио

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

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

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

Псевдо-настройки Irish CouchDB _replicator

  • реплицировать [источник = локальный хост, цель = мы-запад]
  • репликация [источник = сша-запад, цель = локальный хост]
  • репликация [источник = локальный хост, цель = Токио]
  • репликация [источник = Токио, цель = локальный хост]

Q1: Правильно ли я понимаю сбой/восстановление репликации Couch?

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

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

Спасибо!


person Riyad Kalla    schedule 13.08.2011    source источник


Ответы (1)


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

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

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

person Robert Newson    schedule 13.08.2011
comment
Роберт, это просто потрясающе. После использования SimpleDB, Redis и Mongo я внезапно осознал одержимость Couch репликацией, и это было похоже на свет в моей голове... вдруг ВСЕ мои болевые точки с хранилищами данных NoSQL/постоянством/безопасностью исчезли, и я остался с этой прямолинейной, простой и надежной системой, которая просто работает. Большое спасибо за разъяснения! - person Riyad Kalla; 14.08.2011