Содержание

Установка и настройка системы резервного копирования bacula

Все действия выполняются от root, настройка нашего стенда может отличаться именами и ip адресами от Ваших.

В нашем примере мы будем рассматривать следующую инфраструктуру:


Подготовка инфраструктуры для управления системой резервного копирования


aptitude install postgresql-8.4


aptitude install mailx


dpkg -i dbconfig-common*.deb
dpkg -i bacula-director-common*.deb
dpkg -i bacula-director-pgsql*.deb

При настройке базы bacula может произойти ошибка, проигнорируйте ее, базу мы настроим позже.


В файле /etc/postgresql/8.4/main/postgresql.conf указать listen = '*'
В файле /etc/postgresql/8.4/main/pg_hba.conf внести необходимые изменения, для простоты можно указать метод trust для всех, удалить любую дополнительную конфигурацию после метода, типа mod=
Обязательно добавить host с ip адресом, где будет работать bacula-dir. В случае если все демоны bacula будут установлены на одну машину, указывать ip не обязательно, так как работа будет идти через localhost
Для первоначальной настройки Вы можете использовать наш файл pg_hba.conf

Выполните запуск БД:

pg_ctlcluster 8.4 main restart

Присвоить пароль postgres:
passwd postgres
, запомните пароль.
Присвоить пароль bacula:
passwd bacula
, пароль присваивайте bacula.
Создать пользователя БД для работы с bacula, выполнять не из-под root:

# psql template1 postgres
postgres=# CREATE ROLE bacula;
postgres=# ALTER USER bacula PASSWORD 'bacula';
postgres=# ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;

Выполнить не от root fly-admin-postgres, указать имя template1, пользователя postgres, пароль присвоенный postgres. В секции Роли входа добавить роль входа bacula. Создать базу данных bacula, владельцем назначить bacula.

В скриптах /usr/share/bacula-director/make_postgresql_tables.sh и /usr/share/bacula-director/grant_postgresql_privileges.sh в строке после if $bindir/psql добавить -U bacula, сохранить изменения и выполнить скрипты:

make_postgresql_tables.sh
grant_postgresql_privileges.sh

При возникновении необходимости файлы make_postgresql_tables.sh, grant_postgresql_privileges.sh можно скачать у нас с готовыми правками.


mkdir /back
chown -R bacula /back


mkdir /etc2

Если подготовительные настройки выполнены корректно, база стартует без ошибок, скрипты выполнились без ошибок, то можно приступить к настройке bacula.

Настройка bacula


Настройка Director Daemon

Приступаем к конфигурированию Director Daemon в конфигурационном файле /etc/bacula/bacula-dir сервера bakula1.my.dom. В первую очередь необходимо определить основные параметры в секции Director. На начальном этапе важно установить параметры Name и Password. Name задаёт уникальное имя Director Daemon, а Password – пароль, который будет использоваться при соединениях BC с DD. Остальные параметры можно оставить в значениях по умолчанию.

Director { # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
Maximum Concurrent Jobs = 1
Password = "1" # Console password
Messages = Daemon
DirAddress = 11.11.11.21
}

Следующей группой параметров, которые необходимо определить, является секция Catalog. Здесь необходимо указать реквизиты доступа к базе данных, а также назначить уникальное имя данного Bacula Catalog с помощью параметра Name:

Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:sqlite3"; dbaddress = 127.0.0.1; dbport =
dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula"
DB Address = 11.11.11.21
}

Теперь настала пора определить SD, на который будет производиться передача данных для дальнейшей записи на устройство хранения. Storage Daemon у нас настроен и готов к работе, определим реквизиты доступа к нему в секции Storage файла bacula-dir.conf.

Параметр Name – уникальное имя, использующееся для адресации секции Storage в рамках файла bacula-dir.conf

Параметры Device и MediaType дублируют одноимённые параметры файла bacula-sd.conf.

Параметр Password содержит пароль, который будет использоваться при подключении к Storage Daemon.

Storage {
Name = File
# Do not use "localhost" here
Address = 11.11.11.22 # N.B. Use a fully qualified name here
SDPort = 9103
Password = "1"
Device = FileStorage
Media Type = File
}

До завершения базовой настройки Director Daemon осталось совсем немного. Секция Pool определяет набор носителей информации и параметры, определяющие то, как SD будет их обрабатывать. Каждый Pool взаимодействует с устройством хранения данных, и поэтому необходимо создать столько же пулов, сколько определено устройств хранения. Фактически если для каждого File Daemon вы определяете отдельное устройство, то для каждого FD необходимо определить и Pool. Рассмотрим перечень наиболее значимых параметров.

Параметр Name определяет уникальное имя пула.

Параметр ool Type определяет тип, и для резервных копий должен быть установлен в значение Backup.

