среда, 31 декабря 2008 г.

Bacula

Этот пост я хотел написать уже очень давно. Все руки не доходили. И сейчас за раз я думаю все не наклепаю. :) Так что пока, можно сказать, вступление. :)

Преамбула.

Бакап нужен всем! Думаю эту аксиому знают все. Но вот парадокс: реально бакап делают единицы! Причем что там говорить о домашних пользователях, когда даже во многих организациях его нет. Печально, но факт. Причем печаль этого факта осознаешь только тогда, когда теряешь данные... Сделать нормальный бакап я хотел давно. Сподвигли же на это меня курсы, которые я окончил этим летом в англии, в симантике по нетбакапу. Данный продукт мне очень понравился, не смотря на довольно сложную внутренюю структуру. И проходя курс, я вспомнил, что в свое время пытался поковырять бакулу, и что она по идеям очень сходна с продуктом симантика. Вернувшись домой, я нашел время и развернул ее дома. Остался доволен. :)

Для начала: кому это нужно.

В общем если вы все же пришли к выводу, что делать бакап пора, то значит будем начинать. :) Но прежде решим, нужна ли вам именно бакула. Для этого ответим на ряд вопросов:
  1. У вас более одного компа?
  2. Компьютеры объеденены в локальную сеть?
  3. Выши компьютеры работают круглые сутки (или хотя бы достаточно редко выключаются)?
Если вы получили более одного "да", то скорее всего бакула облегчит вашу жизнь. Если нет - то вам надо бы поискать другое решение. Идем далее.

Что бы грамотно у удобно настроить это все "счастье", надо понимать КАК оно работает. Логически бакула разбита на три компонента:
  1. Bacula Director: содержит информацию о всех заданиях, клиентах, шедулерах, пулах, файл сетах, стораджах, методах оповещения и каталоге.
  2. Bacula Storage Daemon: демон осуществляющий непосредственное сохранение данных на носители, а так же управляющий этими носителями (роботы, ченджеры и прочее).
  3. Bacula File Daemon: демон, представляющий собственно говоря клиентского демона, забирающий данные с клиента и передающий их серверу.
Общая логика из этого думаю довольно ясная: директор по расписанию выполняет задания, собирая данные с клиентов (Bacula File Daemon-ов) и отдает эти данные сторадж демону. Тот в свою очередь складывает это все уже непосредственно на носители. Все три компоненты могуть быть либо на разных машинах, либо на одной, либо в любых других комбинациях.
Пулы представляют из себя логические структуры носителей. Для каждого пула можно отдельно оговорить метки томов, время хранения носителей и прочее. Полное описание естественно читамем в доках. :) Файл сеты - определения того, что будет собираться с клиентов (файлы, пути, файлы с путями, маски файлов и прочее). Каталог - база данных (sqlite, mysql или postgresql) в которой хранятся имена файлов, их контрольные суммы и прочая служебная информация. Использовать можно любую базу, но я использовал mysql. Эксперимент с sqlite был не удачным. Да и в документации разработчики не рекомендуют его использовать.

Для примера я буду рассматривать конфигурацию, на мой взгляд, наиболее распространенную у домашних пользователей: домашний десктоп и пара ноутбуков (мой и жены). Для начала проинсталируем все необходимое. На десктопе у нас будет стоять директор, сторадж демон и файл демон. А так же каталог (mysql).

sudo aptitude install bacula-director-mysql bacula-sd-mysql bacula-fd bacula-console

Если у вас еще не установлен mysql, то он соответственно установиться и задаст вам кучу вопросов. :) Но настройка mysql - не тема для этого поста. ;) Так же по желанию можно поставить bacula-console-qt и bacula-traymonitor. Консоль используется для управления всем этим хозяйством в реальном времени, а траймонитор вешает в трей иконку. Баловство, но многим нравится. :) Так же это все может потянуть за собой настройку почтовой системы, так как все оповещения бакула делает в первую очередь через mail. Хотя возможно настроить их как угодно (sms, osd и прочее).
На клиентах мы ставим только файл демон.

sudo aptitude install bacula-fd

Начнем настройку с fd, как с самого простого. Конфиги по умолчанию вполне работоспособны, так что править нам придется совсем мало, за исключением директора.
Секция Director определяет имя директора (логическое имя внутри бакулы, не связано с именем хоста, называем например <хост директора>-dir) и пароль - произвольную комбинацию символов. Главное, что бы они были одинаковые на директоре в разделе конкретного клиента и в конфиги этого клиента. По умолчанию они все кажется одинаковые, так что для начала можно оставить так, но в последствии конечно же желательно их изменить. Так же секции director в настройках fd может быть две: одна для подлючения самого директора и работы бакапа, а вторая, с параметром Monitor = yes - для мониторинга. Секция FileDaemon содержит основные параметры:
  • Name - имя демона. Является логическим именем внутри бакулы и не связано на прямую с именем хоста. Что бы не запутаться называем например <имя хоста>-fd.
  • FDport - порт, по которому будет осуществляться подключение
  • WorkingDirectory - директория, которую использует для работы демон
  • Pid Directory - директория в которой будет хранится pid работающего демона
  • Maximum Concurrent Jobs - колличество одновременно запущеных на этом клиенте заданий
  • FDAddress - адрес демона. Если вы настраиваете fd на машине, где стоит директор, то можно использовать адрес 127.0.0.1, для всех остальных - внешний интерфейс, который "виден" с машины, на которой установлен директор. Так же сюда можно прописать имя машины, если у вас нормально настроен dns, или имена прописаны в /etc/hosts
Секция Messages определяет какие оповещения будут отправляться директору. В общем-то на этом можно считать настройку файлового демона законченой. Далее просто приведу полный конфиг файлового демона установленного на той же машине, что и директор:

#
# Default Bacula File Daemon Configuration file
#
# For Bacula release 2.4.2 (26 July 2008) -- debian lenny/sid
#
# There is not much to change here except perhaps the
# File daemon Name to
#

#
# List Directors who are permitted to contact this File daemon
#
Director {
Name = desktop-dir
Password = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

#
# Restricted Director, used by tray-monitor to get the
# status of the file daemon
#
Director {
Name = desktop-mon
Password = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = desktop-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 2
FDAddress = 127.0.0.1
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = desktop-dir = all, !skipped, !restored
}

Продолжение следует...