Назад | Перейти на главную страницу

Использование репликации для миграции в MongoDB

Мне интересно использовать функцию набора реплик в Mongo как метод плавной миграции между машинами. Моя база данных Mongo в настоящее время является автономным экземпляром. Я понимаю, что рекомендуется иметь три независимых экземпляра, работающих как набор реплик. Но наши требования к доступности в настоящее время недостаточно высоки, чтобы оправдать затраты на запуск трех независимых экземпляров. При этом я хочу, насколько это возможно, избегать простоев.

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

При тестировании этого нового сервера я хочу, чтобы он был скрытым вторичным. Таким образом, он имеет данные, но фактически не отвечает на запросы клиентов. Как только я почувствую себя комфортно с новым сервером, я хочу поменять местами так, чтобы новый сервер был основным, а старый - скрытым вторичным. Таким образом, старый сервер продолжает получать данные, но не обрабатывает клиентские запросы. Если проблема обнаружена, я могу снова переключить первичный и вторичный сервер, чтобы отправить клиентов обратно на старый сервер. Если через несколько дней проблем не возникнет, я могу выключить старый сервер.

Мои вопросы:

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

Вы не можете перейти с автономного на набор реплик без остановки / запуска службы mongod. Вам нужно перезапустить mongo с помощью --replSet replica_set_name или добавить replSet=replica_set_name вариант вашего mongod.conf.

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

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

http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/