Власне в цій статті хочу в двох словах описати принцип роботи backup-системи Bacula та приклади робочих конфігів.
Якщо бути дуже не багатослівним, то бакула має три демона:
bacula-director - головний демон. Управляє наступними демонами.
bacula-fd - файл-демон. Установлюється на хости, звідки необхідно бекапити.
bacula-sd - сторедж-демон. Установлюють на сервер де власне бакапи і будуть зберігатись.
bconsole/bacula-console - консоль управління. Якщо часто необхідно колупатись в бекапах, можна заюзати графічні утиліти чи веб-інтерфейс Webacula.
Ну і так як в серйозних статтях мають бути ілюстрації...

Власне така система демонів зручна для масштабування.
Отже, тепер власне не важко здогдатись, що директора треба встановлювати на керуючу тачку, файл-демона на сервер(и), звідки будуть братись бекапи та сторедж-демон, де бекапи будуть зберігатись.
Бакула тримає дані з хеш-сумами файлів і переліком файлів в mysql-базі, тож перед запуском демонів раджу створити юзера бакула і пароль для цього користувача.
Ну і конфіг з невеличкими поясненнями:
cat /etc/bacula/bacula-dir.conf
#----------------------------------------------------------------
# Это ясно
Director {
Name = backup-dir
Dirport = 9101
QueryFile = "/etc/bacula/scripts/query.sql" #набор sql запросов для работы с метаданными
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Password = "xxxxxxxx1"
Messages = Daemon
#DirAddress = 192.168.3.202
}
#----------------------------------------------------------------
#Описание базы, куда бакула пишет некоторые данные типа хеш-сумм файлов...
Catalog {
Name = MyCatalog
dbname = bacula; DB Address = "192.168.3.202"; user = bacula; password = "xxxxxxxx1"
}
#----------------------------------------------------------------
#Список комманд (CommandACL) к которым имеет доступ bconsole.
#В двух словах это правила для консоли и что ей позволено делать.
Console {
Name = backup-mon
Password = "xxxxxxxx1"
CommandACL = status, .status
}
#----------------------------------------------------------------
#Правила рассылки сообщений.
Messages {
Name = Daemon
mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = vasya.pupkin@lala.com = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}
#----------------------------------------------------------------
#Куда бекапить данные.
Storage {
Name = stor_server1
Address = 192.168.3.176
SDPort = 9103
Password = "xxxxxxxx1"
Device = FileStorage
Media Type = File
}
#----------------------------------------------------------------
#График бекапов, т.е. когда они делаются.
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
}
#----------------------------------------------------------------
#Допишу потом
Job {
Name = "server3" #Имя задания
Type = Backup #Тип работы(создание бекапа)
Level = Differential #Уровень бекапа
Client=server3-fd #Клиент на котором будет производиться бекап
FileSet="server3" #Где описано как и какие файлы будем сохранять
Storage = stor_server1 #Куда будем «сливать» бекап
Pool = mainpool #Определяем с каким «пулом»(как) будем работать
Messages = Daemon #Как отрапортовать о проделанной работе
Schedule = "WeeklyDiff" #По какому расписанию делать бекапы
}
#---------------------------------------------------------------
#какие файлы бекапить на тачке
FileSet {
Name = "server3"
Include {
Options {
signature = MD5 #Для сверки используем MD5
Compression=GZIP #Используем GZIP компрессию
}
File = /etc #Что именно бекапить
File = /var/www
}
Exclude { #А что не бекапить, например логи
File = /home/logs
File = /var/www/logs
}
}
#---------------------------------------------------------------
#Описание клиента где будет производиться бекап.
#В данном случае у меня директор и файл-демон на одном хосте
Client {
Name = server3-fd
Address = 192.168.3.202
FDPort = 9102
Catalog = MyCatalog
Password = "xxxxxxxx1"
File Retention = 28 days #Сколько сохранять метаданные о сохраненных файлах для данного клиента
Job Retention = 28 days #Сколько сохранять метаданные касательно заданий для данного #клиента
AutoPrune = yes #Может ли бакула очищать метаданные
}
#--------------------------------------------------------------
#Имя ресурса; для задания резервного копирования определяет пул для записи, для
#задания миграции - исходный пул для поиска копируемых заданий. Проще говоря - это
#дополнительные настройки для стореджа
Pool {
Name = mainpool
Pool Type = Backup
Recycle = yes # Может ли бакула удалять задания из томов
AutoPrune = yes # Может ли бакула очищать тома
Volume Retention = 21 days # Как долго бакула должна "бояться" очистить том
Maximum Volume Jobs = 7 # Сколько заданий хранить в каждом из томов
Maximum Volumes = 4 # максимальное количество томов которыми может #оперировать бакула
}
#--------------------------------------------------------------
#Задание для бекапа сервера.
Job {
Name = "server3-restore"
Type = Restore
Client=server3-fd
FileSet="server3"
Storage = stor_server1
Pool = mainpool #Подключили правила, что описали выше
Messages = Daemon
Where = /var/lib/bacula-restores #А сюда ложатся бекапы
}
#----------------------------------------------------------------
Одразу додам, що краще невийопридумувати суперпаролів для служб і поставити для початку один для всіх, плюс слідкувати, що бакула-директор і інші у всіх директивах мав те ж саме значення (тобто, ім’я), і ще краще писати localhost в адресах, замість айпі сервера, якщо він звісно на локалхості.
Конфіг /etc/bacula/bacula-fd.conf :
Director {
Name = backup-dir
Password = "xxxxxxxx1"
}
# Местонахождения файл-демона. Т.е. где мы бекапим данные.
FileDaemon {
Name = server3-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
FDAddress = 192.168.3.202
}
Messages {
Name = Standard
director = server3-fd = all, !skipped, !restored
}
Ну і конфіг стореджа /etc/bacula/bacula-sd.conf :
cat /etc/bacula/bacula-sd.conf
Storage {
Name = stor_server1
SDPort = 9103
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
SDAddress = 192.168.3.176
}
Director {
Name = backup-dir
Password = "xxxxxxxx1"
}
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 = backup-dir = all
}
І на кінець конфіг консолі бакули:
cat /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
Name = backup-dir
DIRport = 9101
address = localhost
Password = "xxxxxxxxxxx1"
}
Ну і так як в серйозних статтях мають бути ілюстрації...

