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

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



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

Прежде чем использовать загрузочный образ для какой-либо ОС, я рекомендую его предварительно протестировать.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 4

    0
    Bareos отличное ПО для построения простейших конфигураций резервного копирования. Если в процессе эксплуатации потребуется резервировать UNIX, SAP и т.п., то тут без bacula (в особенности с версией Enterprise) не обойтись.
      0
      Смотря какой инстанс SAP. Если не нагруженный, то bareos подходит.

      Мне не понравился: REAR, тем, что он умеет только в Linux системы. Реальность она всё же другая… И предполагает кроссплатформенность.
      0
      Ребят, вот тут хочу развернуть его.
      Цель:
      -бекап с сервера 2012 с файловой 1С (раз в неделю полный системы и регулярные файлов 1с)
      -куча мелких дебианов с сервисами различного порядка
      -один дебиан выступает как файловая шара для самбы.
      -может пару машин с windows 7 (все будет зависеть от объема который я смогу выбить под хранение)
      Я так понимаю мне не нужен особо сильный процессор на самом сервере, на котором будут установлены все роли сразу? Хватит ли i3 или сразу брать i5?

    Only users with full accounts can post comments. Log in, please.