restic
Ansible Роль: restic
Бета: Эта роль находится на бета-стадии.
Описание
Restic — это универсальное решение для резервного копирования на основе Go, поддерживающее множество хранилищ, дедупликацию и инкрементные резервные копии.
Эта роль устанавливает restic на клиенте, настраивает репозитории для резервного копирования и при необходимости устанавливает таймер systemd или cron для выполнения резервного копирования. Кроме того, она создает исполняемые скрипты для ручного запуска резервного копирования.
Этот проект заимствовал много идей из donat-b/ansible-restic и https://github.com/arillso/ansible.restic. Мы стараемся сделать эту роль более понятной и современной, используя таймер systemd, /etc/crontab для определения путей резервного копирования, больше абсолютных путей и меньше параметров. (не тестировалось для S3 Storage или Windows...)
Скрипты резервного копирования
Эта роль создаст скрипт резервного копирования и файл с учетными данными, которые можно использовать с командой source
в Linux для каждого резервного копирования в restic_script_dir
.
Эти исполняемые скрипты можно использовать для ручного запуска резервного копирования, но они также используются для автоматизированных резервных копий, если вы установите переменную restic_create_schedule
в true.
Убедитесь, что вы не изменяете файлы вручную, так как это может нарушить процесс резервного копирования.
В Linux, если вы хотите сделать ручной снимок, вы можете запустить резервное копирование так:
$ /path/to/backup/script/backup-example.sh
По умолчанию такой снимок будет иметь тег manual
, чтобы вы могли отличить его от автоматически созданных снимков. Вы также можете добавить дополнительные теги, просто добавив их:
$ /path/to/backup/script/backup-example.sh --tag deployment
CRON / Запланированные задачи
Чтобы использовать определенные резервные копии, их можно автоматически установить как запланированные задачи. Вам нужно быть в курсе, что (по крайней мере, на системах Linux) вам нужны права администратора для настройки такого действия.
Если вы не можете использовать автоматическое создание задач, вы все равно можете использовать сгенерированные скрипты. Например, если вы находитесь на общем хостинге и можете задать cronjob через веб-интерфейс, просто добавьте каждый файл резервного копирования для выполнения. Убедитесь, что вы добавили CRON=true
перед командой, чтобы указать, что
снимок был создан через запланированную задачу:
CRON=true /path/to/backup/script/backup-example.sh
Установка
Существует несколько способов установки роли. Либо клонируйте или загрузите ее напрямую из репозитория github. Либо установите ее через ansible galaxy:
ansible-galaxy install roles-ansible.restic
Требования
- bzip2
Переменные роли
Имя | По умолчанию | Описание |
---|---|---|
restic_url |
не определено |
URL для загрузки restic. Используйте эту переменную для переопределения значения по умолчанию |
restic_version |
'0.15.1' |
Версия Restic для установки |
restic_download_path |
'/opt/restic' |
Путь для загрузки исполняемого файла restic |
restic_install_path |
'/usr/local/bin' |
Путь установки исполняемого файла restic |
restic_script_dir |
'/opt/restic' |
Путь к созданным скриптам резервного копирования |
restic_backup_script_shell |
sh |
Оболочка для выполнения скриптов резервного копирования |
restic_log_dir |
'{{ restic_script_dir }}/log' |
Путь к логам скриптов резервного копирования |
restic_repos |
{} |
Словарь репозиториев, где хранятся снимки. (Больше информации: Repos) |
restic_backups |
{} (или [] ) |
Список словарей, specifying файлы и директории для резервного копирования (Больше информации: Backups) |
restic_create_schedule |
false |
Нужно ли запланировать каждое резервное копирование? Либо через cronjob, либо через таймер systemd. |
restic_backup_now |
false |
Нужно ли немедленно запустить скрипт резервного копирования |
restic_schedule_type |
systemd |
Здесь вы можете определить, создаем ли мы cronjob или таймер systemd . Если создание таймера systemd не удалось, будет создан cronjob. |
restic_dir_owner |
'{{ansible_user}}' |
Владелец всех созданных директорий |
restic_dir_group |
'{{ansible_user}}' |
Группа всех созданных директорий |
restic_no_log |
true |
Установите в false, чтобы видеть скрытые логи ansible |
restic_do_not_cleanup_cron |
false |
Мы изменили местоположение cron и очищаем старое. Здесь можно пропустить очистку |
restic__cache_config |
false |
Настройка пользовательского кэша |
restic__cache_dir |
'~/.cache/restic' |
Определение пользовательского кэша |
submodules_versioncheck |
false |
Если вы установите эту переменную в true, роль выполнит простую проверку версий, чтобы предотвратить использование устаревших версий этой роли. |
restic__limit_cpu_usage |
false |
Нужно ли ограничить использование процессора? |
restic__max_cpus |
1 |
Максимальное количество процессоров, которые могут использоваться одновременно |
Репозитории
Restic хранит данные в репозиториях. Вы должны указать как минимум один репозиторий, чтобы иметь возможность использовать эту роль. Репозиторий может быть локальным или удаленным (см. официальную документацию).
Использование репозитория SFTP
Для использования бэкенда SFTP пользователь должен иметь доступ без пароля к хосту. Убедитесь, что ключи ssh распространены соответствующим образом, так как это выходит за рамки данной роли.
Доступные переменные:
Имя | Обязательно | Описание |
---|---|---|
location |
да | Местоположение бэкенда. В настоящее время поддерживаются Local, SFTP, S3, Azure Blob и B2 |
password |
да | Пароль, используемый для защиты этого репозитория |
init |
нет | Описывает, должен ли репозиторий быть инициализирован или нет. Используйте false , если вы создаете резервную копию в уже существующий репозиторий. |
Пример:
restic_repos:
local:
location: /srv/restic-repo
password: securepassword0
init: true
remote:
location: rest:https://restic_rest_server.example.com:8000/restic-repo/
password: securepassword1
init: true
sftp:
location: sftp:user@host:/srv/restic-repo
password: securepassword2
init: true
aws:
location: s3:s3.amazonaws.com/bucket_name
password: securepassword3
init: true
aws_access_key: accesskey
aws_secret_access_key: secretaccesskey
aws_default_region: eu-west-1
azure:
location: azure:container:/
password: securepassword4
init: true
azure_account_name: storageaccountname
# Только один из следующих параметров требуется
azure_account_key: somekey
azure_account_sas: sasurl
# Опционально
azure_endpoint_suffix: core.windows.net
b2:
location: b2:bucketname:path/to/repo
password: securepassword5
init: true
b2_account_id: accountid
b2_account_key: accountkey
Резервное копирование
Резервное копирование указывает директорию или файл, который нужно сохранить. Резервная копия записывается в репозиторий, определенный в restic_repos
.
Доступные переменные:
Имя | Обязательно (По умолчанию) | Описание |
---|---|---|
name |
да | Название этой резервной копии. Используется вместе с обрезкой и расписанием и должно быть уникальным. |
repo |
да | Название репозитория, в который будет производиться резервное копирование. |
src |
да (если stdin != true ) |
Исходная директория или файл |
stdin |
нет | Создаётся ли эта резервная копия из stdin? |
stdin_cmd |
нет (да, если stdin == true ) |
Команда для генерации stdin. |
stdin_filename |
нет | Имя файла, используемое в репозитории. |
pre_backup_cmd |
нет | Команда для выполнения перед резервным копированием, обычно используется для выгрузки баз данных на диск. |
tags |
нет | Массив тегов по умолчанию |
keep_last |
нет | Если установлено, сохраняет только последние n снимков. |
keep_hourly |
нет | Если установлено, сохраняет только последние n часовых снимков. |
keep_daily |
нет | Если установлено, сохраняет только последние n дневных снимков. |
keep_weekly |
нет | Если установлено, сохраняет только последние n недельных снимков. |
keep_monthly |
нет | Если установлено, сохраняет только последние n месячных снимков. |
keep_yearly |
нет | Если установлено, сохраняет только последние n годовых снимков. |
keep_within |
нет | Если установлено, сохраняет снимки в этот период времени. |
keep_tag |
нет | Если установлено, сохраняет снимки с этими тегами. Убедитесь, что вы указали список. |
prune |
нет (false ) |
Если true , в скрипте к команде restic forget добавляется опция --prune . |
scheduled |
нет (false ) |
Если restic_create_schedule установлено в true , это резервное копирование запланировано и пытается создать единицу времени systemd. Если не удается, будет создан cronjob. |
schedule_oncalendar |
'*-*-* 02:00:00' |
Время для таймера systemd. Обратите внимание на опцию randomDelaySec. По умолчанию резервное копирование выполняется каждую ночь в 2 часа (+0-4ч). Но только если запланировано. |
schedule_minute |
нет (* ) |
Минуты, когда выполняется задание. ( 0-59, *, */2 и т.д.) |
schedule_hour |
нет (2 ) |
Часы, когда выполняется задание. ( 0-23, *, */2 и т.д.) |
schedule_weekday |
нет (* ) |
День недели, когда выполняется задание. ( 0-6 для воскресенья-субботы, *, и т.д.) |
schedule_month |
нет (* ) |
Месяц, когда выполняется задание. ( 1-12, *, */2 и т.д.) |
exclude |
нет ({} ) |
Позволяет указать файлы для исключения. См. Исключения для справки. |
disable_logging |
нет | Опционально отключить ведение логов |
log_to_journald |
нет | Опционально переключить ведение логов на journald с именем задания резервного копирования как тег |
mail_on_error |
нет | Опционально отправить письмо, если резервное копирование не удалось (требуется mailx) |
mail_address |
если mail_on_error установлено в true |
Адрес электронной почты для получения писем, если вы включили mail_on_error . |
monitoring_call |
нет | Команда, которая будет вызвана, если резервное копирование будет успешным. Полезно для систем мониторинга, которые предупреждают, когда не получен никакой сигнал. Используйте полную команду, которую необходимо выполнить. Пример: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping= |
niceness |
нет | Если установлено, выполняет любое запланированное резервное копирование с заданным значением niceness. В Linux -20 - это самый высокий приоритет, 0 - по умолчанию, 19 - низкий приоритет. 10 - это общий низкий приоритет для рутин резервного копирования на производственных системах. |
Пример:
restic_backups:
data:
name: data
repo: remote
src: /path/to/data
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
database:
name: database
repo: remote
stdin: true
stdin_cmd: pg_dump -Ubackup db_name
stdin_filename: db_name_dump.sql
scheduled: true
schedule_oncalendar: '*-*-* 01:30:00'
niceness: 10
all_databases:
name: all_databases
repo: remote
src: /var/dumped_data
scheduled: true
schedule_oncalendar: '*-*-* 02:00:00'
pre_backup_cmd: cd /var/dumped_data && mariadb -N -e 'show databases' | while read dbname; do mariadb-dump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done
Вы также можете указать restic_backups как массив, что является устаревшей функцией и может быть удалено в будущем. в настоящее время ключ name используется для наименования доступа и файлов резервного копирования.
Исключение
Ключ exclude
в резервной копии позволяет вам указать несколько файлов для исключения или файлы, которые нужно искать для имен файлов, которые необходимо исключить. Вы можете указать следующие ключи:
exclude:
exclude_caches: true
exclude:
- /path/to/file
iexclude:
- /path/to/file
exclude_file:
- /path/to/file
exclude_if_present:
- /path/to/file
Пожалуйста, обратитесь к использованию конкретных ключей в документации.
Зависимости
Эта роль не имеет других зависимостей от других ролей ansible.
Пример документа
- name: резервное копирование ваших домашних папок на /mnt/backup каждую ночь
hosts: localhost
roles:
- {role: do1jlr.restic, tags: restic}
vars:
restic_create_schedule: true
restic_repos:
local:
location: '/mnt/backup'
password: 'ChangM3'
init: true
restic_backups:
home:
name: home
repo: local
src: /home/
scheduled: true
schedule_oncalendar: '*-*-* 01:00:00'
Лицензия
Этот проект имеет лицензию MIT. См. файл LICENSE для полного текста лицензии.
ansible-galaxy install roles-ansible/ansible_role_restic