bacula

Иногда проснувшись утром отчетливо понимаешь — что то не так. Хотя ты побрился и даже ни разу не порезался, кофе не выкипел, на улице солнечное утро, добрался до работы быстро и без приключений, вроде бы все хорошо, а все равно что то не так. Но войдя в офис ты видишь общую панику, истеричные вопли, о том, что все пропало и «весь офисный планктон» умрет, а ты находишься во главе тех кто погибнет.
Оказывается ночью отказали файловый и почтовый серверы. И тут понимаешь, что не с проста утро началось так хорошо. Работы предстоит достаточно, но данные надежно сохранены, ибо ты позаботился об их резервном копировании.

В принципе обычная рабочая ситуация, если есть бекапы данных. Именно «о вовремя сделанном бекапе» мы сегодня и поговорим.
Систем резервного копирования данных достаточно много, с открытым исходным кодом — значительно меньше, а уровня предприятия, да еще и с открытым кодом можно пересчитать по пальцам рук, ну или ног, кому как удобнее.
После детального изучения возможностей была выбрана система с неброским названием Bacula.
Минимальный список требований:
1.клиент-серверная архитектура
2.возможность бекапа. восттановления nix,win систем
3.различные варианты бекапов (полный, дифференциальный, инкрементальный )
4.возможность варировать тип бекапа от времени выполнения
5.ротация бекапов
6.«достаточная» документированность
7.высокая надежность (уровня «палкой не убьешь»)
Кто слышит в первые о Bacula, советую посетить википедию, дабы иметь минимальное представление от теме «статьи».
Для тех, кто «осилил много букв», но не желает лазать по википедии привожу список основных модулей.
Bacula Director — процесс управляющий системой в целом(управление, планирование, восстановление бекапов).
Storage Director — запускается на сервере отвечающим за «физическое» хранение данных.
File Director — сервис запускаемый на каждом из клиентов.
Bconsole — консоль управления.

Задание: наладить систему резервного копирования и восстановления данных, таким образом, что бы: на server1 и server3 в понедельник делался «полный» бекап, со вторника и до воскресенья включительно дифф. бекпы, а для server2 всю неделю делались «полные» бекапы.
Данные должны храниться не менее 3х недель.
Для примера возьмем конфигурацию для резервного копирования и восстановления данных с server3.

Начнем с настройки Bacula Director
(файл конфига: /etc/bacula/bacula-dir.conf. Расположение: сервер с запущенным bacula-director )
Director {
Name = backup-dir
Dirport = 9101
QueryFile = «/etc/bacula/scripts/query.sql» #набор sql запросов для работы с метаданными
WorkingDirectory = «/var/lib/bacula»
PidDirectory = «/var/run/bacula»
Password = «some_password»
Messages = Daemon
DirAddress = 10.10.0.1
}

В связи с тем, что система интенсивно хранит метаданные в базе данных настраиваем доступ к mysql базе данных.
Catalog {
Name = MyCatalog
dbname = bacula; DB Address = «10.10.0.1»; user = bacula; password = «some_password»
}

Настраиваем доступ к консоли управления
Console {
Name = backup-mon
Password = «some_password»
CommandACL = status, .status
}

Отправка отчетов о проделанной работе на почту администратору
Messages {
Name = Daemon
mailcommand = «/usr/lib/bacula/bsmtp -h localhost -f \»\(Bacula\) \\» -s \»Bacula daemon message\» %r»
mail = admin@domain.com = all, !skipped
console = all, !skipped, !saved
append = «/var/lib/bacula/log» = all, !skipped
}

Определяем сервера «хранилища»
Storage {
Name = stor_server1
Address = 10.10.0.2
SDPort = 9103
Password = «storage_pass»
Device = FileStorage
Media Type = File
}

Создаем расписания согласно которому будем выполнять задания копирования или восстановления.
Согласно расписанию в понедельник будет создан «полный» бекап, в остальные дни будут создаваться дифференциальные бекапы. Так например, что бы восстановить данные за пятницу, необходимо развернуть задание бекапа выполненное в понедельник, после чего «сверху накатить» пятничный диф. бекап.
Schedule {
Name = «WeeklyDiff»
Run = Level=Full on mon at 05:01
Run = Level=Differential on tue-sun at 02:02
}

