Четвер, 6 жовтня 2011 р.

Трохи про бекапи. Bacula

Як кажуть люди діляться на тих хто не робить бекапи і хто вже їх робить. Проте, схоже, краще про бекапи думати раніше...

Власне в цій статті хочу в двох словах описати принцип роботи 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"
}

Приємного бекапу!

0 коментарі:

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