Bacula состоит из нескольких демонов, каждый из которых несет свою функциональную нагрузку. На рисунке ниже схематично представлена взаимосвязь этих демонов.
В данном случае резервному копированию подлежат:
- Конфигурационные файлы различных демонов со всех серверов.
- MySQL базы данных.
- Документооборот с файлового сервера Windows.
- Различные важные данные с nix серверов(движки сайтов/форумов, etc..)
1.Описание демонов Bacula
Система построена по технологии клиент-сервер, и для передачи данных использует протокол TCP. Резервные копии создаются в собственном, полностью открытом формате.
Система резервирования данных Bacula состоит из четырёх основных элементов:
- Director Daemon,
- Storage Daemon,
- File Daemon
- Bacula Console.
Все эти элементы реализованы в виде самостоятельных приложений.
Director Daemon (DD) – это центральный элемент системы, осуществляющий управление её остальными компонентами. В его задачи входит управление процессом резервирования/восстановления данных, обеспечение интерфейса управления для администраторов и многое другое. Говоря проще – это диспетчер, который инициирует все процессы и отслеживает ход их выполнения.
Storage Daemon (SD) – приложение, отвечающее за чтение/запись данных непосредственно на устройства хранения информации. Принимает управляющие команды от DD, а также резервируемые данные от/к File Daemon.
File Daemon (FD) – этот элемент ещё можно назвать Агентом. Ведь именно он работает в рамках операционной системы, данные которой необходимо резервировать. File Daemon выполняет всю рутину, осуществляя обращение к резервируемым файлам и их дальнейшую передачу к SD. Также на стороне FD выполняется шифрование резервных копий, если это определено конфигурацией.
Bacula Console (BC) – интерфейс администратора сиcтемы. По своей сути, это командный интерпретатор для управления Bacula. Строго говоря, Bacula Console может быть расширена с помощью графических систем управления, которые, как правило, являются всего лишь надстройкой над BC. К таким системам можно отнести Tray Monitor и Bat. Первая устанавливается на компьютере администратора системы и осуществляет наблюдение за работой системы резервирования, а вторая обеспечивает возможность управления посредством графического интерфейса.
Bacula Catalog – база данных, в которой хранятся сведения обо всех зарезервированных файлах и их местонахождении в резервных копиях. Каталог необходим для обеспечения эффективной адресации к требуемым файлам. Поддерживаются MySql, PostgreSql и SqLite.
Такое структурное деление позволяет организовать очень гибкую систему резервирования, когда Storage Daemon разворачивается на выделенном сервере с несколькими устройствами хранения данных. Также Bacula Director может управлять несколькими экземплярами SD, обеспечивая резервирование части данных на одно устройство хранения, а части – на другое.
2. ОС и железо
В качестве аппаратного обеспечения для DD, SD и Bacula Catalog выступает PC со следующими характеристиками:
Устройство |
Модель |
количество |
Емкость/Частота |
HDD |
Hitachi HDS723020BLA642 |
3 |
2Tb |
CPU |
AMD Phenom(tm) II X4 970 Processor |
1 |
3500 Mhz |
Motherboard |
Gigabyte GA-880GA-UD3H |
1 |
- |
RAM |
|
|
3541 Mb |
О используемых на сервере ОС и версиях ПО:
# lsb_release -a
LSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-
4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:
CentOS release 5.7 (Final)
Release: 5.7
Codename: Final
# uname -a
Linux backupsrv.domain.ru
2.6.18-274.7.1.el5PAE #1 SMP Thu Oct 20 17:03:59 EDT 2011 i686 athlon i386
GNU/Linux
# rpm -qa|grep -E "syslog-ng|bacula|mysql-ser"
bacula-libs-5. 0.3-1
syslog-ng-2.1.4-9.el5
bacula-mysql-5. 0.3-1
mysql-server-5. 0.77-4.el5_6.6
3. Описание схемы резервного копирования и настроек демонов Bacula
Всего сконфигурировано 19 клиентов Bacula, но подробно мы остановимся на описании бекапа сервера биллинга и документов с файлового сервера Windows. Фокус на эти два сервера обусловлен тем, что остальные клиенты настроены аналогично, и на примере этих серверов-клиентов можно строить свои конфигурации.
Резервное копирование сервера биллинга это, по сути, бекап базы данных mysql и конфигурационных файлов демонов.
BD позволяет выполнять локальный скрипт на клиенте как до, так и после задания.
Каждую ночь, при старте задания на бекап сервере, запускается локальный(на самом сервере биллинга) скрипт, который создает архив базы биллинга, далее этот архив забирает BD и помещает на соответствующий пул томов(на самом деле операциями с чтением/записью управляет SD, но это сейчас не важно). Сразу же после выполнения задания запускается еще один скрипт, который в свою очередь, перемещает созданный архив в отдельную папку на сервере биллинга, для пущей надежности. Таким образом архив БД будет как у Bacula, так и локально на сервере биллинга. Подробнее эти механизмы и скрипты будут описаны ниже.
С файлового сервера Windows сохраняем весь необходимый документооборот. В воскресенье создается Full бекап, каждый последующий день, с понедельника по субботу, Diff бекапы.
Теперь о конфигурационных файлах демонов Bacula. Начнем с самого объемного — bacula-dir.conf.
Файлы конфигурации всех демонов Bacula состоят из описаний, так называемых, ресурсов. Каждый из ресурсов характеризует определенный функционал демона.
Блоки-ресурсы файлов Bacula(bacula-dir.conf, bacula-sd.conf, bacula-fd.conf)
Ресурс Dirtector
Director {
# имя bacula director'а
Name = backupsrv.domain.ru-dir
# какой порт слушать, у нас default
DIRport = 9101
# путь к скрипту, где лежат sql запросы для работы с Bacula Catalog(mysql database)
QueryFile = "/usr/lib/bacula/query.sql"
# здесь хранятся статус файлы демона
WorkingDirectory = "/backup/bacula-work/"
# pid файл демона
PidDirectory = "/var/run"
# сколько заданий может запускаться одновременно
Maximum Concurrent Jobs = 1
# пароль для доступа в BC и управления демонами
Password = "bacula_paS$w0rD10*"
# куда слать mail'ы, описано в ресурсе Messages
Messages = Daemon
# на какой адрес биндится процессу
DirAddress = 10.1.19.2
}
Ресурс Messages
Messages {
# это имя прописано в ресурсе Director, помните?
Name = Daemon
# команда для отправки email
mailcommand = "/usr/sbin/bsmtp -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
# шлем все на майл админам(root алиас на admins@domain.ru)
# высылаются только алярмы, ероры и прочую важность
mail = root@backupsrv.domain.ru = alert,error,fatal,terminate, !skipped
# что выводить на консоль
console = all, !skipped, !saved
# что в лог
append = "/var/lib/bacula/log" = alert,error,fatal,terminate, !skipped
}
Для каждого клиента в заданиях указаны Pool и Storage.
Pool это пул томов (volume) на который размещаются резервные копии данных клиентов.
Здесь тома — это файлы в формате bacula, размещенные на software raid массиве.
Для разных клиентов могут быть определены разные пулы томов. В примере ниже описан лишь один из
них,для данных биллинга.
Storage описывает какие физические устройства будут использованы в качестве томов.
(Storage BGB-ST описан в конфиге SD)
Ресурс Pool
Pool {
# имя пула, указывается в заданиях резервного копирования
Name = bgb
# тип пула, емнип этой версии только такой поддерживается
Pool Type = Backup #
# повторно использовать тома(сначала пишет в 1-ый, потом в 2-ой,
# потом 3-й, 3-й закончился - снова в 1-й)
Recycle = yes
# удалять записи из bacula catalog(из mysql базы бакулы)
# старше нижеуказанных значений
AutoPrune = yes
# период в течении которого информация о томах(volumes)
# хранится в базе данных, по истечению периода эта информация
# удаляется
Volume Retention = 90 days
# максимальный объем тома
Maximum Volume Bytes = 100G
# максимальное количество томов в пуле
Maximum Volumes = 3
# с каких символов начинается имя тома
LabelFormat = "Vol"
}
Ресурс Storage
Storage {
# имя хранилища и пароль (о соответствии имен и паролей в разных конфигах
# демонов Bacula, я расскажу позже)
Name = BGB-F
Password = "StoRage_PaSSw0rD"
# fqdn имя сервера
Address = backupsrv.domain.ru
# порт оставляем стандартный
SDPort = 9103
# имя девайса описанного в конфиге SD
Device = BGB-ST
# у нас все пишется на софтовый рэйд в файлы собственного формата
# bacula(например /backup/bgbilling/Vol0001)
Media Type = File
}
Задание на примере бекапа базы данных биллинга.
Ресурс Client
Client {
# имя
Name = bgbilling-fd
# ip адрес клиента
Address = 10.103.2.5
# порт, который клиент слушает
FDPort = 9102
# имя mysql базы данных Bacula
Catalog = MyCatalog
# пароль для FD
Password = "Fd_paSSw0rd"
# период в течении которого информация о файлах задания
# хранится в базе данных, по истечению периода эта информация
# удаляется(но не сами данные!!
File Retention = 45 days
# тоже самое, только для самого задания
Job Retention = 90 days
# удалять записи из каталога(бд mysql) старше вышеуказанных значений
AutoPrune = yes
}
Само задание.
Ресурс Job
Job {
# имя задания
Name = "BGBilling"
# тип(backup or restore)
Type = Backup
# уровень(полный, диференциальный или инкрементный)
Level = Full
# имя клиента
Client=bgbilling-fd
# имя файл-сета(там рассказано что бекапить, а что не бекапить)
FileSet="bgbilling-set"
# имя SD ресурса
Storage = BGB-F
# имя пула(для разных клиентов разные пулы томов(volume) куда пишутся сами
# бекапы)
Pool = bgb
# скрипт запускающийся ДО выполнения задания (путь до скрипта -
# это путь НА КЛИЕНТЕ!)
ClientRunBeforeJob = "/root/sh/before_bg_db_backup.sh"
# скрипт запускающийся ПОСЛЕ выполнения задания
ClientRunAfterJob = "/root/sh/after_bg_db_backup.sh"
# имя ресурса messages, который будет использоваться для этого задания
Messages = Standard
# имя шедулера
Schedule = "DaylyFullBGBilling"
# в этом файле содержится информация о том, какие файлы должны будут
# востанавливаться, на каком вольюме находятся файлы,
# где конкретно они находятся - это очень важные файлы, их нужно бэкапить
Write Bootstrap = "/backup/bsr-files/bgbilling.bsr"
}
Скрипт до задания
$ sudo cat /root/sh/before_bg_db_backup.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
mysql -e "flush tables with read lock" --user=root --password="ololo" bgbilling
lvcreate -L20G -s -n backup_db /dev/BGB-LVM1/billing_db
mysql -e "unlock tables" --user=root --password="ololo" bgbilling
mount /dev/BGB-LVM1/backup_db /backup
tar -czf /usr/backups/`date +%Y-%m-%d_%H-%M`.bgb.tgz /backup/bgbilling/
umount /backup
lvremove -f /dev/BGB-LVM1/backup_db
Скрипт после задания
$ sudo cat /root/sh/after_bg_db_backup.sh
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
rm /usr/backups/after_run_bacula_backup/*
mv /usr/backups/*.tgz /usr/backups/after_run_bacula_backup/
Ресурс FileSet(что бекапим, а что нет)
FileSet {
Name = "bgbilling-set"
Include {
Options {
# разработчики яро рекомендуют юзать это опцию,
# создается сигнатура забекапленных файлов в md5
signature = MD5
}
# перечисляем то, что нужно бекапить
File = /usr/backups
File = /etc
File = /root/sh
}
Exclude {
# а это бекапить нет нужды
File = /usr/backups/after_run_bacula_backup/*
File = /usr/backups/after_run_bacula_backup
}
}
Расписание запуска задания.
Ресурс Schedule
Schedule {
# имя расписания
Name = "DaylyFullBGBilling"
# когда запускать задание
Run = Full sun-sat at 1:10
}
Часть конфига bacula-dir.conf
Storage {
Name = WINDOWS-F
Address = backupsrv.domain.ru # N.B. Use a fully qualified name here
SDPort = 9103
Password = "StoRage_PaSSw0rD"
Device = WINDOWS-ST
Media Type = File
}
Pool {
Name = windows
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 60 days
Maximum Volume Bytes = 30G # Limit Volume size to something reasonable
Maximum Volumes = 5 # Limit number of Volumes in Pool
LabelFormat = "Vol-Windows"
}
Job {
Name = "centra-bdk"
Type = Backup
Level = Full
Client= centra-bdk-fd
FileSet="centra-bdk-fd-fs"
Storage = WINDOWS-F
Pool = windows
Messages = Standard
Schedule = "Windows_Centra-bdk"
Write Bootstrap = "/backup/bsr-files/centra-bdk.bsr"
}
FileSet {
Name = "centra-bdk-fd-fs"
Include {
Options {
signature = MD5
Compression=GZIP
}
# обратите внимание на двойной бекслэш и ковычки!
File = "D:\\Public\\!!!Абонентский\ Отдел"
File = "D:\\Public\\Отдел\ ИТ"
File = "D:\\Public\\tex\\Maps"
File = "D:\\Public\\сервис\ мены "
File = "D:\\Public\\Отдел\ продаж1"
}
Exclude {
File = "*.mp3"
File = "*.avi"
File = "*.wmv"
}
}
Client {
Name = centra-bdk-fd
Address = 10.1.19.50
FDPort = 9102
Catalog = MyCatalog
Password = "Fd_paSSw0rd" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 2 months # two months
AutoPrune = yes # Prune expired Jobs/Files
}
Schedule {
Name = "Windows_Centra-bdk"
Run = Level=Full on sun at 07:10
Run = Level=Differential on mon-sat at 22:15
}
Конфигурационный файл BD на этом завершен. Переходим к конфигурации SD — описанию файла bacula-sd.conf
Ресурс Storage
Storage {
# имя для SD
Name = backupsrv.domain.ru-sd
# порт стандартный
SDPort = 9103
# рабочая директория процесса(для статус файлов)
WorkingDirectory = "/var/lib/bacula"
# pid будет здесь
Pid Directory = "/var/run/bacula"
# биндится на этом ip
SDAddress = 10.1.19.2
}
Ресурс Director(связь с BD описанном в конфиге bacula-dir.conf)
Director {
# имя DD, того самого, который был описан ранее
Name = backupsrv.domain.ru-dir
# пароль
Password = "StoRage_PaSSw0rD"
}
Начинается описание различных девайсов, всего у меня используется 4 разных девайса. Я приведу в качестве примера два, для биллинга и для Windows.
Ресурс Device для биллинга.
Device {
# имя, о соответствии имен и паролей будет сказано ниже
Name = BGB-ST
# тип
Media Type = File
# директория где лежат файлы этого устройства(тома, volumes)
Archive Device = /backup/bgbilling
# новые тома будут обзываться согласно настроек Pool'а(здесь Vol*) см.
# конфиг DD
LabelMedia = yes;
# для устройства типа File должно быть так
Random Access = Yes;
# если устройство открыто, использовать его
AutomaticMount = yes;
# думаю понятно =)
RemovableMedia = no;
# открывать только тогда, когда стартует соответствующие задание
AlwaysOpen = no;
}
Ресурс Device для файлового сервера Windows
Device {
# имя, о соответствии имен и паролей будет сказано ниже
Name = BGB-ST
# тип
Media Type = File
# директория где лежат файлы этого устройства(тома, volumes)
Archive Device = /backup/bgbilling
# новые тома будут обзываться согласно настроек Pool'а(здесь Vol*) см.
# конфиг DD
LabelMedia = yes;
# для устройства типа File должно быть так
Random Access = Yes;
# если устройство открыто, использовать его
AutomaticMount = yes;
# думаю понятно =)
RemovableMedia = no;
# открывать только тогда, когда стартует соответствующие задание
AlwaysOpen = no;
}
Ресурс Messeges
Messages {
# имя
Name = Standard
# отправлять DD = имя директора = слать все
director = backupsrv.domain.ru-dir = all
}
Конфигурационный файл bconsole.conf, доступ в консоль Bacula.
Director {
Name = backupsrv.ray-com.ru-dir
DIRport = 9101
address = 10.1.19.2
Password = "bacula_paS$w0rD10*"
}
Не забудьте создать соответствующие Storage папки и назначить bacula владельцем этих папок.
- @/usr/local/etc/bacula/client.conf
- @/usr/local/etc/bacula/job.conf
- @/usr/local/etc/bacula/pool.conf
- @/usr/local/etc/bacula/fileset.conf
Конфиги можно разделить на разные файлы,
- Options { signature = MD5 compression = GZIP }
и включить компрессию.
Конфигурирование серверной части завершено.
Конфиг клиента.
Важно отметить, что каждый из клиентов должен резолвить fqdn имя сервера в его ip адрес! Обеспечте
это средствами dns или пропишите в hosts!
Ресурс Director.
Director {
# имя BD
Name = backupsrv.domain.ru-dir
# пароль для доступа к BD к клиенту(указан в ресурсе Client у BD)
Password = "Fd_paSSw0rd"
}
Ресурс FileDaemon
FileDaemon {
# имя клиента
Name = bgbilling-fd
# слушаем порт 9102
FDport = 9102
WorkingDirectory = /usr/lib/bacula
Pid Directory = /var/run/bacula
FDAddress = 10.103.2.5
}
Ресурс Messeges
Messages {
Name = Standard
director = backupsrv.domain.ru = all, !skipped, !restored
append = "/var/bacula/log" = all, !skipped
}
4. Пример процедуры востановления
Для мониторинга и востановления ваших резервных копий удобно использовать утилиту bat.
В Ubuntu она ставиться так
# sudo aptitude install bacula-console-qt
Конфигурационный файл bat.conf полностью аналогичен bconsole.conf, приведенному ранее.
Итак, к примеру мы хотим востановить архив базы данных биллинга за определенное число. Алгоритм использования:
- Открываем bat и находим нужное задание
2. вводим команду list files jobid=3059 для того чтобы убедиться что в задании есть нужные файлы
3. Теперь переходим в консоль(мне так удобнее просто=)). В консоли я восстановлю архив биллинга на другого клиента
$ sudo bconsole
[sudo] password for onotole:
Connecting to Director 10.1.19.2:9101
1000 OK: backupsrv.domain.ru-dir Version: 5.0.3 (30 August 2010)
Enter a period to cancel a command.
*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 9
Defined Clients:
1: 192.168.15.12-fd
2: 1.1.1.1-fd
3: 1.1.1.75-fd
4: ASTERISK-configs-fd
5: DHCPD-configs-fd
6: GW1-configs-fd
7: GW2-configs-fd
8: NAS-20-configs-fd
9: NAS-21-configs-fd
10: NAS-6-configs-fd
11: NAS-ololo-configs-fd
12: NS_AND_MAIL-configs-fd
13: RADIUS-ololo-configs-fd
14: VIRTSRV1-configs-fd
15: bgbilling-fd
16: configs-fd
17: domain.ru-fd
18: mydomain.ru-fd
19: tv.domain.ru-fd
20: zabbix.domain.ru-fd
Select the Client (1-20): 15
Automatically selected FileSet: bgbilling-set
+-------+-------+----------+----------------+---------------------+------------+
| JobId | Level | JobFiles | JobBytes | StartTime | VolumeName |
+-------+-------+----------+----------------+---------------------+------------+
| 3,292 | F | 1,666 | 10,874,552,420 | 2011-12-19 02:31:08 | Vol0014 |
+-------+-------+----------+----------------+---------------------+------------+
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 12
Enter JobId to get the state to restore: 3059
Selecting jobs to build the Full state at 2011-12-06 02:28:47
You have selected the following JobId: 3059
Building directory tree for JobId(s) 3059 ... +++++++++++++++++++++++++++++++++++++++++++++
1,535 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
cwd is: /
$ ls
etc/
root/
usr/
$ ls usr
usr/
$ mark usr
1,667 files marked.
$ done
Bootstrap records written to /backup/bacula-work//backupsrv.domain.ru-dir.restore.8.bsr
The job will require the following
Volume(s) Storage(s) SD Device(s)
===========================================================================
Vol0010 BGB-F BGB-ST
Volumes marked with "*" are online.
1,667 files selected to be restored.
Run Restore job
JobName: restore
Bootstrap: /backup/bacula-work//backupsrv.domain.ru-dir.restore.8.bsr
Where: /usr/restore
Replace: always
FileSet: bgbilling-set
Backup Client: bgbilling-fd
Restore Client: bgbilling-fd
Storage: BGB-F
When: 2011-12-26 15:01:38
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): mod
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Restore Client
6: When
7: Priority
8: Bootstrap
9: Where
10: File Relocation
11: Replace
12: JobId
13: Plugin Options
Select parameter to modify (1-13): 5
The defined Client resources are:
1: bgbilling-fd
2: GW1-configs-fd
3: GW2-configs-fd
4: NAS-6-configs-fd
5: NAS-20-configs-fd
6: NAS-21-configs-fd
7: NAS-ololo-configs-fd
8: DHCPD-configs-fd
9: ASTERISK-configs-fd
10: NS_AND_MAIL-configs-fd
11: VIRTSRV1-configs-fd
12: mydomain.ru-fd
13: tv.domain.ru-fd
14: domain.ru-fd
15: 1.1.1.1-fd
16: 1.1.1.75-fd
17: zabbix.domain.ru-fd
18: 192.168.15.12-fd
Select Client (File daemon) resource (1-18): 2
Run Restore job
JobName: restore
Bootstrap: /backup/bacula-work//backupsrv.ray-com.ru-dir.restore.8.bsr
Where: /usr/restore
Replace: always
FileSet: bgbilling-set
Backup Client: bgbilling-fd
Restore Client: GW1-configs-fd
Storage: BGB-F
When: 2011-12-26 15:01:38
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=3453
You have messages.
4. Ждем успешного выполнения задания, статус можно отслеживать в том же bat
Важно не только делать бекапы и отслеживать что они выполнились без ошибок, но так же и регулярно их разворачивать и проверять. Так же очень хорошей практикой является регулярное резервное копирование базы данных bacula и bsr файлов.
Источник: habrahabr
Получайте новости с allbackup на почту