Bacula: различия между версиями

Материал из ALT Linux Wiki
м (VolumeRetention -- это важно)
Строка 4: Строка 4:
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.


== Дистрибутив ==
Существует бета-версия дистрибутива Bran Backup, созданная Станиславом Иевлевым (inger@) и Виталием Кузнецовым (vitty@). Она представляет собой удобный инсталятор Bacula на базе ALT Linux.
Дистрибутивы для различных архитектур лежат [http://beta.altlinux.com/backup-server/ здесь].
В настоящее время статус этих версий: Бета
=== Планируемые доработки ===
* Доработать branding
* Реализовать возможность удобной настройки шифрования передаваемых данных и получившихся архивов
* Реализовать возможность восстановления из архива
== Подводные грабли ==
Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями.  Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.


== Базовая настройка Bacula ==
== Базовая настройка Bacula ==
Строка 9: Строка 20:
Установим необходимые пакеты:<br>
Установим необходимые пакеты:<br>
На сервере:
На сервере:
<pre># apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st</pre>
<pre># apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st</pre>\
На клиенте:
На клиенте:
<pre># apt-get install bacula7-client</pre>
<pre># apt-get install bacula7-client</pre>
{{Attention|Если у Вас включен SELinux, то на время настройки выключите его}}
{{Attention|Если у Вас не запускаются сервисы Bacula с ошибкой Cannot not open pid file. См. [https://bugzilla.altlinux.org/33645 Bug 33645]}}
Для исправления запуска сервисов ([https://bugzilla.altlinux.org/33645 Bug 33645]) необходимо привести файл {{path|/lib/tmpfiles.d/bacula.conf}} к следующему виду:
<pre>d /var/run/bacula 0775 root bacula -</pre>
И перезагрузить сервер.
{{Attention|Если у Вы используете 5 версию Bacula то все файлы с описаниями задач, расписаний, списков файлов и т.д. необходимо добавлять в конфигурационные файлы сервисов с помощью такой строки: '''@/etc/bacula/job/bacula.conf'''}}
=== Настройка базы данных MySQL ===
=== Настройка базы данных MySQL ===
Запустим сервис и добавим его в автозагрузку:
Для создания базы, привелегий и таблиц существуют скрипты:
<pre># systemctl start mysqld
<pre># /usr/share/bacula/scripts/create_mysql_database
# systemctl enable mysqld</pre>
# /usr/share/bacula/scripts/grant_mysql_privileges
Подключимся к MySQL:
# /usr/share/bacula/scripts/make_mysql_tables</pre>
<pre># mysql -u root -p</pre>
Задаим пароль для созданного пользователя bacula:
Создадим базу bacula:
<pre># mysql -u root -p
<pre>mysql> CREATE DATABASE `bacula`;</pre>
> use mysql;
Создадим пользователя bacula с паролем "Pa$$word":
> UPDATE user SET authentication_string=PASSWORD("Pa$$word") where User='bacula';
<pre>mysql> CREATE USER 'bacula'@'localhost' IDENTIFIED BY 'Pa$$word';</pre>
> flush privileges;
Дадим пользователю права на базу:
> quit;</pre>
<pre>mysql> GRANT ALL PRIVILEGES ON `bacula`.* TO 'bacula'@'localhost';
mysql> FLUSH PRIVILEGES;</pre>
Для создания необходимых таблиц существуют скрипт:
<pre># /usr/share/bacula/scripts/make_mysql_tables</pre>


=== Настройка Director ===
=== Настройка Director ===
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:
<pre>Director {
<pre>Director {
   Name = dir # Имя  
   Name = dir # Имя  
Строка 51: Строка 53:
   dbname = bacula # Имя базы данных
   dbname = bacula # Имя базы данных
   user = bacula # Имя пользователя базы данных
   user = bacula # Имя пользователя базы данных
   password = "Pa$$word" # Пароль пользователя базы данных
   password = "Specify password for catalog here" # Пароль пользователя базы данных
}
}
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
Строка 61: Строка 63:
@|"sh -c 'for f in /etc/bacula/messages.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'"</pre>
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"</pre>
==== Описание хранилищ ====
В каталоге {{path|storage.d}} находятся конфигурационные файлы хранилищ к которым director имеет доступ:
<pre>Storage {
  Name = File # Имя хранилища
  Address = 10.10.50.49 # IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)
  SDPort = 9103 # Порт
@/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу
  Device = FileStorage
  Media Type = File
}</pre>
==== Описание наборов файлов ====
В каталоге {{path|fileset.d}} находятся описания списков файлов для резервирования:
<pre>catalog.conf: # Описывает резервирование дампа базы данных bacula
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = /var/lib/bacula/bacula.sql
  }
}</pre>
<pre>fullset.conf: # Полный бэкап системы
FileSet {
  Name = "Full Set"
  Include { # Какие файлы включать
    Options {
      signature = MD5
    }
    File = /
  }
  Exclude { # Какие файлы не включать в бэкап
    File = /proc
    File = /sys
    File = /dev
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}
</pre>
==== Описание задач ====
В каталоге {{path|job.d}} описываются задания резервирования.<br>
{{path|backupcatalog.conf}} - Делает дамп базы и резервирует его:
<pre>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 # Очередность выполнения
}</pre>
{{path|bacula.conf}} - делает полный бэкап:
<pre>Job {
  Name = "BackupFullSet"
  JobDefs = "DefaultJob"
  Schedule = "WeeklyCycle"
  Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}</pre>
{{path|defaultjob.conf}} - описывает параметры задачи по умочанию:
<pre>JobDefs {
  Name = "DefaultJob" # Имя
  Type = Backup # Тип
  Level = Incremental # Вид бэкапа
  Client = fd # Клиент с которого нужно сделать бэкап
  FileSet = "Full Set" # Список файлов
  Storage = File # Хранилище
  Messages = Standard
  Pool = Default
  Priority = 10 # Приоритет
}</pre>
{{path|restore.conf}} - восстанавливает файлы:
<pre>Job {
  Name = "RestoreFiles" # Имя задачи
  Type = Restore # Тип
  Client=fd # Клиент на котором востанавливать файлы
  FileSet="Full Set" # Набор файлов
  Storage = File # Хранилище
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores # Папка куда востанавливать файлы
}
</pre>
==== Описание пулов ====
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.<br>
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.<br>
{{path|default.conf}} - описывает пул по умолчанию:
<pre>Pool {
  Name = Default # Имя
  Pool Type = Backup # Тип
  Recycle = yes # Разрешает bacula удалять задания из томов
  AutoPrune = yes # Разрешает bacula очищать тома
  Volume Retention = 365 days # Время в течении которого  bacula не будет очищать том
  LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)
}</pre>
==== Описание клиентов ====
В файле {{path|client1.conf}} описан локальный клиент:
<pre>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 # Автоматическое удаление устаревших метаданных
}</pre>
Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл {{path|client2.conf}} следующего содержания:
<pre>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
}</pre>
==== Автозапуск сервиса ====
Запустим и добавим в автозапуск сервис:
<pre># systemctl start bacula-dir
# systemctl enable bacula-dir</pre>
=== Настройка Storage ===
Основной файл конфигурации хранилищ находится это {{path|/etc/bacula/bacula-sd.conf}}, также к нему присоединяются все файлы из каталога {{path|device.d}}<br>
По умочанию этот файл выглядит так:
<pre>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
}</pre>
В каталоге {{path|device.d}} находится файл с описанием устройства:
<pre>Device {
  Name = FileStorage # Имя устройства
  Media Type = File # Тип устройства
  Archive Device = /srv/backup # Папка для хранения
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}</pre>
Каталог {{path|/srv/backup}} должнен существовать и принадлежать пользователю bacula:
<pre># mkdir /srv/backup
# chown bacula:bacula /srv/backup</pre>
Запустим и добавим в автозагрузку сервис:
<pre># systemctl start bacula-sd
# systemctl enable bacula-sd</pre>
=== Настройка File Daemon ===
Установим необходимые пакеты:
<pre># apt-get install bacula7-client</pre>
Конфигурационный файл клиента находится по адресу {{path|/etc/bacula/bacula-fd.conf}}:
<pre># Список 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
}</pre>
Запустим и добавим в автозагрузку сервис:
<pre># systemctl start bacula-fd
# systemctl enable bacula-fd</pre>
== Проверка работоспособности ==
Для управления bacula используется специальная утилита bconsole.<br>
<pre># 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.</pre>
Для проcмотра статуса всех компонентов введем status:
<pre>*status
Status available for:
    1: Director
    2: Storage
    3: Client
    4: Scheduled
    5: All
