Bacula

Материал из ALT Linux Wiki

Бэкапы обстоятельно

Первым делом стоит понять, что 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.
====

Ссылки