Используемые термины: Bareos , Rocky Linux , PostgreSQL .
В инструкции рассмотрим основные моменты по развертыванию системы резервного копирования на базе бесплатного программного продукта Bareos. В качестве операционной системы мы будем использовать Rocky Linux 8 / 9 (также протестировано на CentOS 7). Bareos поддерживает работу с базами данных PostgreSQL и MySQL — однако, в последней версии (на момент написания инструкции) установка была возможна только для первой.
Предварительная настройка
Установка и обновление пакетов
Настройка времени
Открытие нужных портов
Обновление корневых сертификатов
Настройка SELinux
Установка основных компонентов Bareos
Конфигурирование сервера баз данных
Настройка веб-интерфейса
Установка и запуск
Создание пользователя для доступа к веб-консоли
Настройка https
Конфигурирование агента на удаленную систему
Установка клиента
Регистрация агента на сервере
Работа с заданиями
Вводные данные по работе с задачами
Задание резервного копирования локальных файлов
Резервирование данных на удаленном сервере
Применение шаблона
Выполнение заданий по расписанию
Дополнительные опции при настройке заданий
Работа с уведомлениями
Отправка с локального хоста
Отправка через почтовый релей
Настройка задания для отправки оповещений
Использование Zulip для отправки уведомлений
Конфигурирование носителей для хранения резервных копий
Устройства хранения
Создание и настройка пулов
Настройка Director для связи с устройством хранения
Настройка задания для работы с устройствами хранения
Проверка настройки
Оптимизация настроек пула для оптимального хранения данных
Включение и настройка API
Шпаргалка по командам в bconsole
Удаление сервера резервного копирования
Примеры настройки заданий
База данных MySQL/MariaDB
База данных MySQL/MariaDB в docker
Анализ проблем и ошибок
Включение отладки для заданий
Примеры встречающихся ошибок и способы их решения
Выполним предварительные настройки.
Несмотря на то, что, начиная с версии 8 в CentOS и Rocky Linux используется пакетный менеджер dnf , мы будем использовать команду yum для обратной совместимости с CentOS 7.
Обновим список пакетов в репозиториях:
yum makecache
На свежеустановленной системе также рекомендуется выполнить обновление пакетов:
yum update
Установим пакет:
yum install wget
* данный пакет позволяет загружать файлы по протоколам http и ftp.
Для корректного отображения времени создания резервных копий и работы расписания, настроим часовой пояс и синхронизацию времени.
Установим сервис, запустим его и разрешим автозапуск:
yum install chrony
systemctl enable chronyd —now
Для настройки часового пояса вводим:
timedatectl set-timezone Europe/Moscow
Нам нужно разрешить следующие порты:
Выполняем команды:
firewall-cmd —permanent —add-port={80,443}/tcp
firewall-cmd —permanent —add-port={9101,9102,9103}/tcp
firewall-cmd —reload
Репозиторий Bareos работает по https с сертификатом от Let’s Encrypt. Если наши корневые сертификаты будут неактуальны, мы получим ошибку Issued certificate has expired .
Нам нужно выполнить две команды:
yum install ca-certificates
update-ca-trust
Подробнее процесс описан в инструкции Обновление корневых сертификатов на Linux .
Проще всего, отключить SELinux . Но, если мы хотим его оставить, включаем политику:
setsebool -P httpd_can_network_connect on
* данное правило разрешает httpd-сервису и веб-скриптам подключение по сети.
Установка выполняется из репозитория. Однако, его нет в базовых репозиториях, поэтому сначала, выполним дополнительные действия.
На странице официального сайта мы должны ознакомиться с поддерживаемыми дистрибутивами. Для удобства работы, создаем переменную:
DIST=EL_9
* в нашем примере мы будем устанавливать программный продукт для группы релизов EL_9 (RedHat-base версии 9).
Установим репозиторий командой:
wget https://download.bareos.org/current/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${DIST}.repo
* данной командой мы скачаем готовые настройки репозитория в локальный каталог /etc/yum.repos.d .
Можно устанавливать bareos:
yum install bareos bareos-database-postgresql
* мы установим сам пакет bareos и набор файлов для его работы с postgresql .
На все запросы принять GPG key отвечаем утвердительно:
Is this ok [y/N]: y
Установка завершена. Разрешим автозапуск следующих сервисов:
systemctl enable bareos-dir bareos-fd bareos-sd
На момент обновления инструкции в последней версии BAREOS была прекращена поддержка базы MySQL/MariaDB — осталась только postgresql. Выполним установку его серверной части:
yum install postgresql-server postgresql-contrib
Проинициализируем базу:
postgresql-setup initdb
Разрешим автозапуск и запустим сервис:
systemctl enable postgresql —now
Выполним скрипты для подготовки базы данных, которые шли в комплекте с установленным пакетом bareos-database-postgresql:
su — postgres -c /usr/lib/bareos/scripts/create_bareos_database
Мы должны увидеть результат:
Creating postgresql database
CREATE DATABASE
ALTER DATABASE
Database encoding OK
Creating of bareos database succeeded.
su — postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su — postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
* в соответствии с названиями скриптов, первый создает базу, второй создает таблицы и третий — настраивает привилегии для созданных объектов.
Стартуем сервисы:
systemctl start bareos-dir bareos-fd bareos-sd
Посмотрим состояние командой:
systemctl status bareos-dir bareos-fd bareos-sd
Разобьем процесс на несколько этапов.
Устанавливаем компонент для обеспечения веб-интерфейса:
yum install bareos-webui
Откроем файл:
vi /etc/php.ini
Добавим строку:
date.timezone = «Europe/Moscow»
* где Europe/Moscow — часовой пояс, который нужно заменить на нужный вам.
Запускаем веб-сервер:
systemctl enable httpd —now
Перезапускаем компонент Director:
systemctl restart bareos-dir
Открываем браузер и переходим по адресу http://<IP-адрес сервера> — мы должны увидеть стартовую страницу Apache:
Веб-сервер работает. Идем дальше.
Создаем учетную запись для доступа к UI. Для этого входим в консоль управления bareos:
bconsole
И вводим команду:
* configure add console name=admin password=my_password profile=webui-admin tlsenable=no
* где:
Мы должны увидеть:
Created resource config file «/etc/bareos/bareos-dir.d/console/admin.conf»:
Console {
Name = «admin»
Password = «my_password»
Profile = webui-admin
TlsEnable = no
}
Перезапускаем bareos и выходим из консоли:
* reload
* exit
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/bareos-webui/ — мы должны увидеть окно авторизации. Вводим наши логин и пароль:
Мы должны попасть на страницу со панели управления.
Стоит отметить, что мы могли обойтись и без командной оболочки bconsole — нужно создать файл /etc/bareos/bareos-dir.d/console/admin.conf с нужными значениями и перезапустить bareos.
Хорошей идеей будет настройка доступа к веб-интерфейсу по защищенному протоколу https. Для этого нам нужно:
В рамках данной инструкции, мы не будем рассматривать подробно каждый из пунктов.
Домен можно зарегистрировать на внутреннем DNS. Для большинства компаний это самый актуальный вариант. Если наш сервер должен быть доступен из глобальной сети, то можно использовать глобальный DNS для нашего домена. Ну и самый быстрый вариант, прописать hostname в локальный файл hosts, с которого мы будем заходить на сервер. Предположим, что наш сервер резервного копирования должен быть доступен по имени bareos.remontka.com .
Получить сертификат можно тоже несколькими способами:
Предположим, что наш сертификат получен и его файлы размещены в каталогах /etc/pki/tls/certs . и /etc/pki/tls/certs .
Подробнее, процесс описан в инструкции Настройка Apache + SSL для работы сайта по HTTPS . Мы рассмотрим настройку кратко.
Устанавливаем модуль работы по SSL:
yum install mod_ssl
Открываем файл:
vi /etc/httpd/conf.d/ssl.conf
Находим опции и приводим их к виду:
SSLCertificateFile /etc/pki/tls/certs/bareos.crt
…
SSLCertificateKeyFile /etc/pki/tls/private/bareos.key
…
SSLCertificateChainFile /etc/pki/tls/certs/bareos-chain.crt
* где SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей с нашим сертификатом. SSLCertificateChainFile — при необходимости, путь до цепочки сертификатов (нужно использовать, если внутри файла SSLCertificateFile нет информации о всех сертификационных центрах).
Проверяем корректность настроек в Apache:
apachectl configtest
Если видим:
Syntax OK
Перечитываем конфигурацию apache:
apachectl graceful
Открываем браузер и переходим по адресу https://bareos.remontka.com/bareos-webui/ , где bareos.remontka.com — имя хоста, для которого мы получили сертификат. Мы должны подключиться к веб-интерфейсу по защищенному соединению.
Рассмотрим процесс подключения клиентов, которые работают под управлением Linux Ubuntu и CentOS. Узнать тип и версию системы можно командой:
cat /etc/os-release
Также как с сервером, на странице официального сайта мы должны ознакомиться с поддерживаемыми дистрибутивами. После чего создаем переменную. В зависимости от дистрибутива операционной системы, наши действия будут отличаться.
Задаем переменную с названием дистрибутива, который мы нашли на сайте:
DIST=xUbuntu_22.04
* для Ubuntu версии 22.04.
Скачиваем настройки для репозитория:
wget https://download.bareos.org/current/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${DIST}.list
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для шифровки и дешифровки цифровых подписей:
apt install gnupg2
Устанавливаем ключ подписи пакетов в репозитории:
wget -q https://download.bareos.org/current/${DIST}/Release.key -O- | apt-key add —
Обновляем список пакетов:
apt update
Устанавливаем пакет для bareos-fd:
apt install bareos-filedaemon
Разрешаем автозапуск сервиса:
systemctl enable bareos-filedaemon
Настраиваем брандмауэр (открываем порт 9102/tcp):
iptables -I INPUT -p tcp —dport 9102 -j ACCEPT
apt-get install iptables-persistent
netfilter-persistent save
Задаем переменные:
DIST=EL_9
* для CentOS или Rocky версии 9.
Скачиваем настройки для репозитория:
wget https://download.bareos.org/current/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${DIST}.repo
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для bareos-fd:
yum install bareos-fd
На все запросы принять ключ отвечаем утвердительно.
Разрешаем автозапуск сервиса и стартуем его:
systemctl enable bareos-fd —now
Настраиваем брандмауэр (открываем порт 9102/tcp):
firewall-cmd —permanent —add-port=9102/tcp
firewall-cmd —reload
Подключаемся к серверу и заходим в консоль bareos:
bconsole
И добавляем нового клиента:
* configure add client name=client_name address=192.168.0.22 password=client_password
* где client_name — произвольное имя, по которому нам будет удобно идентифицировать клиента; 192.168.0.22 — IP-адрес компьютера-клиента; client_password — пароль, который нужно будет использовать данному клиенту для подключения к серверу.
Если у нас есть необходимость подключить клиента по нестандартному порту (не 9102), то указываем его в опции port :
* configure add client name=client_name address=192.168.0.22 port=9103 password=client_password
Мы получим вывод на подобие:
Exported resource file «/etc/bareos/bareos-dir-export/client/client_name/bareos-fd.d/director/bareos-dir.conf»:
Director {
Name = bareos-dir
Password = «[md5]23ea8b731947b6aff12b13c98bca39ae»
}
Created resource config file «/etc/bareos/bareos-dir.d/client/client_name.conf»:
Client {
Name = «client_name»
Address = «192.168.0.22»
Password = «client_password»
}
You have messages.
Для нас теперь важно содержимое для экспорта, которое в нашем примере имеет вид:
Director {
Name = bareos-dir
Password = «[md5]23ea8b731947b6aff12b13c98bca39ae»
}
Перезапускаем сервис директора и выходим из консоли:
* reload
* exit
Переходим в консоль клиента, открываем файл:
vi /etc/bareos/bareos-fd.d/director/bareos-dir.conf
И меняем содержимое на то, что мы получили на стороне сервера:
Director {
Name = bareos-dir
Password = «[md5]23ea8b731947b6aff12b13c98bca39ae»
}
На клиенте перезапускаем файловую службу. Команды немного отличаются в зависимости от дистрибутива системы.
а) на Ubuntu:
systemctl restart bareos-filedaemon
б) на CentOS:
systemctl restart bareos-fd
Заходим на веб-интерфейс в раздел «Клиенты» — мы должны увидеть добавленных клиентов:
* нас не должно смущать отсутствие значков и версий для клиентов — они появятся после выполнения первых заданий на них.
Bareos предлагает довольно большое количество настроек для создания заданий. Это могут быть задачи резервного копирования, восстановления, проверки. Также задачи могут подразделяться, например, для резервного копирования — полный бэкап, дифференциальный, инкрементальный. Мы можем настраивать полноценные задания или применять шаблоны. Попробуем в этом всем разобраться пошагово.
Опишем общие моменты для наших заданий.
Мы будем работать в каталогах:
Уровни резервирования и восстановления:
Типы заданий:
Синтаксис для расписаний:
Момент выполнения | Описание | Варианты |
---|---|---|
<week-keyword> | Неделя месяца | 1st | 2nd | 3rd | 4th | 5th | first | second | third | fourth | fifth | last |
<wday-keyword> | День недели | sun | mon | tue | wed | thu | fri | sat | sunday | monday | tuesday | wednesday | thursday | friday | saturday |
<week-of-year-keyword> | Неделя года | w00 | w01 | … w52 | w53 |
<month-keyword> | Месяц | jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec | january | february | … | december |
<12hour> | Время в формате 12am/pm | 0 | 1 | 2 | … 12 |
<hour> | Время в формате 24 | 0 | 1 | 2 | … 23 |
<minute> | Минуты | 0 | 1 | 2 | … 59 |
<day> | Дни месяца | 1 | 2 | … 31 |
<time> | Время | <hour>:<minute> | <12hour>:<minute>am | <12hour>:<minute>pm |
<time-spec> | Указать на время выполнения | at <time> | hourly |
<day-range> | Диапазон дней | <day>-<day> |
<month-range> | Диапазон месяцев | <month-keyword>-<month-keyword> |
<wday-range> | Диапазон дней недели | <wday-keyword>-<wday-keyword> |
<modulo> | Чет, нечет | <day>/<day> | <week-of-year-keyword>/<week-of-year-keyword> |
<date> | Дата | <date-keyword> | <day> | <range> |
<day-spec> | Варианты для указания дней недели | <day> | <wday-keyword> | <day> | <wday-range> | <week-keyword> <wday-keyword> | <week-keyword> <wday-range> | daily |
<month-spec> | Варианты для указания месяцев | <month-keyword> | <month-range> | monthly |
* примеры взяты с официального сайта.
Для начала создадим задание резервного копирования некоторых файлов нашего сервера, которое нужно запускать вручную.
Создаем файл с описанием задания:
vi /etc/bareos/bareos-dir.d/job/FirstJob.conf
Job {
Name = «FirstJob»
Client = «bareos-fd»
Description = «Job Backup»
Level = Full
Storage = File
Pool = Full
Type = Backup
FileSet = «FirstFileset»
Messages = Standard
Priority = 5
}
* где:
Теперь создадим файл со списком объектов для резервирования:
vi /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf
FileSet {
Name = «FirstFileset»
Description = «Backup files»
Include {
Options {
Signature = MD5
}
File = «/tmp»
}
}
* где:
Попробуем создать тестовый файл:
echo «test» > /tmp/backup_test_file
Открываем консоль bareos:
bconsole
Перезапускаем конфигурацию (чтобы применить наши настройки):
* reload
Запустим наше первое задание:
* run job=FirstJob
Система покажет сводную информацию и задаст вопрос, запустить ли задание — отвечаем утвердительно:
OK to run? (yes/mod/no): yes
Задание будет помещено в очередь:
Job queued. JobId=8
В веб-интерфейсе на вкладке «Задания» мы должны увидеть информацию об успешно выполненном задании:
Выходим из консоли
* exit
Попробуем удалить наш тестовый файл:
rm -f /tmp/backup_test_file
Заходим на веб-интерфейс — переходим на вкладку «Восстановление» — выбираем клиента и задание резервного копирования — справа в нее появится список файлов, которые попали в резервную копию — выбираем наш тестовый файл:
Пропишем путь до каталога, куда нужно восстановить файл и нажимаем Восстановление :
* в каталог /tmp будет восстановлен файл /tmp/backup_test_file . Полный путь будет /tmp/tmp/backup_test_file .
В списке заданий дожидаемся успешного выполнения и проверяем, что в каталоге /tmp/tmp появился нужный нам файл.
Наши действия будут похожими на задание 1. Нам только нужно указать другого агента. Для начала, сделаем копии наших конфигурационных файлов:
cp /etc/bareos/bareos-dir.d/job/FirstJob.conf /etc/bareos/bareos-dir.d/job/SecondJob.conf
cp /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
Отредактируем файлы:
vi /etc/bareos/bareos-dir.d/job/SecondJob.conf
Меняем значение для:
Name = «SecondJob»
Client = «ubuntu»
…
FileSet = «SecondFileset»
* в нашем примере резервная копия будет делаться для клиента ubuntu , а также меняем набор файлов на SecondFileset .
Теперь открываем файл:
vi /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
И изменим набор файлов на:
Name = «SecondFileset»
…
…
File = «/tmp»
File = «/etc»
* обратите внимание, в данном примере мы перечислили 2 цели для бэкапа — каталоги /tmp и /etc .
Для проверки задания заходим в консоль, применяем настройки, запускаем задание:
bconsole
* reload
* run job=SecondJob
… и находим статус выполнения в веб-интерфейсе.
Попытка восстановления была рассмотрена в примере 1 — по аналогии можно попробовать вернуть некоторые файлы.
Усложним задачу — настроим шаблоны для более удобного управления заданиями.
По настройкам шаблоны ничем не отличаются от обычных заданий — они просто объединяют в себе нужные опции, чтобы не нужно было их повторять при описании заданий. Поняв это, работать с ними будет просто. Давайте приведем пример.
Создадим файл:
vi /etc/bareos/bareos-dir.d/jobdefs/DefThirdJob.conf
JobDefs {
Name = «DefThirdJob»
Description = «Job Definition Backup»
Level = Full
Storage = File
Pool = Full
Type = Backup
FileSet = «SettingsFileset»
Messages = Standard
Priority = 10
}
* как видим, все эти настройки мы уже использовали, когда создавали первую задачу.
В шаблоне мы используем набор файлов SettingsFileset — создадим его:
vi /etc/bareos/bareos-dir.d/fileset/SettingsFileset.conf
FileSet {
Name = «SettingsFileset»
Description = «Backup of Setting files»
Include {
Options {
Signature = MD5
Compression = LZ4
}
File = «/etc»
}
}
* мы добавили опцию Compression — позволяет архивировать наши файлы. Возможны варианты LZ4 и GZIP.
Теперь можно создать файл с заданием:
vi /etc/bareos/bareos-dir.d/job/ThirdJob.conf
Job {
Name = «ThirdJob»
Client = «CentOS»
Description = «Job Backup»
JobDefs = «DefThirdJob»
}
* наше задание будет привязано к шаблону DefThirdJob и выполняться для клиента CentOS .
Готово — запускаем:
bconsole
* reload
* run job=ThirdJob
… и находим статус выполнения в веб-интерфейсе.
Теперь сделаем так, чтобы наша задача выполнялась по расписанию.
Создаем файл:
vi /etc/bareos/bareos-dir.d/schedule/EveryDay.conf
Schedule {
Name = «EveryDay»
Run = daily at 21:00
Run = daily at 07:00
}
* наше задание должно выполняться ежедневно 2 раза — в 7 утра и 9 вечера.
Привязать задачу к расписанию можно в файле самого задания или в его шаблоне:
Schedule = «EveryDay»
Перезапустим сервис:
systemctl reload bareos-dir
* обратите внимание, что в этом примере мы решили перезапустить конфигурацию без консоли bconsole.
Переходим в веб-интерфейсе на вкладку «Расписания» — мы должны увидеть наше задание:
Рассмотрим некоторые дополнительные полезные опции.
Мы можем выполнить определенные команды до или после выполнения задания. Существует 2 метода настройки — полностью на стороне Bareos или запуск скрипта на агенте.
а) Запуск скрипта. Данные способ удобнее, если на удаленной системе есть готовый скрипт или требуется сложная логика выполнения, которую не описать одной командой и нужен скрипт.
Настраиваем в шаблоне или задании:
Run Before Job = ‘/path/to/script.sh’
Run After Job = ‘/path/to/script.sh’
* запустить скрипт на сервере соответственно до и после выполнения задания.
Client Run Before Job = ‘/path/to/script.sh’
Client Run After Job = ‘/path/to/script.sh’
* запустить скрипт на клиенте соответственно до и после выполнения задания.
Важно отметить, что данная директива требует в качестве значения использовать только путь до исполняемого скрипта и не передает параметров.
б) Команда при описании задания. Данным способом мы создаем дополнительную директиву RunScript при описании шаблона или задания. Это удобнее, если мы хотим полностью контролировать процесс на стороне сервера.
Например:
Job {
…
RunScript {
FailJobOnError = Yes
RunsOnClient = Yes
RunsWhen = Before
Command = «su postgres -c ‘pg_dumpall > /var/tmp/postgresql_dump.sql'»
}
RunScript {
RunsOnSuccess = Yes
RunsOnClient = Yes
RunsWhen = After
Command = «/var/tmp/postgresql_dump.sql»
}
…
}
* где:
Не забываем:
systemctl reload bareos-dir
Отправка сообщений на почту выполняется с помощью клиента bsmtp — проприетарной консольной программы. Она принимает параметры подключения к почтовому серверу, но по умолчанию, пытается отправлять письма от локального сервера. Мы рассмотрим вариант с отправкой с сервера bareos и использовании стороннего почтового сервера. Подробнее с вариантами настройки можно ознакомиться на официальном сайте .
Для возможности выполнять отправку, устанавливаем MTA, например, Postfix:
yum install postfix
Открываем конфигурационный файл:
vi /etc/postfix/main.cf
Меняем значения для следующих опций:
inet_interfaces = all
…
inet_protocols = ipv4
* однако, если мы используем IPv6, то менять значение для опции inet_protocols не нужно.
После внесения настроек разрешаем автозапуск Postfix и стартуем его:
systemctl enable postfix —now
Базовая настройка готова и сообщения могут отправляться. В настройках задания или шаблона мы можем определять адрес почтового ящика, куда нужно отправлять письма:
Write Bootstrap = «|/usr/bin/bsmtp -h localhost -f \»\(Bareos\) \» -s \»Bootstrap for Job %j\» master@remontka.com»
* в данном примере отправка будет выполнена на ящик master@remontka.com .
После правки конфигурационного файла не забываем перезапустить сервис:
systemctl reload bareos-dir
Для корректной отправки почтовых сообщений нужно правильно настроить обратный адрес и домен отправки. Подробнее можно прочитать в инструкции Настройка почтового сервера для массовой рассылки сообщений .
Команда bsmtp принимает параметры, в том числе те, с помощью которых мы укажем сторонний сервер. В настройках задания или шаблона мы можем определить ее поведение:
Write Bootstrap = «|/usr/bin/bsmtp -h mail.remontka.local -f \»\(Bareos\) \» -s \»Bootstrap for Job %j\» master@remontka.com»
* в данном примере отправка будет выполнена через сервер mail.remontka.local .
Утилита bsmtp не умеет проходить аутентификацию. Поэтому, если наш почтовый сервер требует проверку подлинности, нам не удастся ее использовать. Потребуется более сложная схема с использованием MTA. Пример такой настройки можно прочитать в инструкции Отправка почты от Postfix через почтовый сервер Яндекса . Также можно просто использовать утилиту командной строки — подробнее в инструкции Отправка почты из командной строки Linux .
По умолчанию, нам будут приходить все сообщения, что может быть не совсем удобно для повседневного использования системы. Мы можем создать основные настройки для оповещений в каталоге /etc/bareos/bareos-dir.d/messages . Откроем на редактирование новый файл:
vi /etc/bareos/bareos-dir.d/messages/Alarms.conf
Messages {
Name = Alarms
Description = «Message delivery for fail jobs»
mailcommand = «/usr/bin/bsmtp -h localhost -f \»\(Bareos\) \<%r\>\» -s \»Bareos alarm message\» %r»
mail = master@remontka.com = error, fatal, terminate, notsaved
console = alert, !skipped
}
* в данном типе оповещений под названием Alarms мы определили адрес получателя письма, а также типы событий, на которые нужно реагировать. Обратите внимание, что для консоли мы используем все события категории alert , за исключением skipped .
Теперь в нашем шаблоне или задании мы можем использовать данный тип сообщения:
Messages = Alarms
И не забываем перезапускать демон bareos-dir :
systemctl reload bareos-dir
В качестве примера также рассмотрим отправку уведомлений в Zulip . Для этого мы установим на наш сервер резервного копирования утилиту zulip-send и создадим новый профиль для отправки сообщений.
Вышеупомянутая утилита zulip-send является расширением для Python. Для его установки сначала ставим менеджер pip:
yum install python3-pip
Теперь установим расширение:
pip3 install zulip
Если в ходе установки мы получили ошибку, попробуем обновить pip:
pip3 install —upgrade pip
Создаем файл:
vi ~/.zuliprc
[api]
key=a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
email=bot_name@zulip.remontka.com
site=https://zulip.remontka.com
* где:
Попробуем выполнить тестовую отправку:
/usr/local/bin/zulip-send postmaster@remontka.com —message ‘Test Message’
* где postmaster@remontka.com — адрес учетной записи, а zulip, на который будет отправлено сообщение.
Мы должны получить сообщение в наш чат.
Теперь копируем файл .zuliprc в домашнюю директорию пользователя bareos:
cp ~/.zuliprc /var/lib/bareos/
Создаем профиль для отправки сообщений:
vi /etc/bareos/bareos-dir.d/messages/Zulip.conf
Messages {
Name = ZulipAlarms
Description = «Message delivery for fail jobs over Zulip Chat»
mailcommand = «/usr/local/bin/zulip-send %r —message ‘The job with id %i has been failed with code %e.'»
mail = postmaster@remontka.com = error, fatal, terminate, notsaved
console = alert, !skipped
}
Для отправки сообщения на канал используем команду:
mailcommand = «/usr/local/bin/zulip-send —stream %r —subject ‘Bareos’ —message ‘The job with id %i has been failed with code %e.'»
Также нужно поменять адресата на название канала:
mail = admins = …
* в данном примере мы будем отправлять сообщения только на события с ошибками; отправка будет осуществляться на аккаунт zulip с адресом postmaster@remontka.com .
** для отправки сообщений мы можем задействовать следующие переменные:
В задание или шаблоне указываем, что для отправки сообщений должен использоваться ZulipAlarms:
Messages = ZulipAlarms
Перезапускаем bareos-dir:
systemctl reload bareos-dir
По умолчанию, при установке Bareos в качестве хранилища для резервных копий используется свободное пространство корневой директории (а именно, каталог /var/lib/bareos/storage ).
С точки зрения абстракции:
Рассмотрим пример использования дополнительного раздела для размещения сохраненной информации.
Данная настройка затрагивает сервис Storage Daemon.
Добавим новое устройство:
vi /etc/bareos/bareos-sd.d/device/NewStorage.conf
Device {
Name = NewFileStorage
Media Type = File
Archive Device = /backups
LabelMedia = yes
Random Access = yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Description = «New File device. A connecting Director must have the same Name and MediaType.»
}
* где:
Создаем каталог, который мы указали в качестве Archive Device :
mkdir /backups
И назначаем в качестве владельца пользователя bareos:
chown bareos:bareos /backups
Чтобы применить настройку, перезапускаем демон для работы с носителями:
systemctl restart bareos-sd
Теперь добавим, для примера, новый пул:
vi /etc/bareos/bareos-dir.d/pool/FullNew.conf
Pool {
Name = FullNew
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 180 days
Maximum Volume Bytes = 10G
Maximum Volumes = 15
Label Format = «FullNew-»
}
* где:
По умолчанию, при установке bareos создается 4 пула:
Мы можем использовать их, оставив значения опций или отредактировав их на нужные.
За устройства хранения и контроль резервного копирования отвечают разные роли Bareos, а значит нам нужно настроить привязку.
Создаем новый файл:
vi /etc/bareos/bareos-dir.d/storage/FileNew.conf
Storage {
Name = NewStorage
Address = bareos.remontka.com
Password = «hKENa9DPmJUBYKJbKN90vkwvmo72OomuYBoufpmfqFfD»
Device = NewFileStorage
Media Type = File
}
* где:
Указать использование пулов и устройства хранения можно в конфигурационном файле задания или шаблона:
Storage = NewStorage
Pool = FullNew
* где NewFileStorage и FullNew , соответственно, созданные нами устройство хранения и пул на сервисе Director.
Обратите внимание, что Storage и Pool независимы. Storage, по сути, определит место расположения данных, Pool — правила хранения.
После внесения необходимых изменений необходимо перезапустить службу Bareos Director:
systemctl reload bareos-dir
В веб-интерфейсе на странице Хранение мы должны увидеть наше новое устройство:
Теперь можно попробовать запустить наше задание, которое должно хранить данные на новом устройстве. В нашем примере, это каталог /backups — проверим, что там появился том нового пула:
ls /backups
Мы должны увидеть что-то на подобие:
FullNew-0004
По умолчанию, настройка пула выполнена таким образом, что наше хранилище очень легко может заполнить все дисковое пространство сервера или может закончится выделенное число пулов для резервного копирования.
Нам необходимо настроить пулы. Как правило, настраивать нужно пул Full, так как больше всего пространства занимает он:
vi /etc/bareos/bareos-dir.d/pool/Full.conf
Для начала обращаем внимание на две опции:
Volume Retention = 365 days
Maximum Volume Bytes = 50G
Maximum Volumes = 100
* где:
Необходимо выполнить самостоятельно расчет, сколько данных может уместится на нашем носителе. Например, если у нас носитель на 4 Тб., то пул может занять 50G * 100 = 5 Тб. Значит нам нужно уменьшить либо количество файлов, либо их объем.
Второй, нам нужно добавить данные строки:
Recycle Current Volume = yes
Purge Oldest Volume = yes
Auto Prune = yes
* где:
Рассмотрим инструкцию по развертыванию Rest API в Bareos. Для его корректной работы необходимо установить python версии 3.8 и выше. На момент обновления инструкции актуальной версией была 3.9:
yum install python39
После устанавливаем приложение python:
/usr/bin/pip3.9 install bareos-restapi
Отредактируем скрипт запуска:
vi /usr/local/bin/uvicorn
Первую строчку меняем на:
#!/usr/bin/python3.9
* где python3.9 — установленная версия python.
Переходим в каталог с bareos_restapi:
cd /usr/local/lib/python3.9/site-packages/bareos_restapi
* опять же, 3.9 — версия python.
Сгенерируем секрет:
openssl rand -hex 32
Мы получим строку на 64 символа, например:
7f38df2a6688d099b0ebc9539053b28fcf06f1436e69e52152816f6c334db100
* сохраняем данную строку, которую будем использовать в качестве секрета.
Создаем конфигурационный файл:
vi api.ini
[Director]
Name=bareos-dir
Address=127.0.0.1
Port=9101
[JWT]
secret_key = 7f38df2a6688d099b0ebc9539053b28fcf06f1436e69e52152816f6c334db100
algorithm = HS256
access_token_expire_minutes = 30
* где для нас важны следующие параметры:
По умолчанию, сервис работает на порту 8000 — необходимо его открыть в брандмауэре:
firewall-cmd —permanent —add-port=8000/tcp
firewall-cmd —reload
Запустим наш веб-сервер с Rest API:
uvicorn bareos_restapi:app —host 0.0.0.0 —reload
Если мы хотим запустить API на https, добавляем опции —ssl-keyfile и —ssl-certfile , например:
uvicorn bareos_restapi:app —host 0.0.0.0 —ssl-keyfile /etc/pki/tls/private/bareos.key —ssl-certfile /etc/pki/tls/certs/bareos.crt —reload
* в данном примере мы запустим сервис, который будет слушать на всех портах.
Открываем браузер и переходим по адресу http://<IP-адрес сервера>:8000/docs — мы должны увидеть страницу с инструкцией по использованию API для Bareos.
Прервем работу сервиса комбинацией Ctrl + С , и выполним настройку автозапуска Rest API. Для этого создаем файл:
vi /etc/systemd/system/uvicorn.service
[Unit]
Description=Uvicorn Bareos Rest API Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/usr/local/lib/python3.9/site-packages/bareos_restapi
ExecStart=/usr/local/bin/uvicorn bareos_restapi:app —host 0.0.0.0 —reload
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
* где 3.9 — версия python.
Перечитываем конфигурацию systemd:
systemctl daemon-reload
Разрешаем автозапуск нашего сервиса и стартуем его:
systemctl enable uvicorn —now
Посмотреть статус можно командой:
systemctl status uvicorn
Рассмотрим некоторые полезные команды консоли bconsole.
1. Работа с клиентами.
Посмотреть список зарегистрированных агентов:
* list clients
Увидеть статусы клиентов:
* status client
Мы получим список клиентов и должны будем выбрать номер того, для которого хотим узнать статус:
The defined Client resources are:
1: bareos-fd
2: CentOS
3: ubuntuSelect Client (File daemon) resource (1-3): 2
Отключить клиента:
* disable client client_name
* где client_name — имя для нашего клиента, зарегистрированного в системе.
Включить отключенного клиента:
* enable client client_name
2. Работа с задачами.
Показать список заданий:
* list jobs
Запустить на выполнение созданную задачу:
* run job=job_name
* где job_name — имя задачи.
Показать запланированные задания:
* status dir
Если нам нужно уделить сервер резервного копирования, выполним необходимые действия.
Описанные в данном разделе операции приведут к полному удалению программного продукта и файлов с резервными копиями.
Останавливаем сервисы и запрещаем их автозапуск:
systemctl disable bareos-dir bareos-fd bareos-sd
systemctl stop bareos-dir bareos-fd bareos-sd
Для удаления bareos выполняем команду:
yum remove bareos-*
Для удаления томов на устройстве хранения по умолчанию вводим:
rm -rf /var/lib/bareos
Удаляем каталоги с конфигурационными файлами и логами:
rm -rf /etc/bareos /var/log/bareos
Удаляем конфигурационные файлы для юнитов systemd:
rm -f /etc/systemd/system/bareos-*
rm -f /etc/systemd/system/multi-user.target.wants/bareos-*
Удалим репозиторий и почистим кэш для yum:
rm -f /etc/yum.repos.d/bareos*
yum clean all
В данном разделе мы рассмотрим конкретные примеры для резервирования сервисов. Без описания подробностей и без разделения на задание и шаблон. По возможности, будут указываться ссылки на документацию.
В официальном источнике предлагается использовать 2 способа:
Мы воспользуемся вторым способом: он, довольно, понятный и не потребует установки дополнительных пакетов.
Пример задания:
Job {
Name = «MySQLBackup»
Client = server
Level = Full
FileSet=»MySQLFileSet»
RunScript {
FailJobOnError = Yes
RunsOnClient = Yes
RunsWhen = Before
Command = «sh -c ‘mysqldump -ubackup -ppassword dbname | gzip > /var/lib/bareos/mysql_dump.sql.gz'»
}
RunScript {
RunsOnSuccess = Yes
RunsOnClient = Yes
RunsWhen = After
Command = «rm /var/lib/bareos/mysql_dump.sql.gz»
}
}
Пример файлсета:
FileSet {
Name = «MySQLFileSet»
Include {
Options {
signature = MD5
compression = gzip
}
File = «/var/lib/bareos/mysql_dump.sql.gz»
}
}
В целом, задача похожа, но предположим, что мы хотим сделать дамп из хостовой системы, подключившись к базе данных удаленно.
На стороне агента создаем скрипт:
vi /scripts/bareos_backup_mariadb_before.sh
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
docker_mysql_ip=`docker inspect -f «{{ range.NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}» container_name_mariadb`
mysqldump -h${docker_mysql_ip} dbname | gzip > /var/lib/bareos/mysql_dump.sql.gz
Также на стороне клиента создадим:
vi /root/.my.cnf
[mysqldump]
user=backup
password=»password»
* где user и password — логин и пароль для подключения к базе с целью создания дампа.
Задание bareos:
Job {
Name = «MySQLBackup»
Client = server
FileSet=»MySQLFileSet»
Client Run Before Job = ‘/scripts/bareos_backup_mariadb_before.sh’
RunScript {
RunsOnSuccess = Yes
RunsOnClient = Yes
RunsWhen = After
Command = «rm -f /var/lib/bareos/mysql_dump.sql.gz»
}
…
}
Файлсет:
FileSet {
Name = «MySQLFileSet»
Include {
Options {
signature = MD5
compression = gzip
}
File = «/var/lib/bareos/mysql_dump.sql.gz»
}
}
Для резервного копирования очень важно уметь отслеживать и устранять ошибки. Мы рассмотрим процесс дебага при выполнении заданий, а также пример ошибок при настройке и эксплуатации сервера.
В консоли веб-интерфейса, а также логах сервера мы не сможем найти достаточно информации об ошибках, которые возникают в ходе выполнения заданий.
Чтобы получить нужную для процесса отслеживания ошибок информацию, мы должны включить трейс для клиента. Это делается в консоли bconsole, например:
* setdebug client=client_name level=200 trace=1
* в данном примере мы запустим логирование на клиенте client_name с уровнем детализации 200 .
В ответ мы получим что-то на подобие:
2000 OK setdebug=200 trace=1 hangup=0 timestamp=0 tracefile=/var/lib/bareos/client_name-fd.trace
Готово, теперь на агенте в файл /var/lib/bareos/client_name-fd.trace будет записываться отладочная информация. Посмотреть ее можно командой:
tail -f /var/lib/bareos/client_name-fd.trace
После отладки и устранения проблемы, не забываем выключить режим дебага:
* setdebug client=client_name level=0 trace=0
А также на клиенте можно удалить файл с логами:
rm -f /var/lib/bareos/client_name-fd.trace
Рассмотрим примеры ошибок, с которыми столкнулся я.
Ошибка появляется при попытке создать учетную запись для доступа к веб-интерфейсу.
Причина: bareos не видит файлы с описанием профилей, которые устанавливаются с пакетом bareos-webui.
Решение: как правило, такое происходит, если мы не перезапустили службу директора после установки дополнительного компонента. Выполним команду:
systemctl restart bareos-dir
Ошибка появляется при попытке входа в веб-интерфейс.
Причина: с версии 18.2 bareos использует по умолчанию TLS-PSK, которая не поддерживается со стороны PHP по умолчанию.
Решение: к сожалению, мне не удалось разобраться с правильным вариантом использования TLS-PSK, поэтому, в качестве решения, предлагается не использовать шифрование между основным сервисом bareos и UI. Для этого открываем файл с настроенной учетной записью входа (в нашем примере, admin):
vi /etc/bareos/bareos-dir.d/console/admin.conf
И добавим строку:
Console {
…
TLS Enable = No
}
Перезапустим сервис:
systemctl restart bareos-dir
Можно проверять.
Также текст может быть такой:
Error: lib/bsock_tcp.cc:184 BnetHost2IpAddrs() for host «XXX» failed: ERR=Temporary failure in name resolution
Ошибка появляется при выполнении задания резервного копирования.
Причина: клиент, на котором выполняется резервное копирование не может определить имя хоста storage (оно указано в конфигурационном файле storage). Возможно, было изменено имя сервера или клиент находится за пределами внутренней сети и не может разрешать имена внутренних сервисов.
Решение: открываем файл на сервере:
vi /etc/bareos/bareos-dir.d/storage/File.conf
Необходимо убедиться, что в директиве Address у нас указано актуальное имя сервера:
…
Address = bareos.remontka.com
…
Если пришлось внести правки, перезапустим сервис:
systemctl restart bareos-dir
На стороне клиента нам нужно убедиться, что сервер доступен по имени. Для этого можно использовать утилиту nslookup:
nslookup bareos.remontka.com
Если на клиенте нет возможности указать DNS, который будет разрешать имя сервера BAREOS, то можно прописать его в файле hosts:
vi /etc/hosts
192.168.0.20 bareos.remontka.com
* здесь предполагается, что адрес сервера 192.168.0.20 .
При попытке загрузить файл с настройками репозитория мы можем получить ошибку сертификата. Пример сообщения:
ERROR: cannot verify download.bareos.org’s certificate, issued by ‘/C=US/O=Let’s Encrypt/CN=R3’:
Issued certificate has expired.
To connect to download.bareos.org insecurely, use `—no-check-certificate’.
Причина: наша система не доверяет сертификату, который используется репозиторием. Как правило, это наблюдается при устаревании корневых сертификатов на нашем компьютере.
Решение: мы можем решить проблемы 2 способами.
а) быстрый способ: подходит как временное решение. Мы можем сказать утилите wget не проверять сертификат — для этого добавляем опцию —no-check-certificate:
wget —no-check-certificate …
б) правильный способ: обновить корневые сертификаты.
Подробнее процесс описан в статье Обновление корневых сертификатов на Linux .
Задание зависает и выпадает с ошибкой. В сообщениях директора мы можем увидеть сообщение:
bareos-dir JobId 3: Warning: lib/bsock_tcp.cc:123 Could not connect to Storage daemon on bareos:9103. ERR=No route to host
Причина: сервер резервного копирования подключается к Storage daemon по сети. Данная ошибка говорит о том, что подключение не удалось.
Решение: открываем файл:
vi /etc/bareos/bareos-dir.d/storage/File.conf
А также остальные файлы из каталога /etc/bareos/bareos-dir.d/storage . Находим:
Address = bareos
* где bareos — имя сервера с ролью Storage daemon.
Нам нужно убедиться, что сервер из директивы Address доступен по сети.
При попытке загрузить данные в веб-интерфейсе на закладке Timeline ничего не происходит, а в консоль браузера отображается ошибка 500 при попытке загрузить данные со страницы /bareos-webui/job/getData/?data=timeline. Если перейти на данную страницу мы увидим исключение с текстом:
DateTime::__construct(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone ‘UTC’ for now, but please set date.timezone to select your timezone.
Причина: по умолчанию php устанавливается без настройки временной зоны. Без данной настройки приложение не может работать корректно, так как не отрабатывает функция date_default_timezone_set.
Решение: открываем файл:
vi /etc/php.ini
Добавляем строку:
date.timezone = «Europe/Moscow»
* где Europe/Moscow — нужный часовой пояс.
Перезапускаем веб-сервер:
systemctl reload httpd
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…