обзор
Хотя Vultr имеет систему резервного копирования для всех образов системы, она работает на уровне блоков и требует, чтобы резервная копия была восстановлена на ВМ, прежде чем данные можно будет восстановить. Кроме того, резервные копии хранятся только в течение короткого периода времени и не обеспечивают истинного решения для инкрементного резервного копирования.
Enter Duplicity - Duplicity опирается на легендарный rsync и предоставляет возможность хранить инкрементные резервные копии вместе с шифрованием данных в состоянии покоя с помощью GPG. Он совместим с Posix и передает только дельты между запусками резервного копирования, тем самым снижая общую пропускную способность
Настройка среды
терминология
- Исходный хост - сервер, для которого будут созданы резервные копии данных. Для этого урока он имеет IP-адрес: 10.1.10.1
- Резервный хост - Сервер назначения для резервного копирования. Для этого урока он имеет IP-адрес: 10.1.10.2
- / backupdir - Исходный каталог на исходном хосте, используемый для резервного копирования в этом руководстве. Вы можете изменить это, чтобы соответствовать вашей среде.
- / destdir - Целевой каталог на хосте резервного копирования, используемый для резервного копирования в этом руководстве. Вы можете изменить это, чтобы соответствовать вашей среде.
- Полная резервная копия - полная копия исходного набора данных.
- Инкрементное резервное копирование - копирование всех изменений, внесенных с момента последнего резервного копирования.
Установка Duplicity
Ubuntu 14.04:
sudo apt-get update
sudo apt-get install duplicity python-paramiko
CentOS (требуется EPEL):
sudo yum install duplicity python-paramiko
Ubuntu 12.04 / Debian 7:
sudo apt-get update
sudo apt-get install ncftp python-paramiko python-pycryptopp lftp python-boto python-dev librsync-dev
wget https://launchpad.net/duplicity/0.7-series/0.7.02/+download/duplicity-0.7.02.tar.gz
tar xzvf duplicity*
cd duplicity*
sudo python setup.py install
Мы должны установить из исходного кода, так как пакет Duplicity в Debian 7 и Ubuntu 12.04 не работает из-за изменений в библиотеке SSH бэкенда.
Дважды проверьте, что Duplicity установлен, запустив:
duplicity -v
Он должен вернуть следующий вывод (версия может отличаться):
duplicity 0.6.18
Настройка аутентификации без ключа для SSH
Следующим шагом является настройка аутентификации на основе сертификатов для SSH между резервным хостом и исходным хостом. Это позволит исходному серверу SSH подключиться к резервному хосту без ввода ключевой фразы. У Vultr есть отличная статья, в которой объясняется, как это сделать: как генерировать SSH-ключи .
Резервные копии
Запуск первого (полного) резервного копирования
Давайте запустим полную резервную копию! Это отправит полную копию данных с исходного сервера в пункт назначения.
duplicity full -v --no-encryption --include="/sourcedir/" --exclude="**" / ssh://user@backupserver:22/destdir/
Вы можете добавить дополнительные папки, включив несколько --include="[dir]"
операторов.
В --no-encryption
указывает , что данные не будут зашифрованы в пункте назначения. Данные будут зашифрованы во время транспортировки, поскольку они проходят через туннель SSH.
--exclude="**" /
Опция трюк для резервного копирования всего , что только в списке включаемых (и ничего больше).
Запуск инкрементного резервного копирования
Запуск инкрементного резервного копирования очень прост - просто измените full
флаг на incremental
флаг.
duplicity incremental -v --no-encryption --include="/sourcedir/" --exclude="**" / ssh://user@backupserver:22/destdir/
автоматизация
Написать автоматизированные сценарии
Необходимость запускать эти команды каждый раз, когда вам требуется резервное копирование, - непростая задача. Что, если бы у нас были сценарии, чтобы справиться с этим для нас?
Полный резервный скрипт
Запустите команду.
nano /usr/local/bin/backup-full
Добавьте следующий контент.
#!/bin/bash
duplicity full -v --no-encryption --include="/sourcedir/" --exclude="**" / ssh://user@backupserver:22/destdir/
Сценарий инкрементного резервного копирования
nano /usr/local/bin/backup-incremental
Добавьте следующий контент.
#!/bin/bash
duplicity incremental -v --no-encryption --include="/sourcedir/" --exclude="**" / ssh://user@backupserver:22/destdir/
Сделайте скрипты исполняемыми
Чтобы сделать сценарии исполняемыми, выполните следующую команду.
chmod +x /usr/local/bin/backup-*
Теперь вы можете выполнить резервное копирование, запустив backup-full
и backup-incremental
из оболочки. Довольно круто!
Настройка cron
Давайте сделаем резервные копии автоматически! Установив cron для запуска вышеуказанных сценариев в указанное время, мы можем гарантировать, что резервное копирование будет выполняться через регулярные промежутки времени.
Запустите следующую команду.
crontab -e
Добавьте следующее в конец файла.
10 01 * * 1,2,3,4,5,6 backup-incremental
10 01 * * 7 backup-full
Полное резервное копирование будет выполняться каждое воскресенье в 1:10, а инкрементное резервное копирование - через день в 1:10.
восстановление
Годзилла уничтожил Сиэтл, и мы должны иметь возможность вернуть данные с резервного VPS в Нью-Йорке!
duplicity --no-encryption --file-to-restore / ssh://user@backupserver:22/destdir/
Если нам нужно восстановить данные за 3 дня назад:
duplicity --no-encryption -t 3D --file-to-restore / ssh://user@backupserver:22/destdir/
В -t 3D
средстве варианта восстановление резервной копии из трех дней назад. Подобные опции, такие как -t 1M
(для месяца назад) или -t 5H
(для 5 часов назад), также работают.