Bacula: установка и настройка утилиты для бэкапов

Резервное копирование с 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. Помимо прочего, наши специалисты помогут с настройкой, поддержкой и подбором решений под конкретные задачи.