|
|
Строка 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>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |