Bkp — система резервного копирования для всего на свете с ротацией по заданному плану. Процесс резервного копирования запускается скриптом bkp с передачей ему списка конфигов:
# добавьте в крон
bkp /etc/opt/bkp/sysconf.yml /etc/opt/bkp/www.yml /etc/opt/bkp/mysql.yml
Конфигурационный файл состоит из двух основных секций: src и dst и трёх необязательных: compress, crypt и shape. Пример конфигурационного файла, осуществляющего резервное копирование содержимого директории /var/www/htdocs и MySQL базы данных wordpress на FTP-сервер ftp.bkp.server.com с хранением 6-х ежемесячных копий, 3-х еженедельных и 6-ти ежедневных:
src:
files:
class: tar
cwd: /var/www
files:
htdocs
database:
class: mysql
dbs: wordpress
compress:
class: gzip
dst:
class: ftp
hostname: ftp.bkp.server.com
username: bkpuser
password: bkpsecret
path: /backups
plan:
m: 6
w: 3
d: 6
Файлы на сервер буду загружаться под именами: files-YYYY-MM-DD-P.tar.gz и database-YYYY-MM-DD-P.sql.gz (где P — код периода: m, w, d).
Секция src описывает источники данных. Источник данных может быть один:
src:
class: tar
cwd: /var/www
files:
htdocs
Или несколько:
src:
site:
class: tar
cwd: /var/www
files:
htdocs
database:
class: mysql
dbs: wordpress
Помимо этого есть возможность формировать список источников динамически, указав скрипт и шаблон для рендера. Например, этот скрипт содержит источники для бекапа всех баз данных MySQL, каждую в отдельный дамп:
src:
script: mysql -se 'SHOW DATABASES'
| egrep -v '^(Database|(information|performance)_schema)$'
template: |
mysql-{{ item }}:
class: mysql
dbs: {{ item }}
Каждый источник должен содержать атрибут class и дополнительные атрибуты, свойственные каждому конкретному классу.
src:
class: tar
cwd: /var/www
files:
- site1.com
- site2.com
exclude:
- site1.com/cache
Описывает в качестве источника данных локальные файлы, которые передаются в команду tar. Обязательные атрибуты:
cwd— директория, в которой запускается команда tar;files— список файлов и директорий, передаваемых в команду tar.
Опциональные атрибуты:
exclude— список файлов и директорий, которые нужно исключить из архива.cmd— команда tar с опциями в виде списка, которые можно переопределить. По умолчанию:[ tar, --warning=none, --numeric-owner, -cf, - ]. Если будете переопределять, убедитесь, что в итоге поток вывода будет попадать в STDOUT.
src:
class: mysql
dbs:
- db1
- db2
Описывает в качестве источника данных базы данных MySQL, которые бекапятся через mysqldump. Обязательных атрибутов нет.
Опциональные атрибуты:
-
dbs— список баз данных, которые будут переданы в mysqldump. Если список баз данных не задать, то mysqldump будет бекапить все базы данных (т. е. будет запущен с опцией--all-databases). Это не всегда удобно, т. к. вытащить одну единственную базу данных из такого дампа сложно. Если вы хотите бекапить базы данных в отдельные дампы, то нужно задавать их отдельными источниками:src: db1: class: mysql dbs: db1 db2: class: mysql dbs: db2Либо сделать как в примере с динамическим списком источников данных.
-
cmd— даёт возможность переопределить команду и опцииmysqldump: По умолчанию имеет вид:[ mysqldump, -ER, --single-transaction ]. Можно сделать, например:[ docker, exec, -u, root, mysql, mysqldump, -ER, --single-transaction ]. Важно, чтобы вывод команды попадал в STDOUT для дальнейшей обработки.
src:
class: redis
dump: /path/to/db/dump
Описывает дамп Redis в качестве источника. Обязательный атрибут — dump (путь до дампа, создаваемого Redis-ом).
src:
class: ploop
ctid: 01234567-89ab-cdef-0123-456789abcdef
exclude:
- /var/tmp
- /var/cache
- /var/log/nginx
Описывает образ диска ploop как источник данных. Поддерживается OpenVZ Legacy (на базе CentOS 6) и OpenVZ 7. Также этот модуль должен работать с Virtuozzo, но не тестировался в таком окружении. При создании резервной копии создаётся снепшот диска с именем bkp, который монтируется во временную директорию. И содержимое этой директории архивируется tar-ом. После заваршения архивирования, снепшот удаляется.
Обязательные атрибуты:
ctid— ID контейнера в виде числа (OpenVZ Legacy) или UUID (OpenVZ 7).
Опциональные атрибуты:
exclude— список директорий, исключаемых из резервной копии.
src:
class: lvm
device: /dev/VolGroup00/LogVolume01
src:
class: lvm
vm: myVM
Описывает логический том LVM в качестве источника данных. Модуль создаёт снепшот и делает с него копию данных командой dd. Устройство можно описать, указав атрибут device. Альтернативный способ описания может быть применён, если вы используете панель управления SolusVM (тогда вместо device можно указать название виртуальной машины атрибутом vm).
src:
VMname_disk1
class: virsh
vm: VMname
device: /var/lib/libvirt/images/VMname.qcow2
VMname_disk2
class: virsh
vm: VMname
device: /var/lib/libvirt/images/VMname_d2.qcow2
Секция compress описывает способ сжатия потока данных.
compress:
class: gzip
Сжатие потока данных алгоритмом GNU Zip (использует утилита gzip).
compress:
class: pigz
procs: 16
Сжатие потока данных алгоритмом GNU Zip (использует утилита pigz). Pigz позволяет ускорить сжатие, используя потоки, задействовав дополнительные ядра ЦПУ. Количество потоков можно указать опициональным параметром procs.
Секция crypt описывает способ шифрования сжатого потока данных.
crypt:
class: openssl
key: s3creT
Модуль использует openssl для шифрования потока данных указанным ключом в обязательном атрибуте key. По умолчанию используется шифр aes-256-cbc, который можно переопределить необязательным атрибутом cipher. Расшфировать файл можно командой:
openssl enc -d -k {key} -in {encrypted.file.enc} -out {decrypted.file}
Секция shape описывает ограничение скорости потока данных.
shape:
class: pv
rate-limit: 5m
Модуль использует утилиту pv для ограничения скорости потока данных и использует атрибут rate-limit для указания максимальной скорости в байтах в секунду. Для сокращённой записи можно использовать суффиксы k, m, g или t, обозначающие килобайты, мегабайты и т. д. в секунду.
Секция описывает метод выгрузки резервных копий и план их хранения и ротации. Для описания плана хранения используется атрибут plan вида:
plan:
y: 2
m: 6
w: 4
d: 6
В примере выше описывается план для хранения двух ежегодных копий, шести ежемесячных, четырёх еженедельных и шести ежедневных. Можно использовать различные комбинации этих значений.
Блок plan одинаково описывается для всех типов выгрузки.
Опционально можно указать опцию no-rotate:
no-rotate: true
При использовании этой опции ротация производиться не будет. Это можно использовать в случае, если ротация файлов реализована внешними средствами.
dst:
class: local
dir: /mnt/bkp/backups
mount:
point: /mnt/bkp
cmd: /usr/bin/sshfs bkp@myhost.com:/srv/bkp /mnt/bkp
Описывает способ хранения копий в локальной директории на сервере (которая, конечно же, может быть смонтирована по сети).
Обязательные атрибуты:
dir— путь к директории, в которой сохранять архивы.
Опциональные атрибуты:
mount— описывает точку монтирования во вложенном атрибутеpointи опционально команду для монтирования вcmd. Если точка монтирования описана в/etc/fstab, то использовать атрибутcmdне обязательно.
dst:
class: ftp
hostname: ftp.myhost.com
username: bkp
password: s3crEt
port: 21
path: /backups
encoding: UTF-8
Описывает способ выгрузки архивов на FTP-сервер, используя команды из пакета ncftp.
Обязательные атрибуты:
hostname— FTP-сервер.
Опциональные атрибуты:
username— учётная запись FTP (по умолчанию anonymous).password— пароль от FTP (по умолчанию test@test.com).port— порт FTP-сервиса (по умолчанию 21).path— путь к резервным копиям на FTP-сервере (по умолчанию содержит имя хоста, с которого выгружаются копии).encoding— кодировка, используемая удалённым FTP-сервером в своих сообщениях. По умолчанию UTF-8, но если вы получаете ошибки на тему кодировки, её следует поменять на подходящую.