Select daemon type for status (1-5): 5</pre>
=== Создание резервной копии ===
<pre># 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</pre>
За ходом выолнения можно наблюдать выбрав статус director:
<pre># 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.
====
</pre>
=== Востановление из резервной копии ===
<pre># bconsole
*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
    1: List last 20 Jobs run
    2: List Jobs where a given File is saved
    3: Enter list of comma separated JobIds to select
    4: Enter SQL list command
    5: Select the most recent backup for a client
    6: Select backup for a client before a specified time
    7: Enter a list of files to restore
    8: Enter a list of files to restore before a specified time
    9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel</pre>
Выбираем 1 пункт - показать последнии 20 задач
<pre>Select item:  (1-13): 1
+-------+--------+---------------------+----------+----------+---------------+
| JobId | Client | StartTime          | JobLevel | JobFiles | JobBytes      |
+-------+--------+---------------------+----------+----------+---------------+
| 2    | fd2    | 2017-07-10 16:22:47 | F        | 49995    | 1194397517    |
+-------+--------+---------------------+----------+----------+---------------+
To select the JobIds, you have the following choices:
    1: List last 20 Jobs run
    2: List Jobs where a given File is saved
    3: Enter list of comma separated JobIds to select
    4: Enter SQL list command
    5: Select the most recent backup for a client
    6: Select backup for a client before a specified time
    7: Enter a list of files to restore
    8: Enter a list of files to restore before a specified time
    9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel</pre>
