Резервное копирование с Bacula
Делимся типами резервного копирования и основными понятиями, а также рассказываем, как установить Bacula на сервер.
Что такое Bacula
Bacula — система бэкапирования и восстановления данных. Ее основные задачи — управление копиями, восстановление и проверка информации в глобальных сетях. ПО поддерживает гибкую настройку задач резервного копирования и работает с большинством современных платформ: Windows, Ubuntu и Debian, а также отечественными ОС, такими как Astra Linux и ALT Linux.
В репозитории SelectOS — серверной системы Selectel на базе Linux — вы найдете протестированную свежую версию Bacula 15.0.2. Приглашаем посмотреть запись вебинара, где рассказали о возможностях системы, планах развития, ее безопасности, производительности и гибкости. А еще — как SelectOS помогает снизить затраты.
С технической точки зрения Bacula — сетевая программа, которая основана на клиент-серверной архитектуре. Она включает в себя несколько компонентов.
- Bacula Storage — хранение бэкапов.
- Bacula File Daemon — служба, которая осуществляет резервное копирование.
- Bacula Director — здесь создаются задания для компонентов Storage и Daemon.
- Bacula Console — интерфейс подключения к Director.
Основные преимущества
Bacula автоматизирует процессы бэкапирования и работает с различными носителями данных, включая диски и ленточные системы. Среди других достоинств — относительная простота использования и эффективность.
Расширенные функции управления хранилищем упрощают поиск и восстановление утраченных или поврежденных файлов. А благодаря модульной структуре Bacula может масштабироваться от небольших систем с одним компьютером до крупных сетей из сотен устройств.
Кому пригодится Bacula
Если уже пользуетесь tar, dump или rsync для бэкапов и чувствуете, что их возможностей недостаточно, Bacula — хороший вариант. Это сетевое решение предлагает гибкость, функции каталогизации и поддержку сложных сценариев резервного копирования.
Однако если вы новичок в системах Unix или у вас нет опыта работы с комплексными пакетами бэкапирования, инструмент может оказаться сложным. В таких случаях лучше начинать с более простых средств, таких как tar и dump. Помимо прочего, по Bacula крайне мало доступной документации. Но мы в силах это исправить и в скором времени подготовим еще несколько полезных инструкций — следите за обновлениями!
Основные понятия в системе
Job (задача)
Джоба — операция, которая связана с бэкапированием, восстановлением или проверкой данных. Она определяет, что, когда и как должно быть выполнено. Рассмотрим ключевые элементы джоб в Bacula.
- Тип задачи. Это может быть резервное копирование (backup), восстановление (restore) или проверка (verify).
- Параметры. Джоба включает в себя источник данных (например, файлы или каталоги), место назначения для хранения бэкапа, а также параметры расписания.
- Ресурсы. Джоба ссылается на различные ресурсы Bacula: Storage Daemon (демон хранения), который управляет физическим хранилищем, а также File Set (набор файлов). Последний определяет, какие файлы будут включены в бэкап.
- Мониторинг и управление. Bacula позволяет отслеживать выполнение джоб и управлять ими через консоль или интерфейс. Пользователи могут видеть статусы задач, их результаты и ошибки.
Volume (том)
Том — физическое или логическое хранилище, на котором хранятся бэкапы. Это может быть магнитная лента, диск, облачное хранилище или виртуальный том.
Pool (пул)
Пул — это группа томов (Volumes), которую используют для хранения резервных копий. Пулы обеспечивают эффективное распределение ресурсов и упрощают процесс бэкапирования, а также помогают организовать тома и управлять ими.
FileSet (набор файлов)
FileSet — набор файлов и каталогов, которые включены в бэкап. Компонент также позволяет прописывать исключения, что делает процесс более эффективным и гибким.
Messages (уведомление)
Уведомление — компонент системы, который обрабатывает сообщения о задачах резервного копирования и восстановления. Играет важную роль в мониторинге и управлении процессом, обеспечивая связь между различными элементами системы.
Bootstrap (файл начальной загрузки)
Bootstrap — особый файл с информацией о состоянии и конфигурации системы резервного копирования на момент последнего успешного бэкапа. Критически важный элемент для восстановления данных и управления хранилищем.
Типы резервного копирования
В Bacula предусмотрено несколько типов бэкапирования. Расскажем об их особенностях и сценариях использования.
Как выбрать тип бэкапа? В обзоре рассказываем, какие они бывают, когда нужна автоматизация и где можно хранить резервные копии.
Полная резервная копия (Full Backup)
Полный бэкап — это копия всех файлов и каталогов, которые указаны в конфигурации задания. Обеспечивает полную и актуальную копию данных, но требует больше времени и места по сравнению с другими типами.
Инкрементальная резервная копия (Incremental Backup)
Инкрементальный бэкап хранит только файлы и изменения с момента последнего бэкапа (полного или инкрементального). Этот подход экономит время и пространство на диске, так как копируются только изменения. Однако для восстановления данных нужен полный бэкап и все последующие инкрементальные.
Дифференциальная резервная копия (Differential Backup)
Дифференциальное резервное копирование сохраняет изменения с момента последнего полного бэкапа. С каждой новой дифференциальной копией объем данных будет расти, однако для восстановления нужно только два последних бэкапа: полный и дифференциальный.
Синтетическая резервная копия (Synthetic Backup) и разница в терминах
Термин «Синтетический бэкап» может встречаться как синоним дифференциального копирования. В терминологии типов резервного копирования есть путаница, так как в разных системах управления базами данных (СУБД) разработчики используют их с разным контекстом. Ниже делимся небольшой шпаргалкой с определениями для разных СУБД.
СУБД | Термин для инкрементальной копии | Термин для дифференциальной копии |
PostgresPro | Инкрементальная | — |
Percona Server | Инкрементальная | Инкрементальная |
Oracle | Дифференциальная | Кумулятивная |
MySQL Enterprise | Инкрементальная | Дифференциальная |
Microsoft SQL Server | — | Дифференциальная |
IBM DB2 | Дельта | Инкрементальная |
Так как среди СУБД еще не выработалась единая терминология, важно всегда уточнять, о каком типе бэкапа речь.
Установка Bacula на сервер
Установка модулей по машинам
Важно установить четыре ключевых модуля:
- Bacula Director — на управляющий сервер;
- File Daemon — на сервер с оригинальными данными для копирования;
- Bacula Storage — на сервер, который будет хранить копии;
- Bacula Console — на машину админа, с которой он будет подключаться и администрировать Bacula Director.
sudo apt install bacula #установить все модули
sudo apt install bacula-dir #установить Bacula Director
sudo apt install bacula-sd #установить Bacula Storage
sudo apt install bacula-fd #установить Bacula File Daemon
sudo apt install bacula-console #установить Bacula Console
Сценарий полного и дифференциального бэкапа БД
Настраиваем полный и дифференциальный бэкапы. Рассмотрим общие сведения.
- Защищаемая сущность (оригинал для снятия копий) — сервер с базой данных db-server.
- Сервер хранения резервных копий — stor-server.
- Управляющий сервер — dir-server.
- Дифференциальный бэкап — со вторника по воскресенье включительно, полный — по понедельникам.
- Хранение данных — 21 день.
Установка БД на сервер с Bacula Director
Обратите внимание, что по умолчанию в пакет Bacula входит PostgreSQL. Однако если ставим компоненты по отдельности, то нужно установить БД самостоятельно:
sudo apt install pgsql
...
#указать localhost
#указать пароль
Файл конфига Bacula Director
1. Подключаемся к управляющему серверу, на котором запущен Bacula Director, и копируем файл /etc/bacula/bacula-dir.conf
.
Рекомендуем сохранить дефолтную конфигурацию. Например, под именем /etc/bacula/bacula-dir.conf.def
.
2. Входим в режим редактирования /etc/bacula/bacula-dir.conf
и заполняем секцию Director.
Director {
Name = dir-server #имя
DIRport = 9101 #порт
QueryFile = "/etc/bacula/scripts/query.sql" #файл с запросами SQL
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/run/bacula"
Maximum Concurrent Jobs = 20 #максимальное количество одновременно выполняемых задач
Password = "Очень-Сложный-Пароль"
Messages = Daemon
DirAddress = 127.0.0.1 #IP адрес
}
3. Настраиваем доступ к БД в секции Catalog.
Catalog {
Name = MyCatalog
dbname = "bacula"; DB Address = "localhost"; dbuser = "bacula"; dbpassword = "Очень-Сложный-Пароль"
}
4. Конфигурируем доступ к консоли.
Console {
Name = bacula-admin
Password = "Очень-Сложный-Пароль"
CommandACL = status, .status
}
5. Автоматизируем отправку отчетов администратору сервера.
Messages {
Name = Daemon
mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = admin@domain.com = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}
6. Определяем серверы для хранения.
Storage {
Name = stor-server #имя хранилища (не используйте "localhost")
Address = 127.0.0.1 #важно: используйте полное имя #Адрес хранилища
SDPort = 9103 #порт хранилища
Password = "Очень-Сложный-Пароль"
Device = "BaculaTest" #имя устройства в хранилище
Media Type = File #тип данных в хранилище
}
7. Создаем расписания, согласно которым будут осуществляться бэкапы.
Schedule {
Name = "WeeklyDiff" #имя планировщика
Run = Level=Full on mon at 05:01 #тип и время
Run = Level=Differential on tue-sun at 02:02 #тип и время
}
Schedule {
Name = "WeeklyFull" #имя планировщика
Run = Level=Full on mon-sun at 03:03 #тип и время
}
8. Создаем задания для бэкапа db-server.
Job {
Name = "db-server-backup" #имя задания
Type = Backup #тип работы(создание бекапа)
Level = Differential #уровень бекапа
Client = db-server #клиент, на котором будет сниматься бэкап
FileSet="db-server-set" #секция, в которой описано как и какие файлы будем сохранять
Storage = stor-server #куда будем «сливать» бекап
Pool = mainpool #определяем с каким «пулом» (как) будем работать
Messages = Standard #как отрапортовать о проделанной работе
Schedule = "WeeklyDiff" #по какому расписанию делать бекапы
}
9. Указываем, что и как сохранять с сервера db-server, а также прописываем исключения — например, логи.
FileSet {
Name = "db-server-set" #имя списка
Include { #что включено в список
Options { #опции списка, полный перечень см. в официальной документации
signature = MD5 #для сверки используем MD5
Compression=GZIP #используем GZIP компрессию
}
File = /home/logs #директория которую нужно забэкапить
File = /var/www/logs #еще директория, которую нужно забэкапить
}
Exclude { #что исключить из директории
File = /home/logs #пример, что исключить из указанной директории
File = /var/www/logs #еще пример, что исключить из указанной директории
}
}
10. Описываем параметры клиента для db-server.
Client {
Name = dbserver #имя, должно совпадать с именем в настройках клиента
Address = 10.10.0.3 #адрес на котором ожидает соединений клиент
FDPort = 9102 #порт, на котором ожидает соединений клиент
Catalog = MyCatalog #каталог для метаданных, который мы создали ранее
Password = "Очень-Сложный-Пароль" #пароль для подключения к клиенту
File Retention = 28 days #сколько хранить информацию о файлах
Job Retention = 28 days #сколько хранить информацию о задачах
AutoPrune = yes #автоматически удалять данные о файлах и задачах по истечении срока
}
11. Определяем параметры ротации bacula-dir.conf.
Исходя из конфигурации:
- используем четыре тома,
- в томе храним не более семь заданий (недельный бэкап),
- время хранения тома — 21 день.
Храним каждое задание 21 день, а на 22 — очищаем весь том и используем его заново.
Если нужно хранить данные, например, четыре недели, то Volume Retention
меняем с 21 на 28, Maximum Volumes
устанавливаем на 5, а также создаем дополнительный том.
Pool {
Name = mainpool
Pool Type = Backup
Recycle = yes #может ли Bacula удалять задания из томов
AutoPrune = yes #может ли Bacula очищать тома
Volume Retention = 21 days #как долго Bacula должна "бояться" очистить том
Maximum Volume Jobs = 7 #сколько заданий хранить в каждом из томов
Maximum Volumes = 4 #максимальное количество томов, которыми может оперировать Bacula
}
12. Описываем задание для восстановления данных.
Job {
Name = "db-server-resotre"
Type = Restore
Client=db-server
FileSet="db-server-set"
Storage = stor_server
Pool = mainpool
Messages = Standard
Where = /var/lib/bacula-restores
}
13. Проверяем корректность конфига.
sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf
#если все правильно, то вывод будет пустым
15. Перезапускаем сервис.
systemctl restart dir-server.service
#или
service dir-serever reload
#или
/etc/init.d/dir-serever reload
Файл конфига Bacula Storage
1. Подключаемся к серверу с Bacula Storage, который будет хранить бэкапы.
2. Копируем файл /etc/bacula/bacula-sd.conf
и сохраняем его под другим именем. В нашем случае — /etc/bacula/bacula-sd.conf.def
.
3. Входим в режим редактирования /etc/bacula/bacula-sd.conf
и вносим данные для подключения.
Storage {
Name = stor_server #имя хранилища
SDPort = 9103 #порт подключения
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
SDAddress = 10.10.0.2 #адрес подключения
}
Director { #данные для подключения к Director
Name = dir-server
Password = "storage_pass"
}
Device { #устройство для хранения
Name = FileStorage
Media Type = File #тип хранения
Archive Device = /var/bacula #путь для хранения бэкапов
LabelMedia = yes;
Random Access = Yes; #поддерживает произвольный доступ
AutomaticMount = yes;
RemovableMedia = no; #несъемный накопитель
AlwaysOpen = no; #открывать накопитель только при необходимости
}
Messages { #отправка сообщений
Name = Standard
director = dir-server = all
}
4. По аналогии с Director, проверяем корректность конфига и перезапускаем сервис.
sudo /usr/sbin/bacula-sd -t -c /etc/bacula/bacula-sd.conf
# Если все правильно, то вывод будет пустым
systemctl restart stor-server.service
# или
service stor-server.service
#или
/etc/init.d/stor-server reload
Файл конфига Bacula File Daemon
1. Подключаемся к серверу, на котором запущен Bacula File Daemon (сервер с оригинальными данными).
2. Копируем файл /etc/bacula/bacula-fd.conf
и сохраняем его под другим именем, в нашем случае — /etc/bacula/bacula-fd.conf.def
.
3. Входим в режим редактирования /etc/bacula/bacula-fd.conf
и вносим данные для подключения в файл конфигурации.
Director { #данные для подключения к Director
Name = dir-server
Password = "db-server_pass"
}
FileDaemon {
Name = db-server #название, которое используется при подключении
FDport = 9102 #порт, на котором программа ожидает подключения
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
FDAddress = 10.10.0.3 #IP адрес, на котором программа ожидает подключения
}
Messages { #описание сообщений
Name = Standard
director = db-server = all, !skipped, !restored
}
4. По аналогии с Director, проверяем корректность конфига и перезапускаем сервис.
sudo /usr/sbin/bacula-fd -t -c /etc/bacula/bacula-fd.conf
#Если все правильно, то вывод будет пустым
systemctl restart db-server.service
#или
service db-server reload
#или
/etc/init.d/db-server reload
Файл конфига Bacula Concole
В файле /etc/bacula/bconsole.conf
, который лежит на машине администратора, настраиваем только Director, к которому нужно подключаться:
Director {
Name = dir-server
DIRport = 9101
address = 127.0.0.1 #IP-адрес
Password = "Очень-Сложный-Пароль"
}
Актуальная версия Bacula в SelectOS
Организация резервного копирования — сложная задача, для которой нужен комплексный подход. Надежное хранение бэкапов, мониторинг их состояния и регулярная проверка на восстановление — все это важно предусмотреть заранее.
SelectOS — удобный дистрибутив на базе Linux, разработанный с учетом нашего опыта работы с серверными ОС. Система создана для стабильной и высокопроизводительной работы серверных приложений в корпоративной инфраструктуре.
Одно из преимуществ SelectOS — собственный репозиторий с протестированными и актуальными версиями ПО. Среди компонентов есть и сервисы резервного копирования — например, Bacula свежей версии 15.0.2. Помимо прочего, наши специалисты помогут с настройкой, поддержкой и подбором решений под конкретные задачи.