Система бекапирования Bacula

Bacula – система бекапирования уровня предприятия. Ее основные компоненты:

  • Director – управляет всей этой системой, он инициирует все операции бекапирования и восстановления
  • Storage Daemon – демон хранилища, он записывает бекапы себе на диск
  • File Daemon – демон, снимающий бекапы с бекапируемых машин
  • Console – консольная утилита, которая подключается к Director и позволяет пользователю управлять системой

bacula2
Пусть в нашей конфигурации на сервере (IP-адрес 10.0.0.3) будет работать Director и SD, а клиенты – некие рабочие сервера (IP 10.0.0.1 и 10.0.0.2). Будем собирать Bacula с хранилищем PostgreSQL.

Сервер (Director + Storage Daemon)

Естественно, начнем с директора:

# cd /usr/ports/sysutils/bacula-server
# make config install clean (отмечаем PGSQL)

Создаем пользователя БД для работы с Бакулой:

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

Создаем и наполняем базу данных из заготовленных разработчиками скриптов:

# cd /usr/local/share/bacula
# sudo -u bacula ./create_postgresql_database
# sudo -u bacula ./make_postgresql_tables
# sudo -u bacula ./grant_postgresql_privileges

Обратите внимание, что в параметре Address секции Storage требуется указывать доменное имя или IP-адрес, но не 127.0.0.1, так как к Storage Daemon сам Director не подключается. Director лишь указывает клиенту (File Daemon) подключиться к хранилищу. Таким образом, порт Storage Daemon должен быть открыт для внешних подключений. Создаем вот такой файл /usr/local/etc/bacula-dir.conf

Настраиваем Storage Daemon, который у нас будет работать на этом же сервере (10.0.0.3), указываем такой же пароль как и в конфиге директора. Примерный конфиг /usr/local/etc/bacula-sd.conf

Клиенты

На каждом клиенте (бекапируемом сервере) устанавливаем клиента под названием Bacula File Daemon:

# cd /usr/ports/sysutils/bacula-client
# make config install clean

И редактируем следующий файл: /usr/local/etc/bacula-fd.conf

Консоль управления bconsole

bconsole – консольная утилита управления всем этим хозяйством. Ее конфиг лежит здесь /usr/local/etc/bconsole.conf

Пример сессии:

# bconsole
Connecting to Director 127.0.0.1:9101
1000 OK: bacula-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
*status
Status available for:
     1: Director
     2: Storage
     3: Client
     4: All
Select daemon type for status (1-4): 1
bacula-dir Version: 5.0.3 (04 August 2010) i386-portbld-freebsd8.1 freebsd 8.1-RELEASE
Daemon started 06-Apr-11 15:52, 0 Jobs run since started.
 Heap: heap=0 smbytes=56,985 max_bytes=57,593 bufs=169 max_bufs=188

Scheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Differential   Backup    10  07-Apr-11 02:00    srv1-backup        *unknown*
Differential   Backup    10  07-Apr-11 02:00    srv2-backup        *unknown*
====

Running Jobs:
Console connected at 06-Apr-11 16:25
No Jobs running.
====
No Terminated Jobs.
====

Справку о других командах можно узнать с помощью команды help. Наиболее полезные из них – run и restore, которые соответственно запускают Job и восстанавливают данные из Job’а.

Webacula

Без лишних слов, это веб-интерфейс к bconsole.

За дистрибутивом последней версии Webacula идем на GitHub – https://github.com/
Кликаем Downloads, и там в подпункте Download Sources выбираем tar.gz.
Распаковываем содержимое, к примеру, в каталог /usr/share/webacula на сервер Bacula.

Для сведения, полная инструкция по установке Webacula находится в этом же архиве в файле webacula/docs/txt/install. Однако я расскажу, какие действия пришлось проделать мне.

1. Устанавливаем из портов Zend Framework, который нужен для работы Webacula.

# cd /usr/ports/www/zend-framework
# make config install clean

2. Правим файл application/config.ini, указываем там параметры подключения к базе данных PostgreSQL:

db.adapter = PDO_PGSQL
db.config.host = localhost
db.config.username = bacula
db.config.password = bacula
db.config.dbname = bacula
...
bacula.sudo = "/usr/local/bin/sudo"
bacula.bconsole = "/usr/local/sbin/bconsole"
bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf"

3. Даем HTTP-серверу (предполагаем что стоит Apache 2) доступ к выполнению команды bconsole, и проверяем:

# visudo
www ALL=(ALL) NOPASSWD: /usr/local/sbin/bconsole
# sudo -u www bconsole

4. Правим конфиг Apache2, к примеру скопировав файл /usr/share/webacula/install/apache/webacula.conf в каталог /usr/local/etc/apache2/Includes

5. У нас также должен стоять модуль mod_rewrite

6. Изменяем параметры для PHP в файле /usr/local/etc/php.ini:

memory_limit = 32M
max_execution_time = 3600

7. Правим параметры подключения к базе данных webacula/install/db.conf:

db_name="bacula"
db_user="bacula"
db_pwd="bacula"
webacula_root_user = "root"
webacula_root_pwd="secret"

8. И, наконец, заливаем схему базы данных в PostgreSQL:

# cd /usr/share/webacula/install/PostgreSql
# sudo -u bacula sh 10_make_tables.sh
# sudo -u bacula sh 20_acl_make_tables.sh

После этого у нас все должно нормально работать. Логинимся:
Login with your Webacula account

Кликаем Job – Run:
Creating Bacula Job

Видим, что Job запустился:
Running Bacula Job

Спустя некоторое время Job будет завершен, и можно из него что-нибудь восстановить:
Restoring From Bacula

Файлы восстановятся в каталог /tmp/bacula-restore, как указано в конфиге bacula-dir.conf, в Job srv1-RESTORE.

Послесловие

Больше обо всех опциях можно почитать здесь: Basic Volume Management

Если у вас что-то не заладится, то вы всегда можете начать с начала. Для этого нужно при остановленных службах Bacula почистить рабочий каталог и базу данных:

# /usr/local/etc/rc.d/bacula-dir stop
# /usr/local/etc/rc.d/bacula-sd stop
# rm /var/db/bacula/*
# echo "drop database bacula;" | psql postgres pgsql

Похожие статьи

One thought on “Система бекапирования Bacula”

  1. this one is no longer compatible with centos 6.3 bacula 5.2.13 and postgresql-9.2

Leave a Reply

Your email address will not be published. Required fields are marked *