Параметр Maximum Volume Jobs рекомендуется установить в значение 1. Это будет означать, что в рамках одного носителя данных могут быть размещены резервные данные, полученные в ходе выполнения только одного задания. Носитель данных – это устройство, на которое непосредственно записываются данные (оптические диски, магнитные ленты). Если размер созданной резервной копии много меньше размера носителя, то имеет смысл сохранить на него и другие копии, которые будут создаваться в будущем. Но если мы говорим о файлах, то желательно придерживаться правила "один файл – одна копия", т.е. в одном файле Bacula должны храниться резервные данные, которые были сформированы в рамках выполнения одного задания. Для каждого последующего будут создаваться новые файлы.

Volume Retention – время, по прошествии которого данные о резервной копии, хранящейся на носителе, будут удалены из каталога. Для обеспечения работоспособности Bacula необходимо помнить о том, что информация обо всех зарезервированных файлах хранится в базе данных, по записи на каждый файл. Если вы резервируете тысячи файлов, то очень скоро база данных станет огромной, что может затруднить работу Bacula. Поэтому очень важно своевременно очищать базу от устаревшей информации. При этом сам носитель информации не будет очищен автоматически. Он будет промаркирован как устаревший, но вы всегда сможете использовать его для восстановления данных в ручном режиме.

Maximum Volumes – максимальное количество носителей (в нашем случае файлов), доступных в данном пуле.

Параметр Recycle указывает на необходимость повторного использования носителей, помеченных как устаревшие. При этом реальная перезапись носителя произойдёт лишь в случае, когда свободных носителей не останется. Свободные носители определяются из параметра Maximum Volumes.

Параметр AutoPrune указывает на то, необходимо ли производить удаление устаревших записей из Bacula Catalog автоматически после завершения выполнения очередного задания.

Параметр Label Format определяет префикс, который будет использован Bacula для маркирования носителей информации, в нашем случае – для именования файлов.

Параметр Storage указывает на имя устройства хранения данных, указанного в параметре Name секции Storage файла bacula-dir.conf.

Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 1 month # one year
Maximum Volume Jobs = 1
Maximum Volumes = 32
Storage = File
Label Format = "volume-"
}

Одна из интересных секций – FileSet, она позволяет предопределить несколько наборов резервируемых файлов. Например, один набор для Windows, другой – для Linux или один для серверов, а другой – для рабочих станций. Основные параметры здесь следующие.

Параметр Name определяет уникальное имя набора.

Секция Include содержит пути к резервируемым файлам/каталогам, а Exclude – пути к файлам и каталогам, которые необходимо исключить из списка резервируемых. В секции Include возможна секция Options, в которой определяются параметры резервирования.

Параметр signature указывает алгоритм вычисления контрольных сумм файлов.

Параметр compression указывает алгоритм компрессии файлов.

Параметр recurse указывает на необходимость рекурсивного резервирования, включая подкаталоги и файлы.

Параметр File указывает на каталог, который мы копируем.

Параметр xattrsupport указывает на возможность включения поддержки расширенных атрибутов, это обязательный параметр для работы с мандатными метками.

FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
compression = GZIP
# recurse = yes
aclsupport = yes
xattrsupport = yes
}
File = /etc
}
}

Все настройки мы свяжем воедино с помощью секции Job, в которой мы даём задание планировщику по выполнению резервирования данных. Здесь мы уже не будем описывать все параметры, отметив лишь основные.

Параметр Type указывает на тип задания. Типов существует несколько, и к ним мы еще вернемся в продолжение цикла. Здесь же достаточно указать Backup.

Параметр Schedule указывает на предопределённое расписание, согласно которому будет выполняться резервирование данных. Все расписания определены здесь же, в файле bacula-dir.conf. Пример расписания WeeklyCycle приведён ниже, комментировать в нём нечего.

Параметр Where указывает на каталог, где будет развернут бэкап.

Параметр Write Bootstrap указывает путь к файлу, в который будет записываться информация, с помощью которой данные могут быть восстановлены из резервной копии без наличия подключения к Bacula Catalog. Вместо %n будет подставлено значение параметра Name:

