Pull to refresh

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

Reading time 9 min
Views 53K
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


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



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

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

Articles