Выбираем 3 пункт - ввести номера задач через запятую и вводим номер задачи 2
<pre>Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 2
You have selected the following JobId: 2
Building directory tree for JobId(s) 2 ...  ++++++++++++++++++++++++++++++++++++++++++++
44,444 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
</pre>
Bacula построит дерево файлов в котором мы можем выбрать файлы для востановления.<br>
Выберем файлы в каталоге /etc
<pre>cwd is: /
$ mark etc
1,933 files marked.
$ done
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr
The Job will require the following (*=>InChanger):
  Volume(s)                Storage(s)                SD Device(s)
===========================================================================
 
    b0001                    File                      FileStorage             
Volumes marked with "*" are in the Autochanger.
1,933 files selected to be restored.</pre>
Выберем клиента для востановления:
<pre>Defined Clients:
    1: fd
    2: fd2
Select the Client (1-2): 2</pre>
Проверим все параметры задачи и запустим её:
<pre>Using Catalog "MyCatalog"
Run Restore job
JobName:        RestoreFiles
Bootstrap:      /var/lib/bacula/dir.restore.1.bsr
Where:          /tmp/bacula-restores
Replace:        Always
FileSet:        Full Set
Backup Client:  fd2
Restore Client:  fd2
Storage:        File
When:            2017-07-10 16:33:04
Catalog:        MyCatalog
Priority:        10
Plugin Options: 
OK to run? (yes/mod/no): yes
Job queued. JobId=3
*</pre>
Файлы востановленны в каталог {{path|/tmp/bacula-restores}}
== Настройка Bacula для PostgreSQL ==
=== Настройка клиента ===
{{Attention|Для работы с Bacula на сервере PostgreSQL должно быть настроено онлайн резервирование [[PostgreSQL#Continuous_Archiving_and_Point-in-Time_Recovery|PITR]])}}
На клиенте в каталоге /etc/bacula создадим следующие скрипты:<br>
<br>
'''pre-base-backup.sh''':
<source lang="bash">#!/bin/bash
DATE=`date +"%b %d %T"`
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"</source>
Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.<br>
<br>
'''post-base-backup.sh''':
<source lang="bash">#!/bin/bash
rm -f /var/lib/pgsql/backup/*</source>
Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.<br>
<br>
'''pre-logs-backup.sh''':
<source lang="bash">#!/bin/bash
touch /var/lib/pgsql/backup_in_progress</source>
Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы ([[PostgreSQL#Настройка_журналов_WAL|copy_wal.sh]])<br>
<br>
'''post-logs-backup.sh''':
<source lang="bash">#!/bin/bash
rm -f /var/lib/pgsql/wals/*
rm -f /var/lib/pgsql/backup_in_progress</source>
Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов.
Далее необходимо сделать эти скрипты исполняемыми:
<pre># chmod 750 pre-base-backup.sh
# chmod 750 post-logs-backup.sh
# chmod 750 post-base-backup.sh
# chmod 750 pre-logs-backup.sh</pre>
На этом настройка клиента завершена.
=== Настройка сервера ===
Для онлайн резервного копирования PostgreSQL необходимо добавить в Bacula клиента и создать для него задачи. В этом примере рассмотрим настройку на примере клиента zabbix-fd.
==== Списки файлов ====
Создадим списки файлов для резервного копирования в каталоге {{path|/etc/bacula/fileset.d}}:<br>
Список для копирования полной резервной копии базы {{path|PGSQL-Full-Base-set.conf}}:
<pre>FileSet {
  Name = "PGSQL-Full-Base-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
    }
    File = "/var/lib/pgsql/backup"
    }
}</pre>
==== Журналы ====
Список для копирования журналов {{path|PGSQL-Logs-set.conf}}:
<pre>FileSet {
  Name = "PGSQL-Logs-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
    }
    File = "/var/lib/pgsql/wals"
    }
}</pre>
==== Пул ====
Создадим отдельный пул для наших бекапов в каталоге {{path|/etc/bacula/pool.d}}:<br>
Файл {{path|zabbix.conf}}:
<pre>Pool {
  Name = Zabbix
  Pool Type = Backup
  Recycle = yes                     
  AutoPrune = yes                   
  Volume Retention = 365 days       
  LabelFormat = "zabbix"
}</pre>
==== Расписания ====
Создадим расписания для резервирования базы и журналов в каталоге {{path|/etc/bacula/schedule.d}}:<br>
Файл {{path|PGSQL-Full-Base-Cycle.conf}}:
<pre>Schedule {
  Name = "PGSQL-Full-Base-Cycle"
  Run = Full sun at 01:00 # задание будет выполнять полный бэкап каждое воскресенье в 01:00
}</pre>
файл {{path|PGSQL-Logs-Cycle.conf}}:
<pre>Schedule {
  Name = "PGSQL-Logs-Cycle"
  Run = Incremental mon-sat at 01:30 # задание будет выполнять инкрементальный бэкап каждый день с пн-сб в 01:30
}</pre>
==== Задачи ====
Создадим задачи резервного копирования в каталоге {{path|/etc/bacula/job.d}}:<br>
Задача резервного копирования базы {{path|zabbix-pgsql-base-fd.conf}}:
<pre>Job {
  Name = "zabbix-pgsql-base-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Full-Base-set"
  Accurate = no
  Pool = Zabbix
  Priority = 10 # приоритет выполнения задачи
  Schedule = "PGSQL-Full-Base-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи
}</pre>
Задача резервного копирования журналов {{path|zabbix-pgsql-logs-fd.conf}}:
<pre>Job {
  Name = "zabbix-pgsql-logs-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Logs-set"
  Accurate = no
  Pool = Zabbix
  Priority = 11 # приоритет ниже чем у задачи резервного копирования базы
  Schedule = "PGSQL-Logs-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи
}</pre>
Теперь необходимо перезапустить сервис Bacula Director:
<pre># systemctl restart bacula-dir</pre>


== Ссылки ==
== Ссылки ==

Версия от 12:07, 8 августа 2017

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

Первым делом стоит понять, что Bacula — сложный продукт, пригодный для множества ситуаций, но за это приходится платить существенным вложением времени в освоение базовых вещей и соответствующее конфигурирование (отведите хотя бы неделю на базовое освоение и планирование тестовой инсталяции).

Если требуется создавать простую резервную копию — возможно, достаточно просто tar, rsync или несложных систем вроде rdiff-backup или bontmia. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на bacula.

Дистрибутив

Существует бета-версия дистрибутива Bran Backup, созданная Станиславом Иевлевым (inger@) и Виталием Кузнецовым (vitty@). Она представляет собой удобный инсталятор Bacula на базе ALT Linux. Дистрибутивы для различных архитектур лежат здесь. В настоящее время статус этих версий: Бета

Планируемые доработки

  • Доработать branding
  • Реализовать возможность удобной настройки шифрования передаваемых данных и получившихся архивов
  • Реализовать возможность восстановления из архива

Подводные грабли

Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями. Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.

Базовая настройка 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

Для создания базы, привелегий и таблиц существуют скрипты:

# /usr/share/bacula/scripts/create_mysql_database
# /usr/share/bacula/scripts/grant_mysql_privileges
# /usr/share/bacula/scripts/make_mysql_tables

Задаим пароль для созданного пользователя bacula:

# mysql -u root -p
> use mysql;
> UPDATE user SET authentication_string=PASSWORD("Pa$$word") where User='bacula';
> flush privileges;
> quit;

Настройка 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 = "Specify password for catalog here" # Пароль пользователя базы данных
}
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов 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'"

Ссылки