Резервное копирование файлов является критически важной задачей, которая необходима для уверенной эксплуатации серверов и спокойного сна системного администратора. Эффективная система резервного копирования обеспечивает нужную надежность и производительность как сохранения, так и восстановление данных. В рамках данной статьи мы рассмотрим подход, который мы сами используем для обеспечения резервного копирования данных наших серверов.
Создание бэкапов будет выполняться с помощью утилиты с открытым кодом duplicity. После выполнение настройки, резервное копирование данных будет выполняться для заданных в настройке каталогов. Кроме того, для баз данных СУБД MySQL и PostgreSQL будут создаваться дампы данных, которые, как и другие каталоги, будут сохраняться в архив резервного копирования.
Установка в Ubuntu 16.04, Ubuntu 18.04 и Debian Linux
sudo apt-get update && sudo apt-get install -y duplicity lftp
Установка в CentOS 7
sudo yum install http://mirrors.kernel.org/fedora-epel/7/x86_64/e/epel-release-7-5.noarch.rpm sudo yum update sudo yum install ftp sudo yum groupinstall Development Tools sudo yum install python-devel librsync-devel librsync python-setuptools python-lockfile python-boto wget sudo wget https://code.launchpad.net/duplicity/0.7-series/0.7.06/+download/duplicity-0.7.06.tar.gz sudo tar xvf duplicity-0.7.06.tar.gz cd duplicity-0.7.06/ sudo python setup.py build sudo python setup.py install duplicity –version
Загрузка скрипта копирования для вашей ОС
Скрипт реализован на языке оболочки bash и может быть изменен в соответствии с вашими потребностями, однако решает большинство задач и в базовом варианте. Скачайте скрипт себе на сервер:
curl -o backup-server http://net-manager.netpoint-dc.com/utils/backup-server sudo mv backup-server /usr/local/bin/backup-server sudo chmod 755 /usr/local/bin/backup-server
Создание файлов паролей для резервного копирования на FTP
Если вы выполняете резервное копирование в защищенной сети, то нет необходимости использовать сетевые протоколы с шифрованием, так как duplicity уже шифрует хранимые в резервных копиях данные. В этом случае вы можете использовать протокол FTP.
В том случае, если резервное копирование осуществляется в облачные хранилища или файловые серверы, которые находятся в небезопасном сегменте, мы рекомендуем использовать протоколы с шифрованием трафика (FTPS, SFTP, SCP).
Полный список протоколов удаленных хранилищ может быть найден в man duplicity
. В этом руководстве мы настроим резервное копирование по протоколу FTP или FTPS.
По умолчанию, Duplicity выполняет шифрование хранимых данных методом симметричного шифрования секретной фразой с помомощью PGP. Это позволяет вам не бояться того, что злоумышленник сможет взломать архивные копии ваших данных и хранить резервные копии даже в хранилищах с низким уровнем доверия.
Для шифрования данных и задания пароля доступа к хранилищу необходимо создать два файла, в которых будет храниться секретная фраза шифрования PGP и пароль для доступа к серверу FTP:
echo "MySuperGPGSecretKeyWorD123" | sudo tee /root/.passphrase sudo chmod 600 /root/.passphrase echo "MyFTPPassword" | sudo tee /root/.backup-passwd sudo chmod 600 /root/.backup-passwd
Обязательно сохраните ключевую фразу шифрования в надежном месте. Если вы утратите эту фразу, вы не сможете восстановить данные из резервной копии.
Настройка скрипта резервного копирования
Теперь необходимо настроить сам скрипт резервного копирования. Для этого создайте файл /root/backup-config
и откройте его в любимом редакторе. Добавьте в файл переменные, которые будет использовать скрипт в качестве настроечных параметров:
#!/bin/bash FTP_SERVER=c1-ftp1.netpoint-dc.com FTP_PATH=/_data FTP_LOGIN=CHANGEME # ftp or ftps FTP_PROTO=ftp DUPLICITY_FULL_INTERVAL=1W DUPLICITY_STORE_PERIOD=2W DUPLICITY_VOLUME_SIZE=1000 # 1GB # what to backup BACKUP_DIRS="/databases /etc /var/www"
Обратите внимание, ставить пробелы вокруг =
нельзя.
Переменная FTP_LOGIN
определяет имя пользователя FTP.
Интервалы полного резервного копирования и удаления старых копий DUPLICITY_FULL_INTERVAL
и DUPLICITY_STORE_PERIOD
заданы как 1 и 2 недели соответственно. Если требуется, вы можете изменить на другие значения (часто используются d
— Day, w
— Week, m
— Month, y
— Year). Полный список поддерживаемых интервалов смотрите в man duplicity
.
Переменная DUPLICITY_VOLUME_SIZE
определяет какой размер будет у сохраненных томов, в примере 1 GB
. Если вы выполняете копирование по сети с высоким шансом обрыва передачи данных, уменьшайте это значение.
Помните, что, задав слишком малое значение, вы получите огромное количество файлов, что может оказать негативное влияние, если сервер медленно обрабатывает листинги каталогов или имеет ограничение на количество inode в файловой системе. С другой стороны, малый размер тома ускорит время восстановления файлов, поскольку время распаковки тома будет меньше, чем для большого тома.
Переменная BACKUP_DIRS
содержит перечень каталогов, которые будут помещены в архив. Специальный каталог /databases
создается скриптом автоматически для дампов MySQL. Убирать этот каталог из списка не надо, иначе базы данных не будут сохраняться в резервную копию.
Настройка резервного копирования баз данных MySQL
Дампы баз данных сохраняются в каталог /databases/день-недели
, для MySQL дампы имеют префикс my_
. Такая структура хранения (по дням недели) значительно упрощает восстановление данных без обращения к резервным копиям.
Для активации бэкапа баз MySQL необходимо создать файл с настройками для подключения к серверу MySQL:
sudo mkdir -p /root/mysql sudo tee /root/mysql/my.cnf >/dev/null [client] host = localhost user = backup password = secret Ctrl^D
У указанной учетной записи должен быть достаточный доступ для листинга (SHOW DATABASES
) и дампа баз данных.
Настройка резервного копирования баз PostgreSQL
Дампы баз данных сохраняются в каталог /databases/день-недели
, для PostgreSQL дампы имеют префикс pg_
. Такая структура хранения (по дням недели) значительно упрощает восстановление данных без обращения к резервным копиям.
Для того, чтобы базы данных Postgres сохранялись в копии, необходимо только наличие PostgreSQL и пользователя postgres
, который имеет доступ к psql
.
Тестовый запуск
Проверьте выполнение резервного копирования с заданными настройками. В результате тестового запуска в хранилище должны образоваться каталоги вида backup-<hostname>_<my_dir_path>
, содержащие данные.
sudo bash /root/backup-server
Если все отработало правильно, то переходим к заключительному этапу настройки — запуску по расписанию.
Добавление запуска по расписанию
Создайте файл /etc/cron.daily/backup-server
. Добавьте в него скрипт запуска резервного копирования:
#!/bin/bash bash /root/backup-server exit 0
Установите корректные права и проверьте работоспособность скрипта:
sudo chmod 755 /etc/cron.daily/backup-server sudo /etc/cron.daily/backup-server
Если резервное копирование успешно выполнено, значит все в порядке. Для уверенности проверьте, что резервные копии обновились через сутки.
Дальнейшие шаги
Необходимо регулярно наблюдать, что в хранилище создаются бэкапы. Периодически необходимо проводить тестовое восстановление данных с помощью duplicity.
О том, как восстанавливать файлы из резервных копий, созданных с помощью Duplicity, читайте в нашем руководстве по восстановлению.