Резевное копирование с backupninja и duplicity

Существует много способов для организации резервного копирования. Я использую связку backupninja и duplicity.

Установка и настройка резервного копирования руками

Настроим резервное копирование нашего RoR проекта. В первом приближении нам необходимо сохранить базу и статику. Код у нас в гите, поэтому резервную копию делать не будем. Резервную копию конфигурационных файлов добавим чуть позже (приложения и nginx). В качестве системы резервного копирования будем использовать связку backupninja и duplicity. Backupninja - это по сути упрощённый единый интерфейс командной строки к разнообразным утилитам резервного копирования. Написан целиком на bash. Установим и попробуем поиграться руками:

apt-get install backupninja duplicity

Потренируемся на кошках - сделаем сначала копию статики на локальном сервере, шифрование использовать не будем. Начнем со статики. Статика лежит у нас по адресу /home/webmaster/passport/shared/public/uploads

duplicity  \
   --no-encryption --volsize=1024 \
   --include=/home/webmaster/passport/shared/public/uploads \
   --exclude=/** / \
   file:///home/webmaster/backups/passport

Бекап только каталога /home/webmaster/passport/shared/public/uploads без шифрования – размер тома =1024Mb, который сохраняется в локальной папке /home/webmaster/backups/passport Размер тома определяет какого размера временный файл будет создавать duplicity в файловой системе(по умолчанию создает этот файл в /tmp или /usr/tmp).По умолчанию(если не указана опция full) duplicity создает инкрементный бекап, но при запуске впервые duplicity создаст полный бекап. Просмотреть список файлов можно командой:

duplicity list-current-files file:///home/webmaster/backups/passport/

Проверка резервной копии

Восстановление резервной копии

Ansible

Итого в Ansible нам нужно сделать следующие шаги:

  1. Установить необходимое ПО (backupninja и duplicity)
  2. Настроить backupninja - незначительные правки в файле конфигурации, далее
  3. Настроить копирование общих файлов
  4. Настроить копирование БД и статики для проекта

Добавим в существующую систему каталогов файл staging/group_vars/backup.yml - для переменных роли

---
backup_items:
   - passport
   - brigzz
   - edison
   - erp
   - store

Дополним staging.yml

- hosts: web
  vars_files:
    ...
    -  staging/group_vars/backup.yml
  roles:
    ...
    - backup

Добавим роль backup с папками tasks и templates

# backup/tasks/main.yml

- name: Install backup system packages
  apt:
    name: "{{ item }}"
    state: latest
  with_items:
   - duplicity
   - backupninja

- name: Configure backupninja
  template:
    src="backupninja.conf.j2"
    dest="/etc/backupninja.conf"
    owner=root
    group=root
    mode=0000

- name: Make local backup general files
  template:
    src="1-main.dup.j2"
    dest="/etc/backup.d/1-main.dup"
    owner=root
    group=root
    mode=0000

- name: Make local backup all Postgesql files
  template:
    src="10-all.pgsql.j2"
    dest="/etc/backup.d/10-{{ item }}.pgsql"
    owner=root
    group=root
    mode=0000
  with_items:
    - "{{ backup_items }}"

- name: Make local backup project & db backup files
  template:
    src="9-project.dup.j2"
    dest="/etc/backup.d/9-{{ item }}.dup"
    owner=root
    group=root
    mode=0000
  with_items:
    - "{{ backup_items }}"

Отличие от дефолтного - только запрет отправления уведомлений по концу бэкапа

# roles/backup/templates/backupninja.config.j2
...
# even if all modules reported success. (default = yes)
reportsuccess = no
...

Все сценарии резервного копирования запускаются из /etc/backup.d по алфавиту (т.е. в очередности 1, ..., 10, 9 и т.д.)

# roles/backup/templates/1-main.dup.j2

options = --no-encryption
tmpdir = /home/backups/tmp

[gpg]
sign = no
signkey =
encryptkey =
password = no

[dest]
increments = 7
keep = 20
desturl = file:///home/{{ user }}/backups/

[source]
include = /etc/nginx/*.conf
include = /etc/nginx/sites-available/*

Следующим запускается сценарий резервного копирования БД

# roles/backup/templates/10-all.pgsql.j2

options = --no-encryption
tmpdir = /home/backups/tmp

[gpg]
sign = no
signkey =
encryptkey =
password = no

[dest]
increments = 7
keep = 20
desturl = file:///home/{{ user }}/backups/{{ item }}

[source]
include = /var/backups/pgsql/{{ item }}_staging.*
include = /home/{{ user }}/{{ item }}/shared/config/
include = /home/{{ user }}/{{ item }}/shared/public/*uploads

После БД копируются все файлы проекта + БД и складываются в соответствующую папку резервной копии проекта

# roles/backup/templates/9-project.dup.j2

options = --no-encryption
tmpdir = /home/backups/tmp

[gpg]
sign = no
signkey =
encryptkey =
password = no

[dest]
increments = 7
keep = 20
desturl = file:///home/{{ user }}/backups/{{ item }}

[source]
include = /var/backups/pgsql/{{ item }}_staging.*
include = /home/{{ user }}/{{ item }}/shared/config/
include = /home/{{ user }}/{{ item }}/shared/public/*uploads

Запуск и проверка руками:

backupninja -n -d

Облака

Прочее (шифрование и тд)

Ссылки

  1. https://help.ubuntu.com/community/DuplicityBackupHowto
  2. https://uname.pingveno.net/blog/index.php/post/2015/02/17/Set-up-files-and-database-incremental-backup-with-duplicity,-rsync,-and-backupninja-on-Debian
  3. https://habrahabr.ru/post/128710/
  4. https://kamaok.org.ua/?p=1093
  5. https://remizov.org/rezervnoe-kopirovanie-na-yandex-disk-pri-pomoshchi-backupninja.html
  6. https://github.com/sol1/backupninja/blob/master/examples/example.rsync
  7. https://labs.riseup.net/code/projects/backupninja/wiki/Rsync

Сделать

  1. Разнести по ролям (app, queue, db) в ансибле + перенастроить руками
    1. в Апп
      1. конфиги nginx
      2. остатки статики
      3. swissberry сайт - /home//swissberry
      4. ghost - /home/ghost/
    2. Queue
      1. minio
    3. DB
      1. db
  2. Добавить минио в бекап + просто копию
  3. Добавить копирование бекапов на С3
  4. Discourse ??

results matching ""

    No results matching ""