8 мая 2015 г.

Настройка бэкапа с помощью bacula

Столкнулся с необходимостью сделать бэкап со своего домашнего мини-сервера, на котором у меня много что развернуто в том числе и этот блог(UPD: уже нет). После нескольких часов гугления я остановился на bacula. В интернете море инструкций на эту тему, можно довольно легко развернуть  бэкап-систему. Чтобы структурировать полученный опыт, я решил оставить здесь небольшой how-to.
Задача: есть сервер на debian и домашний компьютер на os Luna (ubuntu). Раз в день вся ценная информация с сервера должна сохраняться на домашний компьютер. Разумеется, во время бэкапа домашний компьютер должен быть включен, поэтому время бэкапа надо выбирать подходящее, у меня это 22:00.

Во всех статьях про bacula можно узнать, что bacula состоит из нескольких независимых модулей,  которые могут быть установлены на разные машины. Вот что об этом написано в википедии:

  • Director (DIR) — осуществляет централизованный контроль и администрирование всего комплекса задач. Планирование и управление заданиями на резервное копирование (Job). Обслуживание Каталога (Catalog) — центральной БД для хранения метаданных.
  • File Daemon (FD) — сервис, выполняющий непосредственное копирование, восстановление и проверку данных по запросу Director. File Daemon должен быть установлен на каждой клиентской машине. File Daemon обменивается информацией с Director и Storage Daemon.
  • Storage Daemon (SD) — читает и пишет данные на физический носитель: диск, ленту, DVD, USB.
  • Console — управляющая консоль оператора или администратора. Поддерживаются ACL для разных пользователей консоли. Типы консолей: TTY, wxWidgets (GUI) для Linux, Unix, Win32, GNOME (GUI), несколько веб-интерфейсов, Qt4.
  • Catalog database — база данных SQL : MySQL, PostgreSQL, или SQLite для хранения метаданных.
Начнем с установки необходимых пакетов. Здесь и далее нужно не путаться: в терминологии для бэкапа: сервером называем ту машину, которая будет управлять процессом и хранить файлы, а клиентом машину, с которой необходимо делать бэкап.

На сервере:


sudo apt-get install bacula-server 

Если предложит настроить mysql, то соглашайтесь. (mysql-server должен быть установлен на сервере)

На клиенте:
 

sudo apt-get install bacula-client

Затем переходим к настройке. Клиент настроить проще всего, т.к. на нем нам нужен только file daemon. Нужно открыть для редактирования файл /etc/bacula/bacula-fd.conf:

Director {
Name = main-pc-dir
Password = "secret"
}
 
FileDaemon {                          # this is me
Name = dserver-fd
FDport = 9102             
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = 192.168.1.57
}
 
Messages {
Name = Standard
director = main-pc-dir = all, !skipped, !restored
}


В нем нужно настроить 3 элемента:
  1. Указать кто будет директором, кто будет всем управлять. (Имя директора и пароль директора)
  2. Описать самого себя.  Это имя fd-демона, его адрес, порт и другие параметры.
  3. Что делать с информационными сообщениями. (с ними можно многое что делать, но мы их будем отправлять директору)
Большая часть параметров будет уже заполнена, вам останется лишь пройтись глазами по конфигу и заполнить недостающие.  После изменения конфигурации не забывайте делать рестарт (sudo service bacula-fd restart).

Я хочу заметить, что File Daemon ничего не знает о том, что будет бэкапиться. Он всего-лишь выполняет указания директора.

Теперь перейдем к настройке сервера. Начнем с простого. Настройка хранилища. 


Director {
  Name = main-pc-dir
  Password = "secret"
}

Storage {                             # definition of myself
  Name = main-pc-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 192.168.1.54
}

Messages {
  Name = Standard
  director = main-pc-dir = all
}

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /var/backup
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}


Здесь уже посложнее, чем с fd демоном, нужно настроить 4 вещи:
 

  1. Указать кто будет директором, кто будет всем управлять. (Имя директора и пароль директора)
  2. Описать самого себя.  Это имя sd-демона, его адрес, порт и другие параметры.
  3. Что делать с информационными сообщениями. (тоже отправляем директору)
  4. Указать, где хранить информацию. Это может быть каталог, раздел, внешний носитель. У меня инфа храниться в каталоге /var/backup.
