Настройка Bacula 9 + Baculum 9 для PostgreSQL 9.6
Установка PostgreSQL
Установим PostgreSQL версии 9.6:
Для этого на сервере выполним команду:
# apt-get install postgresql9.6-server
# /etc/init.d/postgresql initdb(через systemctl postgresql initdb не работает)
Запустим сервис и добавим его в автозагрузку.
Запуск службы:
# service postgresql start
или
# systemctl start postgresql.service
Включение службы по умолчанию:
# chkconfig postgresql on
или
# systemctl enable postgresql
Настройка PostgreSQL
На сервере
На клиенте
В каталоге /etc/bacula создадим следующие скрипты:
pre-base-backup.sh:
#!/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}"
Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.
post-base-backup.sh:
#!/bin/bash
rm -f /var/lib/pgsql/backup/*
Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.
pre-logs-backup.sh:
#!/bin/bash
touch /var/lib/pgsql/backup_in_progress
Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы (copy_wal.sh)
post-logs-backup.sh:
#!/bin/bash
rm -f /var/lib/pgsql/wals/*
rm -f /var/lib/pgsql/backup_in_progress
Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов. Далее необходимо сделать эти скрипты исполняемыми:
# chmod 750 pre-base-backup.sh # chmod 750 post-logs-backup.sh # chmod 750 post-base-backup.sh # chmod 750 pre-logs-backup.sh
Установка Bacula
Установка на сервере:
# apt-get install bacula9-common bacula9-console bacula9-director-common bacula9-director-postgresql bacula9-storage mt-st
Установка на клиенте:
# apt-get install bacula9-client
Настройка базы данных PostgreSQL
В bacula присутствуют скрипты для создания базы, пользователя и таблиц.
Для того чтобы задать пароль для пользователя bacula необходимо отредактировать следующую строку в файле /usr/share/bacula/scripts/grant_mysql_privileges:
... db_password="DBPaSSword" ...
В противном случае пользователь создастся без пароля.
Создаём базу данных bacula и пользователя bacula:
$ /usr/share/bacula/scripts/create_postgresql_database -U postgres
Создаём таблицы базы данных:
$ /usr/share/bacula/scripts/make_postgresql_tables -U postgres
Установим права пользователя bacula:
$ /usr/share/bacula/scripts/grant_postgresql_privileges -U postgres
Настройка Director
За настройку Bacula Director отвечает файл /etc/bacula/bacula-dir.conf:
Director { # define myself 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 } # Generic catalog service Catalog { Name = MyCatalog # Имя каталога dbname = bacula # Имя базы данных user = bacula # Имя пользователя базы данных password = "" # Пароль пользователя базы данных(при выполнении скрипта по-умолчанию не задан) # # Restricted console used by tray-monitor to get the status of the director # #Console { # Name = localhost-mon # Password = "1" # Пароль входа в консоль # CommandACL = status, .status #} # Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d # Jobs @|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'" # File Sets @|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'" # Schedules @|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'" # Clients @|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'" # Storages @|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'" # Messages @|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'" # Pools @|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"
Установим пароль для доступа к Director в файле /etc/bacula/bacula-dir-password.conf:
Password = "1" # Пароль для доступа к Director
Настройка Storage
Конфигурационный файл хранилищ/etc/bacula/bacula-sd.conf:
# # Default Bacula Storage Daemon Configuration file # # For Bacula release 2.4.4 (28 December 2008) -- redhat # # You may need to change the name of your tape drive # on the "Archive Device" directive in the Device # resource. If you change the Name and/or the # "Media Type" in the Device resource, please ensure # that dird.conf has corresponding changes. # Storage { # definition of myself Name = sd # Имя хранилища SDPort = 9103 # Порт WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 } # # List Directors who are permitted to contact Storage daemon # Director { Name = dir # Имя director, который может подсоединяться к этому хранилищу @/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу } # # Restricted Director, used by tray-monitor to get the # status of the storage daemon # #Director { # Name = dir-mon # Password = "" # Monitor = yes #} @|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'" # Подключение конфигурационных файлов из каталога device.d # # Send all messages to the Director, # mount messages also are sent to the email address # Messages { Name = Standard director = dir = all }
Установим пароль для доступа к хранилищу в файле /etc/bacula/bacula-sd-password.conf:
Password = "1" # Пароль для доступа к хранилищу
В каталоге /etc/bacula/storage.d расположен файл описания типа хранилища file.conf
# Definition of file storage device Storage { Name = File # Имя # Do not use "localhost" here Address = 127.0.0.1 # адрес, где находится Director SDPort = 9103 # Порт @/etc/bacula/bacula-sd-password.conf # Файл с паролем доступа к хранилищу Device = FileStorage # Устройство Media Type = File # Тип устройства }
Настройка Bacula User Agent (Console)
Конфигурационный файл хранилищ/etc/bacula/bconsole.conf:
# # Bacula User Agent (or Console) Configuration File # Director { Name = dir DIRport = 9101 #Порт подключения к Director address = 127.0.0.1 # Адрес расположения Director @/etc/bacula/bacula-dir-password.conf # Пароль для подключения к Director }
Настройка Client
Конфигурационный файл клиента /etc/bacula/client.d/client1.conf:
# Client (File Services) to backup Client { Name = fd # Имя клиента Address = 127.0.0.1 # Адрес клиента FDPort = 9102 # Порт клиента Catalog = MyCatalog # Используемый каталог @/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту File Retention = 30 days # Срок хранения метаданных о файлах Job Retention = 6 months # Срок хранения метаданных о задачах AutoPrune = yes # Автоматическое удаление устаревших метаданных }
Установим пароль для доступа к клиенту в файле /etc/bacula/bacula-fd-password.conf:
Password = "1" # Пароль для доступа к клиенту
Настройка FileStorage
В каталоге /etc/bacula/device.d находится файл с описанием устройства:
Device { Name = FileStorage # Имя устройства Media Type = File # Тип устройства Archive Device = /home/backup # Каталог для хранения LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; }
Каталог /home/backup должнен существовать и принадлежать пользователю bacula:
# mkdir /home/backup # chown bacula:bacula /home/backup
Описание наборов файлов
В каталоге /etc/bacula/fileset.d находятся описания списков файлов для резервирования:
catalog.conf
# Описание резервирование дампа базы данных bacula FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = /var/lib/bacula/bacula.sql } }
catalog.conf
# Полный бэкап системы FileSet { Name = "Full Set" Include { Options { signature = MD5 } # # Put your list of files here, preceded by 'File =', one per line # or include an external list with: # # File = <file-name # # Note: / backs up everything on the root partition. # if you have other partitons such as /usr or /home # you will probably want to add them too. # # By default this is defined to point to the Bacula build # directory to give a reasonable FileSet to backup to # disk storage during initial testing. # File = /home/test } # # If you backup the root directory, the following two excluded # files can be useful # # Какие файлы не включать в бэкап Exclude { File = /proc File = /sys File = /dev File = /tmp File = /.journal File = /.fsck } }
Описание задач
В каталоге /etc/bacula/job.d находятся описания списков файлов для резервирования:
RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы)
на
RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup.pl MyCatalog" # Скрипт выполняемый до бэкапа (создает дамп базы)
backupcatalog.conf - Делает дамп базы и резервирует его:
# Backup the catalog database (after the nightly save) Job { Name = "BackupCatalog" # Имя JobDefs = "DefaultJob" # Используемый шаблон Level = Full FileSet="Catalog" # Используемый спикок для бэкапа Schedule = "WeeklyCycleAfterBackup" # Расписание резервирования # This creates an ASCII copy of the catalog RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы) # This deletes the copy of the catalog RunAfterJob = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы) Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # Файл для восстановления Priority = 11 # Приоритет выполнения - после бэкапа }
bacula.conf- делает полный бэкап:
# # Define the main nightly save backup job # By default, this job will back up to disk in @archivedir@ 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 - восстанавливает файлы:
# # Standard Restore template, to be changed by Console program # Only one such job is needed for all Jobs/Clients/Storage ... # Job { Name = "RestoreFiles"# Имя задачи Type = Restore # Тип Client=fd # Клиент на котором востанавливать файлы FileSet="Full Set" # Набор файлов Storage = File # Хранилище Pool = Default Messages = Standard Where = /tmp/bacula-restores # Каталог для восстановленных файлов }
Описание пулов
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.
Том это отдельная единица в которую ведется запись, может быть файлом или лентой.
В каталоге /etc/bacula/pool.d содержится:
default.conf - описывает пул по умолчанию:
- Default pool definition
Pool {
Name = Default # Имя Pool Type = Backup # Тип Recycle = yes # Разрешает перезапись тома AutoPrune = yes # Разрешает bacula очищать тома Volume Retention = 365 days # Время в течении которого bacula не будет очищать том LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)
}
Проверка конфигурационных файлов
Проверить корректность конфигурационных файлов bacula director можно так:
# bacula-dir -t -c /etc/bacula/bacula-dir.conf
Автозапуск сервиса
Запустим и добавим в автозапуск сервис:
# systemctl start bacula-dir # systemctl enable bacula-dir