Bacula
Бэкапы обстоятельно
Первым делом стоит понять, что Bacula — сложный продукт, пригодный для множества ситуаций, но за это приходится платить существенным вложением времени в освоение базовых вещей и соответствующее конфигурирование (отведите хотя бы неделю на базовое освоение и планирование тестовой инсталяции).
Если требуется создавать простую резервную копию — возможно, достаточно просто tar, rsync или несложных систем вроде rdiff-backup или bontmia. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на bacula.
Дистрибутив
Существует бета-версия дистрибутива Bran Backup, созданная Станиславом Иевлевым (inger@) и Виталием Кузнецовым (vitty@). Она представляет собой удобный инсталятор Bacula на базе ALT Linux. Дистрибутивы для различных архитектур лежат здесь. В настоящее время статус этих версий: Бета
Планируемые доработки
- Доработать branding
- Реализовать возможность удобной настройки шифрования передаваемых данных и получившихся архивов
- Реализовать возможность восстановления из архива
Базовая настройка Bacula
Рассмотрим минимальную установку сервера bacula.
Установим необходимые пакеты:
На сервере:
# apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st
\
На клиенте:
# apt-get install bacula7-client
Настройка базы данных MySQL
Запустим сервис и добавим его в автозагрузку:
# systemctl start mysqld # systemctl enable mysqld
Подключимся к MySQL:
# mysql -u root -p
Создадим базу bacula:
mysql> CREATE DATABASE `bacula`;
Создадим пользователя bacula с паролем "Pa$$word":
mysql> CREATE USER 'bacula'@'localhost' IDENTIFIED BY 'Pa$$word';
Дадим пользователю права на базу:
mysql> GRANT ALL PRIVILEGES ON `bacula`.* TO 'bacula'@'localhost'; mysql> FLUSH PRIVILEGES;
Для создания необходимых таблиц существуют скрипт:
# /usr/share/bacula/scripts/make_mysql_tables
Настройка Director
За настройку Bacula Director отвечает файл /etc/bacula/bacula-dir.conf:
Director { Name = dir # Имя DIRport = 9101 # Порт который будет слушать Director QueryFile = "/usr/share/bacula/scripts/query.sql" WorkingDirectory = "/var/lib/bacula" PidDirectory = "/var/run/bacula" Maximum Concurrent Jobs = 1 @/etc/bacula/bacula-dir-password.conf # Файл с паролем для доступа к Director Messages = Daemon } # Параметры каталога Catalog { Name = MyCatalog # Имя каталога dbname = bacula # Имя базы данных user = bacula # Имя пользователя базы данных password = "Pa$$word" # Пароль пользователя базы данных } # Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d @|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'" @|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"
Описание хранилищ
В каталоге storage.d находятся конфигурационные файлы хранилищ к которым director имеет доступ:
Storage { Name = File # Имя хранилища Address = 127.0.0.1 # IP или FQN хранилища SDPort = 9103 # Порт @/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу Device = FileStorage Media Type = File }
Описание наборов файлов
В каталоге fileset.d находятся описания списков файлов для резервирования:
catalog.conf: # Описывает резервирование дампа базы данных bacula FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = /var/lib/bacula/bacula.sql } }
fullset.conf: # Полный бэкап системы FileSet { Name = "Full Set" Include { # Какие файлы включать Options { signature = MD5 } File = / } Exclude { # Какие файлы не включать в бэкап File = /proc File = /sys File = /dev File = /tmp File = /.journal File = /.fsck } }
Описание задач
В каталоге job.d описываются задания резервирования.
backupcatalog.conf - Делает дамп базы и резервирует его:
Job { Name = "BackupCatalog" # Имя JobDefs = "DefaultJob" # Используемый шаблон Level = Full FileSet="Catalog" # Список файлов для бэкапа Schedule = "WeeklyCycleAfterBackup" # Расписание RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы) RunAfterJob = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы) Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # файл необходимый для востановления Priority = 11 # Очередность выполнения }
bacula.conf - делает полный бэкап:
Job { Name = "BackupFullSet" JobDefs = "DefaultJob" Schedule = "WeeklyCycle" Write Bootstrap = "/var/lib/bacula/Client1.bsr" }
defaultjob.conf - описывает параметры задачи по умочанию:
JobDefs { Name = "DefaultJob" # Имя Type = Backup # Тип Level = Incremental # Вид бэкапа Client = fd # Клиент с которого нужно сделать бэкап FileSet = "Full Set" # Список файлов Storage = File # Хранилище Messages = Standard Pool = Default Priority = 10 # Приоритет }
restore.conf - восстанавливает файлы:
Job { Name = "RestoreFiles" # Имя задачи Type = Restore # Тип Client=fd # Клиент на котором востанавливать файлы FileSet="Full Set" # Набор файлов Storage = File # Хранилище Pool = Default Messages = Standard Where = /tmp/bacula-restores # Папка куда востанавливать файлы }
Описание пулов
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.
default.conf - описывает пул по умолчанию:
Pool { Name = Default # Имя Pool Type = Backup # Тип Recycle = yes # Разрешает bacula удалять задания из томов AutoPrune = yes # Разрешает bacula очищать тома Volume Retention = 365 days # Время в течении которого bacula не будет очищать том LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов) }
Описание клиентов
В файле client1.conf описан локальный клиент:
Client { Name = fd # Имя клиента Address = 127.0.0.1 # IP или FQN FDPort = 9102 # Порт Catalog = MyCatalog # Используемый каталог @/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту File Retention = 30 days # Срок хранения метаданных о файлах Job Retention = 6 months # Срок хранения метаданных о задачах AutoPrune = yes # Автоматическое удаление устаревших метаданных }
Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл client2.conf следующего содержания:
Client { Name = fd2 Address = 10.10.50.50 FDPort = 9102 Catalog = MyCatalog Password = "Pa$$wordClient2" File Retention = 30 days Job Retention = 6 months AutoPrune = yes }
Автозапуск сервиса
Запустим и добавим в автозапуск сервис:
# systemctl start bacula-dir # systemctl enable bacula-dir
Настройка Storage
Основной файл конфигурации хранилищ находится это /etc/bacula/bacula-sd.conf, также к нему присоединяются все файлы из каталога device.d
По умочанию этот файл выглядит так:
Storage { Name = sd # Имя хранилища SDPort = 9103 # Порт WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 } Director { Name = dir # Имя director, который может подсоединяться к этому хранилищу @/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу } @|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'" Messages { Name = Standard director = dir = all }
В каталоге device.d находится файл с описанием устройства:
Device { Name = FileStorage # Имя устройства Media Type = File # Тип устройства Archive Device = /srv/backup # Папка для хранения LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; }
Каталог /srv/backup должнен существовать и принадлежать пользователю bacula:
# mkdir /srv/backup # chown bacula:bacula /srv/backup
Запустим и добавим в автозагрузку сервис:
# systemctl start bacula-sd # systemctl enable bacula-sd
Настройка File Daemon
Установим необходимые пакеты:
# apt-get install bacula7-client
Конфигурационный файл клиента находится по адресу /etc/bacula/bacula-fd.conf:
# Список directors, которые могут подключаться к клиенту Director { Name = dir Password = "Pa$$wordClient2" } FileDaemon { Name = fd2 FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /var/run/bacula Maximum Concurrent Jobs = 20 }
Запустим и добавим в автозагрузку сервис:
# systemctl start bacula-fd # systemctl enable bacula-fd
Проверка работоспособности
Для управления bacula используется специальная утилита bconsole.
# bconsole Connecting to Director 127.0.0.1:9101 1000 OK: 102 dir Version: 7.4.7 (16 March 2017) Enter a period to cancel a command.
Для проcмотра статуса всех компонентов введем status:
*status Status available for: 1: Director 2: Storage 3: Client 4: Scheduled 5: All Select daemon type for status (1-5): 5
Создание резервной копии
# bconsole Connecting to Director 127.0.0.1:9101 1000 OK: 102 dir Version: 7.4.7 (16 March 2017) Enter a period to cancel a command. *run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: BackupCatalog 2: BackupFullSet 3: RestoreFiles Select Job resource (1-3): 2 Run Backup job JobName: BackupFullSet Level: Incremental Client: fd FileSet: Full Set Pool: Default (From Job resource) Storage: File (From Job resource) When: 2017-07-10 16:00:54 Priority: 10 OK to run? (yes/mod/no): mod Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Client 6: When 7: Priority 8: Pool 9: Plugin Options Select parameter to modify (1-9): 5 The defined Client resources are: 1: fd 2: fd2 Select Client (File daemon) resource (1-2): 2 Run Backup job JobName: BackupFullSet Level: Incremental Client: fd2 FileSet: Full Set Pool: Default (From Job resource) Storage: File (From Job resource) When: 2017-07-10 16:00:54 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=1
За ходом выолнения можно наблюдать выбрав статус director:
# bconsole *status Status available for: 1: Director 2: Storage 3: Client 4: Scheduled 5: All Select daemon type for status (1-5): 1 dir Version: 7.4.7 (16 March 2017) x86_64-alt-linux-gnu redhat Daemon started 10-ию-2017 16:22, conf reloaded 10-июл-2017 16:22:18 Jobs: run=0, running=1 mode=0 Heap: heap=389,120 smbytes=71,240 max_bytes=71,612 bufs=249 max_bufs=255 Scheduled Jobs: Level Type Pri Scheduled Job Name Volume =================================================================================== Incremental Backup 10 10-ию-2017 23:05 BackupFullSet b0001 Full Backup 11 10-ию-2017 23:10 BackupCatalog b0001 ==== Running Jobs: Console connected at 10-ию-2017 16:22 JobId Type Level Files Bytes Name Status ====================================================================== 2 Back Full 0 0 BackupFullSet is running ==== No Terminated Jobs. ====