Опять же большая часть этих параметров будет заполнена. В конфигурационном файле будет много закомментированных шаблонов Device для различных устройств. Не забудьте дать права на папку пользователю bacula, от имени которого запускается демон.  Аналогично, после смены конфигурации — рестарт.

Теперь переходим к настройке главного. Директор. Для этого нужно открыть конфигурационный файл /etc/bacula/bacula-dir.conf


Director {                            # define myself
  Name = main-pc-dir
  DIRport = 9101                # where we listen for UA connections
  QueryFile = "/etc/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 1
  Password = "secret"         # Console password
  Messages = Daemon
  DirAddress = 192.168.1.44
}
JobDefs {
  Name = "DefaultJob"
  Type = Backup
  Level = Full
  Client = dserver-fd #см. ниже тэг Client
  FileSet = "Full Set"
  Schedule = "WeeklyCycle" #как часто выполнять задание
  Storage = File #см. ниже тэг Storage.
  Messages = Standard
  Pool = Default
  Priority = 10
  Write Bootstrap = "/var/lib/bacula/%c.bsr"
}

Job {
  Name = "BackupClient1"
  JobDefs = "DefaultJob"
}

FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
    }
    File = /etc            #Вот эти директории будут бэкапится
    File = /var/www
    File = /var/webapps
  }
}

Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 22:00
  Run = Differential 2nd-5th sun at 22:00
  Run = Incremental mon-sat at 22:00
}
Client {
  Name = dserver-fd
  Address = 192.168.1.57
  FDPort = 9102
  Catalog = MyCatalog
  Password = "secret"          # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}
Storage {
  Name = File
  Address = 192.168.1.54                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "secret"
  Device = FileStorage
  Media Type = File
}
Catalog {
  Name = MyCatalog
  dbname = "bacula"; DB Address = ""; dbuser = "bacula"; dbpassword = "passwordForBacula"
}
Messages {
  Name = Standard
  mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/lib/bacula/log" = all, !skipped
  catalog = all
}
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
  Label Format = "MonthFull-${Month}_${Year}"
}
Console {
  Name = main-pc-mon
  Password = "secret"
  CommandACL = status, .status
}


Здесь настроек много, кратко перечислю что о чем:
    Director — описание директора, здесь задается имя и пароль директора, которые указывались во всех других конфигах.
    JobDefs — это описание группы Jobов. Группы нужны чтобы выделять общие параметры в нескольких Jobах  Подробнее о параметрах написал в комментариях.
    Job — непосредственно задание для бэкапа. Как видно, почти вся конфигурация находится в предыдущем тэге.
    FileSet — описывает какие именно файлы на машине, на которой установлен File Daemon, надо бэкапить.
    Schedule — как часто выполнять задание. Бэкап может быть полным, инкрементальным или дифференциальным. Разница между ними легко гуглится.
    Client — описание клиента (file Daemon), которого мы настраивали в первую очередь.
    Storage — описание хранилища (storage daemon). Его мы настраивали во вторую очередь.
    Catalog — параметры  подключения к базе данных. База данных нужна директору для корректной работы.
    Messages — что делать с сообщениями (отправлять email, кидать в логи, в консоль)
    Pool — здесь описывается пул томов бэкапа. Сколько хранить, сколько копий одновременно иметь и т.д.
    Console — Информация о консоли. (о ней ниже)

Как видно, настройка у директора очень гибкая, можно настроить все под свои задачи. Как и в остальных конфигах почти все будет уже заполнено, также будет много заккоментаренных шаблонов для различных заданий.

И еще осталась консоль. Из нее удобно запускать задания и в случае чего восстанавливать файлы.  Если вы дочитали до этого места, то настройку консоли можно оставить без комментария:


Director {
Name = main-pc-dir
DIRport = 9101
address = 192.168.1.44
Password = "secret"
}


После того, как все установлено запускаем консоль

sudo bconsole

А в ней запускаем задание


*run

90% что-то пойдет не так. Придется почитать логи (сообщения), понять где ошибка, исправить и вновь запустить задание. Уверен, все получится!
Удачи!

Комментариев нет :

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