Резервное копирование с помощью Bareos и Relax-and-Recover

от автора

Bareos (Backup Archiving Recovery Open Sourced) является централизованной, клиент-серверной и кроссплатформерной системой для резервного копирования, архивирования и восстановления данных.

Является форком Bacula и активно развивается. Имеет клиенты под Linux и Windows. Полный список поддерживаемых фич на Github.

Принципы работы и конфигурация полностью совпадают с Bacula, поэтому подробно останавливаться на описании всех параметров не буду. Статьи о Bacula есть на Хабре («Пошаговая модификация предустановленной настройки Bacula», «Bacula: для тех кому надо по-быстрому и в картинках», «Настройка и понимание Bacula», «Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula»).

Принципы работы и конфигурация полностью совпадают с 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.
Убеждаемся, что всё на месте и перезагружаемся:

Система полностью восстановлена.

Прежде чем использовать загрузочный образ для какой-либо ОС, я рекомендую его предварительно протестировать.

ссылка на оригинал статьи http://habrahabr.ru/post/260955/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *