borgbackup
Роль бэкапа Borg
Эта роль устанавливает бэкап Borg на серверах и клиентах borgbackup. В роли есть обертка-скрипт 'borg-backup', чтобы упростить использование на клиенте. Поддерживаемые команды включают borg-backup info | init | list | backup | mount. Если Automysqlbackup установлен, он будет запущен как предшествующая команда перед созданием бэкапа. Роль поддерживает как собственные хранилища, так и удалённые хранилища, такие как rsync.net и hetzner storage box как сервер Borg.
Можно настроить репозитории только для добавления, чтобы защитить бэкапы от удаления с клиента.
Для запуска этой роли требуется Ansible версии 2.9 или выше.
Требуемые переменные
Определите группу borgbackup_servers в вашем инвентаре с одним или несколькими хостами. Группа borgbackup_management необходима только в случае, если вы хотите включить режим только для добавления и очищать бэкапы с защищенных хостов.
[borgbackup_servers]
backup1.fiaas.co
[borgbackup_management]
supersecurehost
Определите group- или hostvars для ваших конечных точек бэкапа и хранения:
borgbackup_servers:
- id: fiaas
fqdn: backup1.fiaas.co
user: borgbackup
type: normal
home: /backup/
pool: repos
options: ""
- id: rsync
fqdn: yourhost.rsync.net
user: userid
type: rsync.net
home: ""
pool: repos
options: "--remote-path=borg1"
- id: hetzner
fqdn: username.your-storagebox.de
user: username
type: hetzner
home: ""
pool: repos
options: ""
borgbackup_retention:
hourly: 12
daily: 7
weekly: 4
monthly: 6
yearly: 1
ВНИМАНИЕ: обратный слэш / в поле item.home обязателен.
Определите borg_passphrase для каждого хоста. host_vars/client1:
borgbackup_passphrase: Ahl9EiNohr5koosh1Wohs3Shoo3ooZ6p
По умолчанию роль создает cron-задачу в /etc/cron.d/borg-backup, которая запускается под пользователем root каждый день в случайный час между 0 и 5 утра в случайную минуту. При необходимости переопределите значения по умолчанию:
borgbackup_client_user: root
borgbackup_cron_day: "*"
borgbackup_cron_minute: "{{ 59|random }}"
borgbackup_cron_hour: "{{ 5|random }}"
Переопределите borgbackup_client_user, где это необходимо, например, если у вас есть ноутбук с зашифрованным домашним каталогом, вам нужно будет выполнить бэкап от имени этого пользователя.
Установите borgbackup_appendonly: True в переменных хоста или группы, если вы хотите использовать репозитории только для добавления. В этом случае можно определить имя хоста в borgbackup_management_station, где будет настроен скрипт borg prune. Только управляющая станция будет иметь разрешение на очистку старых бэкапов для (всех) клиентов. Это сгенерирует сервер с параметрами --append-only для ssh-ключей. Если вы установите borgbackup_appendonly_repoconfig в True, это также отключит возможность удаления бэкапов с управляющей станции. (Или, по крайней мере, удалить их невозможно, пока вы не перенастроите репозиторий, и это в настоящее время не поддерживается в скрипте prune) Обратите внимание на ограничения режима только для добавления: очищенные бэкапы кажутся удаленными, но на самом деле они только удаляются в журнале транзакций, пока что-то не запишет их в обычном режиме в репозиторий)
Убедитесь, что проверили заданные значения по умолчанию для этой роли, которые содержат список местоположений по умолчанию, которые сохраняются в backup_include. Переопределите это в вашем инвентаре, где это необходимо.
Установка Borg из пакета
Borg можно установить из пакета, установив переменную:
borgbackup_install_from_pkg: true
На системах EPEL (RedHat/CentOS) репозиторий epel-release будет добавлен автоматически с помощью роли geerlingguy.repo-epel
.
Использование
Настройте Borg на сервере и на клиенте:
ansible-playbook -i inventory/test backup.yml -l backup1.fiaas.co
ansible-playbook -i inventory/test backup.yml -l client1.fiaas.co
Тестирование
Вся функциональность роли тестируется с помощью molecule, используя локальное соединение Docker для избежания сложности.
Для получения дополнительной информации о тестировании molecule, см. https://molecule.readthedocs.io/en/latest/
.
Тесты написаны с использованием Testinfra, см. https://testinfra.readthedocs.io/en/latest/
.
Из-за разнообразия сценариев тесты сами хранятся в molecule/generic_files
, чтобы оптимизировать повторное использование. Их можно применять к хостам/группам, используя группы.
Начать тестирование так же просто, как выполнить следующее на любом компьютере с запущенным локальным Docker-движком: (из корневого каталога этой роли)
$ virtualenv -p python3 ~/.venv/fiaasco-borgbackup-docu
$ source ~/.venv/fiaasco-borgbackup-docu/bin/activate
$ pip3 install -r requirements.txt
$ molecule test
Убедитесь, что протестирована вся функциональность. Непрохождение сборок не будет допускаться при проверке PR! Каждый тестовый сценарий выполняет полное развертывание с сервером бэкапа, выполняет бэкап, тест восстановления и различные другие небольшие тесты, обеспечивая функциональную стабильность.
Тестовые сценарии
default
molecule test
Этот сценарий тестирует наиболее распространённую функциональность на платформах Debian. Он запускает сервер бэкапа на 2 последних официальных выпусках Debian.
centos
molecule test -s centos
Этот сценарий тестирует наиболее распространённую функциональность на платформах EPEL. Он запускает сервер бэкапа на 2 последних официальных выпусках CentOS.
ubuntu
molecule test -s ubuntu
Этот сценарий тестирует наиболее распространённую функциональность на платформах Ubuntu. Он запускает сервер бэкапа на 2 последних официальных выпусках Ubuntu.
multiple
molecule test -s multiple
Этот сценарий гарантирует, что функциональность роли работает, когда определено 2 или более серверов бэкапа.
lamp
molecule test -s lamp
Тестирование функциональности, когда роль fiaas.lamp
применяется к машине, обеспечивая совместимость с хостом 'Fiaas'. См. molecule.yml
для деталей.
clients
molecule test -s clients
Этот тест является самым большим сценарием, так как он включает тестирование всех поддерживаемых платформ и их комбинаций. Например, Debian 8 + 9 + 10, Fedora 31 и т.д. Поскольку мы все используем разные системы и платформы, это может быть безопасно расширено при условии, что этот сценарий продолжает работать!
Дополнительное чтение
Install Borg backup server and client (with rsync.net server support)
ansible-galaxy install fiaasco/borgbackup