README.md

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 — система резервного копирования для всего на свете с ротацией по заданному плану.

Конвейеры
0 успешных
0 с ошибкой