Теперь у меня есть два сервера mongo с конфигурацией Master-Slave (все чтение-запись выполняются с помощью Master, Slave - это просто холодное резервное копирование), обслуживающих довольно требовательное веб-приложение. Я хочу переключиться на ReplicaSet из 3 серверов - у меня эти 3 уже настроены и работают (все еще не подключены к веб-приложению). Просто интересно, каков наиболее эффективный способ (кратчайшее время простоя и передача всех данных без потерь) для передачи всех данных от ведущего / ведомого устройства к RS.
Самый простой способ сделать это - следовать приведенным здесь инструкциям:
Единственное время простоя - перезапустить mongod с новой опцией, а затем запустить команду initiate. Как только он будет установлен, вы затем добавите другие вторичные файлы, синхронизируете их, и все будет хорошо. Вы можете уйти в отставку и продвигать одну из новых машин, если захотите, после того, как они будут синхронизированы, чтобы завершить переключение.
Другой вариант - создать новый мастер, а затем использовать его в качестве основного для вашего набора реплик. Для этого используйте fsync и заблокируйте мастер, как если бы он выполнял резервное копирование (это отключает запись, поэтому будьте осторожны!):
http://www.mongodb.org/display/DOCS/Backups#Backups-WriteLock%2CFsync%2CandBackup
Затем скопируйте файлы данных с текущего мастера в основную базу данных набора реплик (сначала выключите ее), а затем запустите ее как обычно. Затем вторичные компоненты следует стереть и повторно синхронизировать с нуля с этого нового первичного звена.
Вы должны использовать ведущее устройство, потому что ведомые устройства не имеют oplog в настройке ведущего / ведомого устройства, и вы хотите, чтобы один для основного набора реплик выполнялся как можно проще.
Какое тестирование вам нужно провести, чтобы убедиться, что набор реплик работает для вас, зависит от вас, как и то, как вы управляете переключением записей из вашего приложения. Для нулевого времени простоя (кроме fsync и блокировки, когда запись невозможна) вы можете временно записать в оба, а затем переключиться, когда будете довольны. Конечно, это будет зависеть от того, сможет ли ваш сервер приложений обрабатывать удвоенный объем записи.
Самое приятное в этом то, что вы можете протестировать его, прежде чем выполнять какое-либо фактическое переключение, и посмотреть, как у вас дела.