Schedule {
Name = "DailyCycle"
Run = Full daily at 16:10
# Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}

Job {
Name = "RestoreFiles"
Type = Restore
Client= bacula-fd
FileSet="Catalog"
Storage = File
Pool = Default
Messages = Standard
Where = /etc2
}

Ну, а теперь укажем параметры нашего единственного Агента.

Client {
Name = bacula-fd
Address = 11.11.11.23
FDPort = 9102
Catalog = MyCatalog
Password = "1" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}

Последний штрих – закомментируйте все остальные секции: Job, JobDefs, Client и Console, на данном этапе они нам не понадобятся. Как вы понимаете, трафик будет идти по тем портам, что указаны в конфигурационных файлах каждого из компонентов Bacula.

Далее необходимо настроить доступ к DD со стороны Bacula Console в файле /etc/bacula/bconsole.conf сервера bakula1.my.dom:

Director {
Name = bacula-dir
DIRport = 9101
address = 11.11.11.21
Password = "1"
}


apt-get remove bacula-sd
apt-get remove bacula-fd

Конфиги bacula-sd и bacula-fd в /etc/bacula следует либо переименовать, либо удалить.
Сервисы bacula-sd и bacula-fd следует остановить:

/etc/init.d/bacula-sd stop
/etc/init.d/bacula-fd stop

Скопировать готовые конфигурационные файлы bconsole.conf и bacula-dir.conf для нашего примера можно здесь.

Настройка Storage Daemon

Секция Director необходима для указания уникального имени DD и пароля, с которым этот DD может подключаться к SD. Секций может быть несколько, что даёт возможность использовать единый сервер хранения данных для нескольких систем резервирования. Все остальные секции Director, найденные в файле, закомментируйте, они пока не понадобятся.

Storage { # definition of myself
Name = bacula-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = 11.11.11.22
}

Director {
Name = bacula-dir
Password = "1"
}

Но основные настройки, определяющие взаимодействие с устройствами хранения, кроются в секции Device. Рассмотрим параметры, необходимые для хранения резервных копий в рамках существующей файловой системы, подключенной в каталог /back.

Параметр Name определяет уникальное имя подключенного устройства. Если вы планируете создавать изолированные друг от друга резервные копии для каждого из File Daemon, то вам необходимо создать несколько секций Device с уникальными именами. В противном случае резервируемые файлы со всех FD будут размещаться в одном и том же файле, что может несколько затруднить дальнейшее обслуживание системы.

Параметр Media Type определяет произвольное уникальное имя, которое будет использоваться Bacula при восстановлении данных. Согласно ему определяется устройство хранения, с которого будет производиться восстановление. Если вы храните резервные копии в файлах, то для КАЖДОЙ секции Device должен быть задан уникальный Media Type.

Параметр Archive Device указывает путь к файлу устройства в каталоге /dev или путь к каталогу, в котором будут размещаться резервные копии.

Параметр Device Type определяет тип устройства. Для размещения в существующей файловой системе указывается File.

Параметр Random Access указывает на возможность случайной (непоследовательной) адресации. Для файлов указывается Yes.

Параметр RemovableMedia указывает, возможно ли извлечение устройства хранения. Необходимо для ленточных устройств, приводов оптических дисков и т.д. Для файлов устанавливается в значение No.

Параметр LabelMedia указывает на необходимость автоматического маркирования носителей информации.

Device {
Name = FileStorage
Media Type = File
Archive Device = /back
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

Для базовой настройки этого достаточно


На машине, где будет Storage Daemon следует удалить пакет bacula-fd:

apt-get remove bacula-fd

Конфиг bacula-fd в /etc/bacula следует либо переименовать, либо удалить.
Сервис bacula-fd следует остановить:

/etc/init.d/bacula-fd stop

Скопировать готовый конфигурационный файл bacula-sd.conf для нашего примера можно здесь.

Настройка File Daemon

Для настройки используется файл /etc/bacula/bacula-fd, в котором для базовой настройки достаточно лишь определить параметры секции Director, где указывается пароль, который будет использовать DD при подключении к FD, а также секции FileDaemon, где указываются настройки FD. Все остальные секции Director, найденные в файле, закомментируйте, они пока не понадобятся.

Director {
Name = bacula-dir
Password = "1"
}

В секции FileDaemon нас, на данном этапе, интересует только параметр Name, в котором указывается уникальное имя File Daemon:

FileDaemon { # this is me
Name = bacula-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = 11.11.11.23
}


apt-get remove bacula-sd

Конфиг bacula-sd в /etc/bacula следует либо переименовать, либо удалить.
Сервис bacula-sd следует остановить:

/etc/init.d/bacula-sd stop

Скопировать готовый конфигурационный файл bacula-fd.conf для нашего примера можно здесь.


/etc/init.d/bacula-director restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

После этого bacula будет работать. Управление bacula осуществляется через bconsole. Настройки каталогов, заданий, расписаний и прочие задаются в конфиурационных файлах.
Для тестовой проверки выполните bconsole, далее выполните run, выберете job 1, войдите в меню набрав mod, выберете 1 (Level), выберете 1 (Full), подтвердите выполнение набрав yes. Будет создан бэкап в каталоге /back на машине с Storage Daemon. Для разворота бэкапа выполните restore, выберете пункт 12, введите номер job id, укажите параметр маркировки mark *, подтвердите выполнение командой done. Будет развернут бэкап в каталоге /etc2 на машине с File Daemon.

Дополнительная информация

Настройка системы резервного копирования bacula с описанием функций представлена, например, в следующих руководствах: