Мне интересно использовать функцию набора реплик в 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/