Настройка и понимание Bacula / Хабрахабр

21 марта 2010 в 18:45

Настройка и понимание 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) <%r>" -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 #Может ли бакула очищать метаданные

}



В данной секции определяем параметры ротации.

Исходя из конфигурации: мы используем 4 тома, в томе храниться не более 7 зданий (недельный бекап), время хранения тома 3 недели (21 день).

Таким образом мы храним каждое задание 21 день, на 22 день очищаем том с данными заданиями и используем его заново.

Так, если мы хотим хранить данные не 3 недели, а 4, то Volume Retention должны быть не 21, а 28 и Maximum Volumes должно быть 5. И не забудьте создать дополнительный том.

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 сервера, ведь системы мониторинга никто не отменял, да и наверное столь важные серверы можно развернуть на рейд массивах.

Ситуация со сбоем сразу двух серверов вымышленная и приведена исключительно для примера.

+44

231
h1g28,0

http://habrahabr.ru/post/86526/

Губарь Маргарита Александровна