Bkp
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 описывает источники данных. Источник данных может быть один:
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
и дополнительные атрибуты, свойственные каждому конкретному классу.
class: tar
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.
class: mysql
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 для дальнейшей обработки.
class: redis
src:
class: redis
dump: /path/to/db/dump
Описывает дамп Redis в качестве источника. Обязательный атрибут — dump
(путь до дампа, создаваемого Redis-ом).
class: ploop
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
— список директорий, исключаемых из резервной копии.
class: lvm
src:
class: lvm
device: /dev/VolGroup00/LogVolume01
src:
class: lvm
vm: myVM
Описывает логический том LVM в качестве источника данных. Модуль создаёт снепшот и делает с него копию данных командой dd
. Устройство можно описать, указав атрибут device
. Альтернативный способ описания может быть применён, если вы используете панель управления SolusVM (тогда вместо device
можно указать название виртуальной машины атрибутом vm
).
class: virsh
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
compress:
class: gzip
Сжатие потока данных алгоритмом GNU Zip (использует утилита gzip).
class: pigz
compress:
class: pigz
procs: 16
Сжатие потока данных алгоритмом GNU Zip (использует утилита pigz). Pigz позволяет ускорить сжатие, используя потоки, задействовав дополнительные ядра ЦПУ. Количество потоков можно указать опициональным параметром procs
.
crypt
Секция crypt описывает способ шифрования сжатого потока данных.
class: openssl
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
shape:
class: pv
rate-limit: 5m
Модуль использует утилиту pv для ограничения скорости потока данных и использует атрибут rate-limit
для указания максимальной скорости в байтах в секунду. Для сокращённой записи можно использовать суффиксы k, m, g или t, обозначающие килобайты, мегабайты и т. д. в секунду.
dst
Секция описывает метод выгрузки резервных копий и план их хранения и ротации. Для описания плана хранения используется атрибут plan
вида:
plan:
y: 2
m: 6
w: 4
d: 6
В примере выше описывается план для хранения двух ежегодных копий, шести ежемесячных, четырёх еженедельных и шести ежедневных. Можно использовать различные комбинации этих значений.
Блок plan
одинаково описывается для всех типов выгрузки.
Опционально можно указать опцию no-rotate
:
no-rotate: true
При использовании этой опции ротация производиться не будет. Это можно использовать в случае, если ротация файлов реализована внешними средствами.
class: local
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
не обязательно.
class: ftp
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, но если вы получаете ошибки на тему кодировки, её следует поменять на подходящую.
Описание
Bkp — система резервного копирования для всего на свете с ротацией по заданному плану.