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

Это действующая стратегия резервного копирования для MongoDB?

У меня есть один выделенный сервер с базой данных MongoDB около 10 ГБ. Мне нужно делать ежедневные резервные копии, но у меня не может быть простоев с базой данных. Можно ли использовать набор реплик на одном диске (с двумя экземплярами mongod, работающими на разных портах) и просто отключить вторичный диск и сделать резервную копию файлов данных во внешнем хранилище, таком как S3 (ведение журнала включено)? Или использование ведущего / ведомого устройства было бы лучше, чем набор реплик?

Жизнеспособно ли это, и если да, то какие у меня могут быть потенциальные проблемы? Если нет, то как мне представить, как это работает?

ReplicaSet будет работать в этом сценарии. Однако я не могу сказать, является ли хорошей идеей наличие двух экземпляров MongoDB на одном сервере - это зависит от аппаратного / программного обеспечения сервера и нагрузки.

Чтобы убедиться, что ваш backup Узел MongoDB не становится главным, установите его priority параметр к 0, например

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

НОТА: если у вас не может быть простоя, вам СЛЕДУЕТ иметь как минимум 2 основных узла MongoDB в ReplicaSet, см. статья

Одна из стратегий, которую следует рассмотреть, - это использовать параметр «скрытый» на резервном узле в вашем наборе реплик. Из блога MongoDB:

Скрытые серверы не отображаются в результатах isMaster (). Это также означает, что они не будут использоваться, если драйвер автоматически распределяет чтение подчиненным. Скрытый сервер должен иметь приоритет 0 (у вас не может быть скрытого основного сервера). Чтобы добавить скрытого члена, запустите:

rs.add ({"_ id": число, "хост": имя хоста, "приоритет": 0, "скрытый": истина})

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

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

Хорошая новость заключается в том, что довольно просто

  1. Выполните запрос к источнику резервного копирования, чтобы узнать, какой экземпляр является основным, а какой - второстепенным (db.isMaster())
  2. Убедите резервный экземпляр уйти, используя rs.freeze() и rs.stepDown() команды или повторно подключиться к вторичному