Мне интересно использовать функцию набора реплик в Mongo как метод плавной миграции между машинами. Моя база данных Mongo в настоящее время является автономным экземпляром. Я понимаю, что рекомендуемая практика заключается в том, чтобы иметь три независимых экземпляра, работающих как набор реплик. Но наши требования к доступности в настоящее время недостаточно высоки, чтобы оправдать стоимость запуска трех независимых экземпляров. При этом я хочу максимально избегать простоев.
При внесении больших изменений на сервер я бы в идеале хотел загрузить новый сервер с необходимыми изменениями (возможно, клонированный с оригинала или, возможно, созданный с нуля с внесенными желаемыми изменениями). На этом сервере размещена база данных mongo.
При тестировании этого нового сервера я хочу, чтобы он был скрытым вторичным. Таким образом, он будет иметь данные, но фактически не будет отвечать на запросы клиентов. Как только я почувствую себя комфортно с новым сервером, я хочу переключить все так, чтобы новый сервер был основным, а старый сервер — скрытым вторичным. Таким образом, старый сервер продолжит получать данные, но не будет обрабатывать запросы клиентов. Если будет обнаружена проблема, я смогу снова поменять местами основной и вторичный, чтобы отправить клиентов обратно на старый сервер. Если через несколько дней не возникнет никаких проблем, я смогу отключить старый сервер.
У меня есть вопросы:
- С какими проблемами я могу столкнуться при использовании этого метода?
- Достигнет ли он моей цели по перемещению данных с одного сервера на другой (и клиентов с одного сервера на другой) с нулевым временем простоя?
- Поскольку я могу захотеть сделать это для будущих изменений, я, вероятно, оставлю новый сервер как набор реплик с 0 участниками. Я понимаю, что это не обеспечивает высокую доступность, которую предлагает по крайней мере три участника. Но не повредит ли это чему-либо, если оставить его таким? Или лучше переключить его обратно на автономный экземпляр?
решение1
Вам понадобится не менее 3 серверов в репликасете для выбора основного. Вы можете использовать существующий сервер, новый сервер и арбитр, работающий на одном из них, чтобы быть третьим. Вы не можете запустить репликасет с одним сервером. Без основного вы не сможете выполнять никаких записей.
Вы не можете перейти из standalone в replicaset без остановки/запуска службы 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/