Как настроить автоматическое резервное копирование MongoDB на S3
Настройка резервных копий базы данных — это самое важное, что нужно сделать администратору базы данных. Хотя платформы «база данных как услуга», такие как RDS, поддерживают автоматическое резервное копирование «из коробки», если вы используете собственный сервер, вам нужно будет настроить резервное копирование самостоятельно.
Какова лучшая стратегия резервного копирования?
Самая простая стратегия резервного копирования — это использование полностью управляемой базы данных как услуги и настройка автоматического резервного копирования с их панели управления. Сюда входят такие сервисы, как AWS RDS и DocumentDB, а также Atlas от Mongo, которые поддерживают автоматическое резервное копирование в S3. Однако не все используют их, и если вы этого не сделаете, вам придется справиться с ними самостоятельно.
Если вы не хотите обрабатывать их самостоятельно, но вам все равно нужно запускать базу данных на собственном оборудовании, вы можете попробовать Cloud Manager от Mongo, который стоит 40 долларов в месяц за сервер и поддерживает автоматическое резервное копирование, а также мониторинг операций. Это, безусловно, лучший вариант для сегментированных кластеров и наборов реплик, поэтому, если вы используете что-то большее, чем одну базу данных, вам нужно настроить это.
Однако ничто не сравнится с бесплатным, и вы, конечно, можете самостоятельно настроить резервное копирование с помощью простого задания cron. У вас есть два варианта: создать резервную копию базовых файлов с помощью моментального снимка файловой системы или запустить mongodump
. Оба являются допустимыми методами, и оба могут быть выполнены в работающей базе данных, так что выбор за вами. Мы будем использовать mongodump
, так как это намного проще, но если у вас очень большая база данных, вы можете вместо этого использовать снимки файловой системы.
Настройка mongodump и S3
Во-первых, вам потребуется установить и настроить интерфейс командной строки AWS с учетной записью IAM, которая может получить доступ к целевому сегменту. Вам также необходимо создать корзину, в которой будут храниться резервные копии.
Затем скопируйте этот скрипт на сервер:
export HOME=/home/ubuntu/ HOST=localhost # DB name DBNAME=database # S3 bucket name BUCKET=backups # Linux user account USER=ubuntu # Current time TIME=`/bin/date +%d-%m-%Y-%T` # Backup directory DEST=/home/$USER/tmp # Tar file of backup directory TAR=$DEST/../$TIME.tar # Create backup dir (-p to avoid warning if already exists) /bin/mkdir -p $DEST # Log echo "Backing up $HOST/$DBNAME to s3://$BUCKET/ on $TIME"; # Dump from mongodb host into backup directory /usr/bin/mongodump -h $HOST -d $DBNAME -o $DEST # Create tar of backup directory /bin/tar cvf $TAR -C $DEST . # Upload tar to s3 /usr/bin/aws s3 cp $TAR s3://$BUCKET/ --storage-class STANDARD_IA # Remove tar file locally /bin/rm -f $TAR # Remove backup directory /bin/rm -rf $DEST # All done echo "Backup available at https://s3.amazonaws.com/$BUCKET/$TIME.tar"
Это устанавливает набор переменных, в том числе переменную HOME для совместимости с cron
, а также настройки базы данных и корзины. Затем он создает папку ~/tmp
для сохранения дампа и запускает mongodump
в целевой базе данных. Он запускает tar
для резервного копирования каталога (поскольку mongodump
сохраняет отдельные файлы для каждой коллекции), а затем загружает файл на S3, сохраняя его в заданном сегменте в разделе Нечастый доступ. уровень, который экономит деньги на затратах на хранение и идеально подходит для этого варианта использования.
Если вы запустите этот скрипт, вы должны увидеть новую резервную копию tar в целевом сегменте. Если это работает, откройте свой crontab с помощью:
crontab -e
И добавьте новую строку для этого скрипта:
Скорее всего, вы захотите установить для него значение * * * * *
, чтобы он запускался каждую минуту, просто чтобы убедиться, что он работает из cron. Как только вы подтвердите, что это так, вы можете установить что-то более разумное, например, один или два раза в день. Вы можете использовать этот онлайн-планировщик cron, чтобы убедиться, что ваши расписания в порядке.
Настройка жизненного цикла S3
Поскольку эти резервные копии представляют собой просто дампы базы данных, вы, вероятно, не хотите хранить их более недели или двух, так как в противном случае они довольно быстро заполнят вашу корзину S3.
S3 может обрабатывать вращающиеся объекты из корзин с помощью жизненных циклов S3. В настройках корзины нажмите «Управление» и «Добавить правило жизненного цикла».
Настройте его так, чтобы он применялся ко всем объектам в корзине, и дайте ему имя. Пропустить переходы.
В разделе Срок действия вы можете настроить его для удаления объектов через определенное количество дней в корзине. Вы также можете удалить предыдущие версии объектов, но, поскольку скрипт ставит временные метки для резервных копий, в этом нет необходимости.
Нажмите «Создать», и политика вступит в силу.