Расписание, для создания «полных» бекапов. Применяется для данных, потеря которых приведет к «полному» разочарованию начальства в «вашей квалификации» с занесением в личное дело, или «в грудную клетку», кому как повезет.
Schedule {
Name = «WeeklyFull»
Run = Level=Full on mon-sun at 03:03
}

Создаем задание для бекапа сервера server3
Job {
Name = «server3″ #Имя задания
Type = Backup #Тип работы(создание бекапа)
Level = Differential #Уровень бекапа
Client=server3-fd #Клиент на котором будет производиться бекап
FileSet=»server3» #Где описано как и какие файлы будем сохранять
Storage = stor_server1 #Куда будем «сливать» бекап
Pool = mainpool #Определяем с каким «пулом»(как) будем работать
Messages = Standard #Как отрапортовать о проделанной работе
Schedule = «WeeklyDiff» #По какому расписанию делать бекапы
}

Указываем что именно и как будем сохранять с сервера server3
FileSet {
Name = «server3»
Include {
Options {
signature = MD5 #Для сверки используем MD5
Compression=GZIP #Используем GZIP компрессию
}
File = /etc #Что именно бекапить
File = /home/
File = /var/www

}

Exclude { #А что не бекапить, например логи
File = /home/logs
File = /var/www/logs
}
}

Описание параметров клиента, для server3
Client {
Name = server3-fd
Address = 10.10.0.3
FDPort = 9102
Catalog = MyCatalog
Password = «fd_password
File Retention = 28 days #Сколько сохранять метаданные о сохраненных файлах для
#данного клиента
Job Retention = 28 days #Сколько сохранять метаданные касательно заданий для данного #клиента
AutoPrune = yes #Может ли бакула очищать метаданные
}

Pool {
Name = mainpool
Pool Type = Backup
Recycle = yes # Может ли бакула удалять задания из томов
AutoPrune = yes # Может ли бакула очищать тома
Volume Retention = 21 days # Как долго бакула должна бояться удалить том
Maximum Volume Jobs = 7 # Сколько заданий хранить в каждом из томов
Maximum Volumes = 4 # максимальное количество том которыми может #оперировать бакула
}

Описание задания, для восстановления данных
Job {
Name = «server3-resotre»
Type = Restore
Client=server3
FileSet=»server3″
Storage = stor_server1
Pool = mainpool
Messages = Standard
Where = /var/lib/bacula-restores
}

Для работы bacula-director, бекапа и восттановления «server3» данного конфига вполне достаточно.
Что у нас получилось: в понедельник происходит «полный» бекап сервера, со вторника по понедельник идут диф. бекапы.
На севере «хранилище» для данного задания создается 4 тома, в каждом томе хранится 7 заданий.(том линкуется(создается) командой label)
По заполнении всех 4 томов, происходит очистка самого старого тома.
Далее идет конфиг сервера «хранилища»(storage director) и клиента(file director) для сервера server3

Описание настроек для Bacula Storage Director
(файл конфига: /etc/bacula/bacula-sd.conf. Расположение: сервер с запущенным bacula-sd (storage director) )
Storage {
Name = stor_server1
SDPort = 9103
WorkingDirectory = «/var/lib/bacula»
Pid Directory = «/var/run/bacula»
SDAddress = 10.10.0.2
}
Director {
Name = backup-dir
Password = «storage_pass»
}

Device {
Name = FileStorage
Media Type = File
Archive Device = /var/bacula
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}

Messages {
Name = Standard
director = backup-dir = all
}

Описание настроек для file-director на сервере server3

(файл конфига: /etc/bacula/bacula-fd.conf. Расположение: сервер с запущенным bacula-fd ( server3))
Director {
Name = backup-dir
Password = «server3-fd»
}

FileDaemon {
Name = server3-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
FDAddress = 10.10.0.3
}

Messages {
Name = Standard
director = server3-fd = all, !skipped, !restored
}

Надеюсь комментарии в конфигурационных файлах сервера «хранилища» и клиента на сервере server3 излишни.

Итогом данный статьи может стать понимание того как настроить гибкую, надежную систему резервного копирования и восстановления данных с неброским названием Bacula.

П.С. Для тех, кто прочитав вступление спросит, а почему это проснувшись утром я не знал что ночью упало 2 сервера, ведь системы мониторинга никто не отменял, да и наверное столь важные серверы можно развернуть на рейд массивах.
Ситуация со сбоем сразу двух серверов вымышленная и приведена исключительно для примера.

Оставить комментарий