План резервного копирования MongoDB

Я хочу перейти с MySQL на MongoDB, но большие потери данных (более 1 часа) для меня неприемлемы.

Мне нужно иметь 3 резервных плана:

  1. Почасовой план резервного копирования. Данные сбрасываются на диск каждые X минут, и если что-то не так с сервером, я буду уверен, что после перезагрузки на нем будут все данные хотя бы за час назад. Могу ли я настроить его?

  2. Ежедневный план резервного копирования. Данные синхронизируются с резервным диском каждый день, поэтому, даже если сервер взорвется, я смогу восстановить вчерашние данные за несколько часов. Должен ли я использовать fsync, master-slave или что-то еще? Я хотел бы иметь минимальный трафик, поэтому в идеале будут отправлены только изменения.

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

Как мне это сделать?


person luchaninov    schedule 28.09.2010    source источник


Ответы (5)


  1. Команда fsync сбрасывает данные на диск. По умолчанию он выполняется каждые 60 секунд, но его можно настроить с помощью параметра командной строки --syncdelay.

  2. В документации по резервному копированию есть несколько полезных советов по ежедневному и еженедельному резервному копированию. Для ежедневного резервного копирования конфигурация master-slave кажется лучшим вариантом, поскольку он будет только синхронизировать изменения.

  3. Для еженедельного резервного копирования вы также можете использовать конфигурацию master-slave или репликацию. Другим вариантом является утилита mongodump, всю базу данных. Он способен создавать резервные копии во время работы базы данных, поэтому вы можете запускать его в основной базе данных или в одном из подчиненных. Вы также можете заблокировать ведомое устройство перед его резервным копированием.

person Niels van der Rest    schedule 28.09.2010
comment
Я бы пошел с наборами реплик, если вы можете. - person sdot257; 28.09.2010

Попробуйте этот сценарий резервного копирования, если вы хотите создать резервную копию из подчиненной базы данных mongodb на S3.

  1. Хост БД (предпочтительнее вторичный, чтобы не влиять на основную производительность)

    HOST='SomeHost/mongodbtest-slave'

  2. Имя БД DBNAME=***

  3. Имя корзины S3 BUCKET=*-backup

  4. Учетная запись пользователя Linux USER=ubuntu

  5. Текущее время TIME=/bin/date +%d-%m-%Y-%T

  6. Пароль ПАРОЛЬ=somePassword#!2*1

  7. Имя пользователя USERNAME=someUsername

  8. Резервный каталог DEST=/home/ubuntu/tmp

  9. Tar-файл каталога резервных копий TAR=$DEST/../$TIME.tar

  10. Создать резервный каталог (-p, чтобы избежать предупреждения, если он уже существует) /bin/mkdir -p $DEST

  11. Эхо журнала Резервное копирование $HOST/$DBNAME на s3://$BUCKET/ в $TIME;

  12. Дамп с хоста mongodb в резервный каталог

mongodump --port 27017 -d ИМЯ БД -u ИМЯ ПОЛЬЗОВАТЕЛЯ -p ПАРОЛЬ -o $DEST

  1. Создайте tar резервного каталога /bin/tar cvf $TAR -C $DEST .

  2. Загрузите tar на s3 /usr/bin/aws s3 cp $TAR s3://$BUCKET/

  3. Удалить файл tar локально /bin/rm -f $TAR

  4. Удалить каталог резервных копий /bin/rm -rf $DEST

Все готовое эхо Резервное копирование доступно по адресу https://s3.amazonaws.com/$BUCKET/$TIME.tar

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

person Pragyanshu Sharma    schedule 08.09.2020

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

Этот часто задаваемые вопросы содержит полную политику хранения.

Служба резервного копирования постоянно создает резервную копию вашего набора реплик, читая oplog, поэтому накладные расходы ниже, чем полные локальные периодические моментальные снимки.

person erlichson    schedule 19.07.2013

Возможно, вы можете использовать automongobackup .

person wanghao    schedule 03.11.2015

По первому пункту.

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

По второму и третьему пунктам.

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

Здесь есть несколько подходов:

  1. Моментальный снимок LVM — хорошее решение, если ваша файловая система его поддерживает и ведение журнала включено в вашей mongoDB. Подробнее см. здесь
  2. mongodump — вы можете создать сценарий оболочки, который будет запускать запланированные резервные копии через cron и отправлять их в хранилище. Вот пример хорошего скрипта
  3. Резервное копирование как услуга. Есть много решений, чтобы сделать резервную копию для вас.
person Ivan Gusev    schedule 08.03.2021