script_psql_backup

freehck.script_psql_backup

Эта роль создает скрипт для выполнения резервного копирования psql.

Он создает дамп базы данных, возможно сжатый gzip и зашифрованный с использованием aes256.

Также может отправлять сообщения в Slack.

Резервные копии могут храниться на S3 или/и отправляться на другой хост с помощью SCP.

Переменные роли

Основные переменные

psql_backup_host: хост psql

psql_backup_port: порт psql (по умолчанию 3306)

psql_backup_user: пользователь psql

psql_backup_pass: пароль psql

psql_backup_db: база данных psql для резервного копирования (если не указана, то передается параметр --all-databases для psqldump)

psql_backup_backend_use_s3: установите в true, если хотите хранить резервную копию на S3

psql_backup_backend_use_scp: установите в true, если хотите отправить резервную копию на другой хост с помощью SCP

Переменные для S3

psql_backup_s3cfg_template: шаблон конфигурации вашего s3fs (по умолчанию предоставлен, не беспокойтесь)

psql_backup_s3: параметры конфигурации S3 в следующем формате

psql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "bucket-name"
Переменные для SCP

psql_backup_scp_host: хост для хранения вашей резервной копии

psql_backup_scp_user: пользователь для входа на хост хранения

psql_backup_scp_dst: путь на хосте хранения для сохранения вашей резервной копии

psql_backup_scp_identity_src: файл ключа для входа на хост хранения (да, это должен быть приватный ключ)

Название

psql_backup_archive_prefix: просто имя резервной копии или все, что перед меткой времени

psql_backup_archive_stamp: шаблон метки времени в формате инструмента date (по умолчанию %F-%Hh%Mm%Ss, в результате метки времени выглядят как 2019-09-23-12h22m07s)

psql_backup_script_name: если хотите переименовать основной скрипт, пожалуйста

psql_backup_custom_script_name: если хотите задать специфическое имя для скрипта, который фактически выполняет резервное копирование. По умолчанию это psql-backup-<database_name>.sh, где может быть all, если не указаны базы данных для резервного копирования.

psql_backup_scp_identity_name: по умолчанию id_rsa, но может быть полезно изменить, если хотите иметь несколько SCP-реестров с разными ключами

psql_backup_encrypt_aes_key_name: по умолчанию aes256.key, требуется, если хотите использовать разные ключи шифрования для разных задач резервного копирования

Уведомления

psql_backup_warn_size: в GiB, по умолчанию 0. Сравните вашу резервную копию с этим размером. Если ваша резервная копия меньше, предупредите об этом.

psql_backup_hostname: имя хоста (которое будет отображено в сообщениях Slack)

psql_backup_slack_webhook: как написано, это вебхук Slack; установите его, чтобы получать уведомления в Slack

Как получить вебхук Slack: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Переменные для сжатия и шифрования

psql_backup_gzip: сжимает файл резервной копии

psql_backup_encrypt_aes: шифрует файл резервной копии (если сжатие включено, это действие выполняется непосредственно ПОСЛЕ сжатия)

psql_backup_encrypt_aes_key_src: ключ aes256 для шифрования вашей резервной копии

Ключ aes256 — это всего лишь 32 байта случайных данных.

Вы можете использовать следующую команду для его создания: dd if=/dev/urandom of=aes256.key count=1 bs=32.

Если вы предпочитаете строковые пароли (это менее безопасно), вы можете использовать это: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Директории

psql_backup_script_dir: директория для хранения основного скрипта

psql_backup_custom_script_dir: директория для хранения скриптов, специфичных для соответствующих задач резервного копирования

psql_backup_conf_dir: директория для хранения файлов конфигурации скрипта резервного копирования

psql_backup_encrypt_aes_key_dir: директория для хранения ключа шифрования aes256

psql_backup_tmpdir: директория для хранения временных результатов (вам не нужно создавать отдельную, по умолчанию это /tmp)

Передача данных за пределы роли

psql_backup_save_facts_about_custom_script: если вы установите это в true, то роль сохранит полный путь к сгенерированному скрипту задачи, который необходимо выполнить для резервного копирования, в переменную psql_backup_last_generated_custom_script. Вы можете использовать эту переменную, чтобы добавить конкретную задачу cron для этого скрипта.

Пример плейбука

# создание скрипта задачи резервного копирования psql
- role: freehck.script_psql_backup
  # параметры подключения psql
  psql_backup_host: "{{ db_host }}"
  psql_backup_user: "{{ db_user }}"
  psql_backup_pass: "{{ db_pass }}"
  psql_backup_db: "{{ db_name }}"
  # параметры хранения на сервере
  psql_backup_backend_use_s3: no
  psql_backup_backend_use_scp: yes
  psql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
  psql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
  psql_backup_scp_user: 'file'
  psql_backup_scp_dst: '/var/www/file/public/psql-db-prod-backup'
  # сжатие и шифрование
  psql_backup_gzip: yes
  psql_backup_encrypt_aes: yes
  psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
  # другое
  psql_backup_save_facts_about_custom_script: yes
  psql_backup_logfile: "/var/log/psql-backup.log"
  tags: [ backup, psql ]

# целесообразно создать задачу cron для этого скрипта задачи
- role: freehck.crontask
  crontask_file: "backups"
  crontask_name: "резервное копирование базы данных"
  crontask_hour: "12"
  crontask_minute: "0"
  crontask_job: "{{ psql_backup_last_generated_custom_script }}"
  crontask_user: "root"
  crontask_commented_out: false
  tags: [ backup, psql ]

Важная информация

После развертывания скрипта резервного копирования psql на вашем хосте, целесообразно зайти на хост, выполняющий задачи резервного копирования, и запустить скрипт задачи из /opt/scripts без параметров. Если он выполнен без ошибок и вы видите файл резервной копии на хранилище, значит, все в порядке. Если нет — вы узнаете, в чем была проблема. Например, вы могли забыть добавить хост хранения в known_hosts, когда настраивали пользователей. Или ваш шаблон s3cfg мог содержать ошибку. Не забудьте дважды проверить все: задача резервного копирования крайне важна.

После того как вы убедитесь, что резервная копия была создана и сохранена в нужном месте, проверьте ее внимательно. Вы должны быть уверены, что сможете восстановить данные с ее помощью.

Лицензия

MIT

Информация об авторе

Дмитрий Кашин, freehck@freehck.ru

О проекте

install a script performing mysql backups

Установить
ansible-galaxy install freehck/ansible-role-script-postgresql-backup
Лицензия
mit
Загрузки
102
Владелец