Власне така система демонів зручна для масштабування.
Отже, тепер власне не важко здогдатись, що директора треба встановлювати на керуючу тачку, файл-демона на сервер(и), звідки будуть братись бекапи та сторедж-демон, де бекапи будуть зберігатись.
Бакула тримає дані з хеш-сумами файлів і переліком файлів в mysql-базі, тож перед запуском демонів раджу створити юзера бакула і пароль для цього користувача.
Ну і конфіг з невеличкими поясненнями:
cat /etc/bacula/bacula-dir.conf
#----------------------------------------------------------------
# Это ясно
Director {
Name = backup-dir
Dirport = 9101
QueryFile = "/etc/bacula/scripts/query.sql" #набор sql запросов для работы с метаданными
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Password = "xxxxxxxx1"
Messages = Daemon
#DirAddress = 192.168.3.202
}
#----------------------------------------------------------------
#Описание базы, куда бакула пишет некоторые данные типа хеш-сумм файлов...
Catalog {
Name = MyCatalog
dbname = bacula; DB Address = "192.168.3.202"; user = bacula; password = "xxxxxxxx1"
}
#----------------------------------------------------------------
#Список комманд (CommandACL) к которым имеет доступ bconsole.
#В двух словах это правила для консоли и что ей позволено делать.
Console {
Name = backup-mon
Password = "xxxxxxxx1"
CommandACL = status, .status
}
#----------------------------------------------------------------
#Правила рассылки сообщений.
Messages {
Name = Daemon
mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = vasya.pupkin@lala.com = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}
#----------------------------------------------------------------
#Куда бекапить данные.
Storage {
Name = stor_server1
Address = 192.168.3.176
SDPort = 9103
Password = "xxxxxxxx1"
Device = FileStorage
Media Type = File
}
#----------------------------------------------------------------
#График бекапов, т.е. когда они делаются.
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
}
#----------------------------------------------------------------
#Допишу потом
Job {
Name = "server3" #Имя задания
Type = Backup #Тип работы(создание бекапа)
Level = Differential #Уровень бекапа
Client=server3-fd #Клиент на котором будет производиться бекап
FileSet="server3" #Где описано как и какие файлы будем сохранять
Storage = stor_server1 #Куда будем «сливать» бекап
Pool = mainpool #Определяем с каким «пулом»(как) будем работать
Messages = Daemon #Как отрапортовать о проделанной работе
Schedule = "WeeklyDiff" #По какому расписанию делать бекапы
}
#---------------------------------------------------------------
#какие файлы бекапить на тачке
FileSet {
Name = "server3"
Include {
Options {
signature = MD5 #Для сверки используем MD5
Compression=GZIP #Используем GZIP компрессию
}
File = /etc #Что именно бекапить
File = /var/www
}
Exclude { #А что не бекапить, например логи
File = /home/logs
File = /var/www/logs
}
}
#---------------------------------------------------------------
#Описание клиента где будет производиться бекап.
#В данном случае у меня директор и файл-демон на одном хосте
Client {
Name = server3-fd
Address = 192.168.3.202
FDPort = 9102
Catalog = MyCatalog
Password = "xxxxxxxx1"
File Retention = 28 days #Сколько сохранять метаданные о сохраненных файлах для данного клиента
Job Retention = 28 days #Сколько сохранять метаданные касательно заданий для данного #клиента
AutoPrune = yes #Может ли бакула очищать метаданные
}
#--------------------------------------------------------------
#Имя ресурса; для задания резервного копирования определяет пул для записи, для
#задания миграции - исходный пул для поиска копируемых заданий. Проще говоря - это
#дополнительные настройки для стореджа
Pool {
Name = mainpool
Pool Type = Backup
Recycle = yes # Может ли бакула удалять задания из томов
AutoPrune = yes # Может ли бакула очищать тома
Volume Retention = 21 days # Как долго бакула должна "бояться" очистить том
Maximum Volume Jobs = 7 # Сколько заданий хранить в каждом из томов
Maximum Volumes = 4 # максимальное количество томов которыми может #оперировать бакула
}
#--------------------------------------------------------------
#Задание для бекапа сервера.
Job {
Name = "server3-restore"
Type = Restore
Client=server3-fd
FileSet="server3"
Storage = stor_server1
Pool = mainpool #Подключили правила, что описали выше
Messages = Daemon
Where = /var/lib/bacula-restores #А сюда ложатся бекапы
}
#----------------------------------------------------------------
Одразу додам, що краще не
Конфіг /etc/bacula/bacula-fd.conf :
Director {
Name = backup-dir
Password = "xxxxxxxx1"
}
# Местонахождения файл-демона. Т.е. где мы бекапим данные.
FileDaemon {
Name = server3-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
FDAddress = 192.168.3.202
}
Messages {
Name = Standard
director = server3-fd = all, !skipped, !restored
}
Ну і конфіг стореджа /etc/bacula/bacula-sd.conf :
cat /etc/bacula/bacula-sd.conf
Storage {
Name = stor_server1
SDPort = 9103
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
SDAddress = 192.168.3.176
}
Director {
Name = backup-dir
Password = "xxxxxxxx1"
}
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 = backup-dir = all
}
І на кінець конфіг консолі бакули:
cat /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
Name = backup-dir
DIRport = 9101
address = localhost
Password = "xxxxxxxxxxx1"
}
Приємного бекапу!


0 коментарі:
Дописати коментар