Bareos (Backup Archiving Recovery Open Sourced) является централизованной, клиент-серверной и кроссплатформерной системой для резервного копирования, архивирования и восстановления данных.
Является форком Bacula и активно развивается. Имеет клиенты под Linux и Windows. Полный список поддерживаемых фич на Github.
Принципы работы и конфигурация полностью совпадают с Bacula, поэтому подробно останавливаться на описании всех параметров не буду. Статьи о Bacula есть на Хабре («Пошаговая модификация предустановленной настройки Bacula», «Bacula: для тех кому надо по-быстрому и в картинках», «Настройка и понимание Bacula», «Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula»).
Хосты:
testbackup-bareos – сервер Bareos, на котором работают bconsole, bareos-director, file daemon, storage daemon. IP адрес – 10.11.0.150
testbackup-client-03 – клиент, который мы бэкапим. ОС Роса Кобальт 1.0. На нём работает file-daemon. IP адрес – 10.11.0.153
Я выбрал Bareos 15.Х, так как здесь улучшена работа с сокетами. Но данная инструкция также подойдёт и для ветки 14.X.
Устанавливаем Bareos из репозитория и настраиваем PostgreSQL:
Конфигурация клиента находится в каталоге /etc/bareos/bareos-dir.d:
Здесь создано 4 задания – 2 Job для бэкапа/восстановления всей системы (/ и /boot) и 2 Job для бэкапа/восстановления БД MySQL Zabbix с использованием пайпа (bpipe). В нашем примере бэкап БД делается лишь для демонстрации работы bpipe. Дамп базы не сохраняется локально у клиента, он сразу передаётся по сети.
Структура bpipe:
plugin – имя плагина без приставки -fd.so;
filepath – псевдопуть в Volume к файлу бэкапа. Этот путь и имя файла необходимы только для логического представления в дереве каталога при восстановлении;
readprogram – программа, stdout которой считывает bpipe и передаёт на сервер;
writeprogram – программа, в stdin которой bpipe передаёт данные с сервера.
Конфигурация Director в каталоге /etc/bareos:
Конфигурация bconsole в каталоге /etc/bareos:
Конфигурация Storage Daemon в каталоге /etc/bareos:
Если имя клиента не резолвится, то прописываем в /etc/hosts:
echo «10.11.0.153 testbackup-client-03» >> /etc/hosts
Запускаем Director, File Daemon и Storage:
На этом настройка сервера Bareos закончена. Переходим к настройке клиента testbackup-client-03.
Устанавливаем репозиторий bareos и ставим File Daemon:
Конфигурация File Daemon в каталоге /etc/bareos:
На этом настройка клиента закончена.
Идём на сервер testbackup-bareos и запускаем бэкап базы данных MySQL и полный бэкап:
Для восстановления базы данных нужно запустить соответствующую задачу:
И следовать по предлагаемым пунктам.
Или, если мы знаем JobId (например, 158), то сразу запустить:
REAR (Relax-and-Recover) это решение Linux BMDR (Bare Metal Disaster Recovery), восстановление системы на чистое железо.
Основные фичи:
Остальные фичи есть на сайте.
В нашем примере рассмотрим создание загрузочного образа ISO и полное восстановление системы клиента testbackup-client-03, используя в качестве бэкэнда Bareos.
Загрузочный ISO-образ создаётся на клиенте и передаётся по NFS на сервер (в нашем случае на сервер Bareos) в папку nfs://10.11.0.150/backup
Для этого предварительно необходимо на сервере настроить доступ по NFS.
После переходим к настройке клиента testbackup-client-03:
Устанавливаем bconsole:
Для нашего дистрибутива РОСА Кобальт подключаем репозиторий EPEL:
Закомментируем mirrorlist и раскомментируем baseurl в /etc/yum.repos.d/epel.repo:
Подключим репозиторий CentOS в /etc/yum.repos.d/CentOS-Base.repo:
И импортируем GPG-ключ:
Устанавливаем REAR и необходимые компоненты:
В файлы ip_addresses и route добавляем информацию о ip, интерфейсе и дефолтном шлюзе:
Во избежание проблем с определением имён Job, Client рекомендую, чтобы имя File Daemon клиента точно соответствовало его hostname. Т.е. если hostname сервера testbackup-client-03, то в bareos-fd.conf в секции FileDaemon должно быть написано:
Name = testbackup-client-03-fd
Настраиваем local.conf из шаблона:
Не публикую полную конфигурацию local.conf т.к. я изменил лишь следующие параметры в сравнении с default.conf:
Так как я использую дистрибутив РОСА Кобальт (rhel-based версии 6.6) и поэтому я установил OS_VENDOR и OS_VERSION как для CentOS 6.6.
Для наглядности я использую свой шаблон имён для Job, File Set, Client, поэтому необходимо отредактировать скрипт восстановления REAR, иначе скрипт не найдёт все необходимые данные.
Находим строчку:
И там же (перед ней, например) задаём новую переменную:
Вместо:
Пишем:
Делаем загрузочный ISO:
Для информации: полученный размер ISO составляет порядка 30-40 МБ.
Для восстановления загружаемся с данного образа и выбираем Recover testbackup-client-03.
Запускаем процесс восстановления:
По окончании процесса восстановления проверяем нашу систему, которая примонтирована в /mnt/local.
Убеждаемся, что всё на месте и перезагружаемся:
Система полностью восстановлена.
Прежде чем использовать загрузочный образ для какой-либо ОС, я рекомендую его предварительно протестировать.
Является форком Bacula и активно развивается. Имеет клиенты под Linux и Windows. Полный список поддерживаемых фич на Github.
Принципы работы и конфигурация полностью совпадают с Bacula, поэтому подробно останавливаться на описании всех параметров не буду. Статьи о Bacula есть на Хабре («Пошаговая модификация предустановленной настройки Bacula», «Bacula: для тех кому надо по-быстрому и в картинках», «Настройка и понимание Bacula», «Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula»).
Хосты:
testbackup-bareos – сервер Bareos, на котором работают bconsole, bareos-director, file daemon, storage daemon. IP адрес – 10.11.0.150
testbackup-client-03 – клиент, который мы бэкапим. ОС Роса Кобальт 1.0. На нём работает file-daemon. IP адрес – 10.11.0.153
Настройка сервера Bareos
Я выбрал Bareos 15.Х, так как здесь улучшена работа с сокетами. Но данная инструкция также подойдёт и для ветки 14.X.
Устанавливаем Bareos из репозитория и настраиваем PostgreSQL:
wget -O /etc/yum.repos.d/bareos.repo http://download.bareos.org/bareos/experimental/nightly/CentOS_6/bareos:master.repo
yum install bareos bareos-common bareos-database-postgresql bareos-client bareos-bconsole bareos-storage bareos-filedaemon bareos-director
su postgres -c /usr/lib/bareos/scripts/create_bareos_database
su postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
Конфигурация клиента находится в каталоге /etc/bareos/bareos-dir.d:
testbackup-client-03.conf:
Job {
Name = "testbackup-client-03-backup"
Type = Backup
Level = Incremental
Client = testbackup-client-03-fd
FileSet = "testbackup-client-03-fileset"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = testbackup-client-03-pool-Incremental
Priority = 10
Write Bootstrap = "/var/lib/bareos/%c.bsr"
Full Backup Pool = testbackup-client-03-pool-Full
Differential Backup Pool = testbackup-client-03-pool-Differential
Incremental Backup Pool = testbackup-client-03-pool-Incremental
}
Job {
Name = "testbackup-client-03-restore"
Type = Restore
Client = testbackup-client-03-fd
FileSet = "testbackup-client-03-fileset"
Storage = File
Pool = testbackup-client-03-pool-Incremental
Messages = Standard
Where = /
}
Job {
Name = "testbackup-client-03-backup-mysql"
Type = Backup
Level = Incremental
Client = testbackup-client-03-fd
FileSet = "testbackup-client-03-fileset-mysql"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = testbackup-client-03-pool-Incremental
Priority = 10
Write Bootstrap = "/var/lib/bareos/%c.bsr"
Full Backup Pool = testbackup-client-03-pool-Full
Differential Backup Pool = testbackup-client-03-pool-Differential
Incremental Backup Pool = testbackup-client-03-pool-Incremental
}
Job {
Name = "testbackup-client-03-restore-mysql"
Type = Restore
Client = testbackup-client-03-fd
FileSet = "testbackup-client-03-fileset-mysql"
Storage = File
Pool = testbackup-client-03-pool-Incremental
Messages = Standard
Where = /
}
FileSet {
Name = "testbackup-client-03-fileset"
Include {
Options {
compression = GZIP
Signature = MD5 # calculate md5 checksum per file
}
File = "/"
File = "/boot"
}
}
FileSet {
Name = "testbackup-client-03-fileset-mysql"
Include {
Plugin = "bpipe:file=/MYSQL/dump.sql:reader=mysqldump -uzabbix -p12345 --single-transaction --add-drop-database -B zabbix:writer=mysql -uzabbix -p12345"
Options {
Signature = MD5 # calculate md5 checksum per file
compression = GZIP
}
}
}
Client {
Name = testbackup-client-03-fd
Address = testbackup-client-03
Password = "Msmn8GRO0CnMyUljLmB9u1wgrbYXoV1rI8MLugI6JJqc "
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = no # Prune expired Jobs/Files
}
Pool {
Name = testbackup-client-03-pool-Full
Pool Type = Backup
Recycle = yes # Bareos can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days
Maximum Volume Bytes = 30G
Maximum Volumes = 100
Label Format = "testbackup-client-03-pool-Full-"
}
Pool {
Name = testbackup-client-03-pool-Differential
Pool Type = Backup
Recycle = yes # Bareos can automatically recycle Volumes
AutoPrune = yes
Volume Retention = 90 days
Maximum Volume Bytes = 10G
Maximum Volumes = 100
Label Format = "testbackup-client-03-pool-Differential-"
}
Pool {
Name = testbackup-client-03-pool-Incremental
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 30 days
Maximum Volume Bytes = 1G
Maximum Volumes = 100
Label Format = "testbackup-client-03-pool-Incremental-"
}
Здесь создано 4 задания – 2 Job для бэкапа/восстановления всей системы (/ и /boot) и 2 Job для бэкапа/восстановления БД MySQL Zabbix с использованием пайпа (bpipe). В нашем примере бэкап БД делается лишь для демонстрации работы bpipe. Дамп базы не сохраняется локально у клиента, он сразу передаётся по сети.
Структура bpipe:
Plugin = "<plugin>:file=<filepath>:reader=<readprogram>:writer=<writeprogram>"
plugin – имя плагина без приставки -fd.so;
filepath – псевдопуть в Volume к файлу бэкапа. Этот путь и имя файла необходимы только для логического представления в дереве каталога при восстановлении;
readprogram – программа, stdout которой считывает bpipe и передаёт на сервер;
writeprogram – программа, в stdin которой bpipe передаёт данные с сервера.
Конфигурация Director в каталоге /etc/bareos:
bareos-dir.conf
@/etc/bareos/bareos-dir.d/testbackup-client-03.conf #включаем конфигурацию клиента
Director {
Name = testbackup-bareos-dir
QueryFile = "/usr/lib/bareos/scripts/query.sql"
Maximum Concurrent Jobs = 10
Password = "lY/wVlXuC25qk18i15iw10MpOVxLwDLFgOUMtSMpFOC6"
Messages = Daemon
Auditing = yes
Maximum Concurrent Jobs = 20
}
Schedule {
Name = "WeeklyCycle"
Run = Full 1st sat at 21:00
}
Storage {
Name = File
Address = testbackup-bareos
Password = "k4dkFWMwJh3zBpnAOpa9+oule1z/OT0GIcE4wZYySgbU"
Device = FileStorage
Media Type = File
}
Catalog {
Name = MyCatalog
dbdriver = "postgresql"
dbname = "bareos"
dbuser = "bareos"
dbpassword = ""
}
Messages {
Name = Standard
mailcommand = "/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \<%r\>\" -s \"Bareos: %t %e of %c %l\" %r"
mailcommand = "/etc/bareos/scripts/bareoszabbix.bash %i"
operatorcommand = "/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \<%r\>\" -s \"Bareos: Intervention needed for %j\" %r"
mail = root@localhost = all, !skipped, !audit
operator = root@localhost = mount
console = all, !skipped, !saved, !audit
append = "/var/log/bareos/bareos.log" = all, !skipped, !audit
catalog = all, !audit
}
Messages {
Name = Daemon
mailcommand = "/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \<%r\>\" -s \"Bareos daemon message\" %r"
mail = root@localhost = all, !skipped, !audit
console = all, !skipped, !saved, !audit
append = "/var/log/bareos/bareos.log" = all, !skipped, !audit
append = "/var/log/bareos/bareos-audit.log" = audit
}
Конфигурация bconsole в каталоге /etc/bareos:
bconsole.conf
Director {
Name = testbackup-bareos-dir
DIRport = 9101
address = testbackup-bareos
Password = "lY/wVlXuC25qk18i15iw10MpOVxLwDLFgOUMtSMpFOC6"
}
Конфигурация Storage Daemon в каталоге /etc/bareos:
bareos-sd.conf
Storage {
Name = testbackup-bareos-sd
Maximum Concurrent Jobs = 20
}
Director {
Name = testbackup-bareos-dir
Password = "k4dkFWMwJh3zBpnAOpa9+oule1z/OT0GIcE4wZYySgbU"
}
Device {
Name = FileStorage
Media Type = File
Archive Device = /backup
LabelMedia = yes;
Random Access = yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = testbackup-bareos-dir = all
}
Если имя клиента не резолвится, то прописываем в /etc/hosts:
echo «10.11.0.153 testbackup-client-03» >> /etc/hosts
Запускаем Director, File Daemon и Storage:
service bareos-dir start
service bareos-sd start
service bareos-fd start
На этом настройка сервера Bareos закончена. Переходим к настройке клиента testbackup-client-03.
Настройка клиента Bareos.
Устанавливаем репозиторий bareos и ставим File Daemon:
yum -y install bareos-filedaemon
Конфигурация File Daemon в каталоге /etc/bareos:
bareos-fd.conf
Director {
Name = testbackup-bareos-dir
Password = "Msmn8GRO0CnMyUljLmB9u1wgrbYXoV1rI8MLugI6JJqc"
}
FileDaemon {
Name = testbackup-client-03-fd
Maximum Concurrent Jobs = 20
Compatible = no #совместимость с Bacula отключена, чтобы использовать все фичи bareos-fd
}
Messages {
Name = Standard
director = testbackup-client-03-dir = all, !skipped, !restored
}
На этом настройка клиента закончена.
Запуск бэкапа/восстановления
Идём на сервер testbackup-bareos и запускаем бэкап базы данных MySQL и полный бэкап:
#bconsole
*run testbackup-client-03-backup-mysql
*run testbackup-client-03-backup
Для восстановления базы данных нужно запустить соответствующую задачу:
#bconsole
*restore
И следовать по предлагаемым пунктам.
Или, если мы знаем JobId (например, 158), то сразу запустить:
*restore restorejob=testbackup-client-03-restore-mysql jobid=158
Установка и настройка Relax-and-Recover
REAR (Relax-and-Recover) это решение Linux BMDR (Bare Metal Disaster Recovery), восстановление системы на чистое железо.
Основные фичи:
- Восстановление на чистое железо: physical-to-virtual (P2V), virtual-to-physical (V2P), physical-to-physical (P2P) and virtual-to-virtual (V2V), системы виртуализации KVM, Xen, VMware
- Типы загрузочных устройств: ISO, USB, eSATA, OBDR/bootable tape, PXE
- Протоколы для передачи данных: HTTP, HTTPS, FTP, SFTP, NFS, CIFS (SMB)
- Виды разбивки диска: HWRAID (HP SmartArray), SWRAID, LVM, multipathing, DRBD, iSCSI, LUKS (encrypted partitions and filesystems)
- Бэкэнды: CommVault Galaxy, EMC NetWorker (Legato), HP DataProtector, IBM Tivoli Storage Manager (TSM), SEP Sesam, Symantec NetBackup, Bacula, Bareos, duplicity / duply
Остальные фичи есть на сайте.
В нашем примере рассмотрим создание загрузочного образа ISO и полное восстановление системы клиента testbackup-client-03, используя в качестве бэкэнда Bareos.
Загрузочный ISO-образ создаётся на клиенте и передаётся по NFS на сервер (в нашем случае на сервер Bareos) в папку nfs://10.11.0.150/backup
Для этого предварительно необходимо на сервере настроить доступ по NFS.
После переходим к настройке клиента testbackup-client-03:
Устанавливаем bconsole:
yum -y install bareos-bconsole
/etc/bareos/bconsole.conf
Director {
Name = testbackup-bareos-dir
DIRport = 9101
address = testbackup-bareos
Password = "lY/wVlXuC25qk18i15iw10MpOVxLwDLFgOUMtSMpFOC6"
}
Для нашего дистрибутива РОСА Кобальт подключаем репозиторий EPEL:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
Закомментируем mirrorlist и раскомментируем baseurl в /etc/yum.repos.d/epel.repo:
epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Подключим репозиторий CentOS в /etc/yum.repos.d/CentOS-Base.repo:
CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.centos.org/centos/6.6/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
И импортируем GPG-ключ:
rpm --import http://mirror.centos.org/centos/6.6/os/x86_64/RPM-GPG-KEY-CentOS-6
Устанавливаем REAR и необходимые компоненты:
yum -y install nfs-utils genisoimage syslinux rear
В файлы ip_addresses и route добавляем информацию о ip, интерфейсе и дефолтном шлюзе:
mkdir /etc/rear/mappings
echo "eth0 10.11.0.153/24" > /etc/rear/mappings/ip_addresses
echo "default 10.11.0.1 eth0" > /etc/rear/mappings/route
Во избежание проблем с определением имён Job, Client рекомендую, чтобы имя File Daemon клиента точно соответствовало его hostname. Т.е. если hostname сервера testbackup-client-03, то в bareos-fd.conf в секции FileDaemon должно быть написано:
Name = testbackup-client-03-fd
Настраиваем local.conf из шаблона:
cp /usr/share/rear/conf/default.conf /etc/rear/local.conf
Не публикую полную конфигурацию local.conf т.к. я изменил лишь следующие параметры в сравнении с default.conf:
local.conf
OS_VENDOR=CentOS
OS_VERSION=6.6
BACKUP=BAREOS
OUTPUT=ISO
BAREOS_CLIENT=$(grep $(hostname -s) /etc/bareos/bareos-fd.conf | awk '/-fd/ {print $3}' )
OUTPUT_URL=nfs://10.11.0.150/backup
USE_STATIC_NETWORKING=y
Так как я использую дистрибутив РОСА Кобальт (rhel-based версии 6.6) и поэтому я установил OS_VENDOR и OS_VERSION как для CentOS 6.6.
Для наглядности я использую свой шаблон имён для Job, File Set, Client, поэтому необходимо отредактировать скрипт восстановления REAR, иначе скрипт не найдёт все необходимые данные.
vi /usr/share/rear/restore/BAREOS/default/40_restore_backup.sh
Находим строчку:
BAREOS_CLIENT=$(grep $(hostname -s) /etc/bareos/bareos-fd.conf | awk '/-fd/ {print $3}' )
И там же (перед ней, например) задаём новую переменную:
BAREOS_CLIENT_1=$(grep "Name =.*-fd" /etc/bareos/bareos-fd.conf | awk '{print $3}' | sed -e 's/-fd//g' )
Вместо:
echo "restore client=$BAREOS_CLIENT where=/mnt/local select all done
Пишем:
echo "restore client=$BAREOS_CLIENT_1-fd restorejob=$BAREOS_CLIENT_1-restore fileset=$BAREOS_CLIENT_1-fileset where=/mnt/local select all done
Делаем загрузочный ISO:
rear -v -d mkrescue
Для информации: полученный размер ISO составляет порядка 30-40 МБ.
Для восстановления загружаемся с данного образа и выбираем Recover testbackup-client-03.
Запускаем процесс восстановления:
rear -v recover
По окончании процесса восстановления проверяем нашу систему, которая примонтирована в /mnt/local.
Убеждаемся, что всё на месте и перезагружаемся:
Система полностью восстановлена.
Прежде чем использовать загрузочный образ для какой-либо ОС, я рекомендую его предварительно протестировать.