Система Orphus

пятница, 10 апреля 2015 г.

Bareos (Bacula). Облегчаем развертывание и добавление заданий.

Если вы не знаете bareos/bacula, то эти скрипты и пост вам не помогут. Чтение официальной документации ни кто не отменял. Эта статья для тех, кто уже знаком с данным ПО.
С давних времен для резервного копирования данных я использовал bacula. Это хорошая, надежная, открытая и свободная система резервного копирования. Хотя и отпугивает новичков, т.к. весь процесс настройки заключается в правке конфигурационных файлов, где есть "пересекающиеся" опции, например, пароли.
Недавно решил перевести свои бэкап-сервера на bareos. Причина проста - бакула со своей политикой поддастала.
Но вот ручками на всех серверах прописывать конфиги не охото как-то... Решил написать парочку скриптов. В общем, об этом речь и пойдет в этом посте.


Все скрипты и остальные файлы можно взять в git-hub резоитории bareos_init.
Так как я использую MariaDB (форк MySQL), то скрипты и конфиги "заточены" под нее.

В каталоге "backup_scripts" шаблон скрипта и скрипт для бэкапа базы данных bareos. Когда нужно бэкапить базу, я закидываю на сервер файл "backup_scripts/zzz_template_mysql_dump.sh" в каталог "/etc/bareos/scripts" и даю ему осмысленное имя, например, "mail_mysql_dump.sh" (для почтового сервера). В самом скрипте надо подправить переменные, их значения будут переданы утилите mysqldump:
HOST=localhost
USERNAME=root
PASSWORD=Pa$$w0Rd
BACKUP_DIR=/tmp          # куда сохранять дампы баз
DATABASES=("" "mysql")   # какие базы бэкапить
Думаю, тут все понятно. Скрипт так же проверяет, есть ли старые дампы и если есть, предварительно удаляет их.

В каталог "helpers" сложены конфиги bareos с комментариями, в которых поясняется для чего та или иная директива. Это своего рода памятка.

В каталоге "scripts" собраны несколько вспомогательных скриптов, которые я использую в процессе работы. В том числе, в этом каталоге находится скрипт "add_job.sh", который облегчает добавление новых заданий (к нему вернемся позже). По мере написания новых скриптов, я буду добавлять их в этот каталог.

Каталог "templates" - основа этой "работы". В нем находятся шаблоны конфигов bareos. Вот его структура:
./bareos_init/templates
├── bareos-dir.conf.d/
│   ├── bareos_server.conf
│   ├── restore.conf
│   └── zzz_jobs.template
├── bareos-fd.conf.d.gen/
│   └── zzz_bareos-fd.template
├── bareos-sd.conf.d/
│   ├── bareos_server.conf
│   ├── restore.conf
│   └── zzz_devices.template
├── inc.d/
│   ├── dir_client.conf
│   ├── dir_fileset_nix.conf
│   ├── dir_fileset_win.conf
│   ├── dir_pool.conf
│   ├── dir_storage.conf
│   └── sd_device.conf
├── bareos-dir.conf
├── bareos-fd.conf
├── bareos-sd.conf
└── bconsole.conf
Разберем, что есть что...
Файлы
  • bareos-dir.conf - конфиг основного демона bareos - director'a
  • bareos-sd.conf - конфиг демона хранения (storage daemon)
  • bareos-fd.conf - конфиг клиента или файлового демона (file daemon)
  • bconsole.conf - конфиг консоли bareos
Каталоги
  • bareos-dir.conf.d/ - в этот каталог складываются файлы "заданий", т.е. конфиги, в которых определены ресурсы client, schedule, fileset, job, pool'ы и storage; эти конфиги подключаются (инклюдятся) в bareos-dir.conf
  • bareos-fd.conf.d.gen/ - сюда складываются сгенерированные конфиги для клиентов, которые потом можно скопировать на сервер-клиент, который будем бэкапить
  • bareos-sd.conf.d/ - тут "оседают" конфиги для сервера хранения, по одному конфигу для каждого задания; эти конфиги подключаются (инклюдятся) в bareos-sd.conf
  • inc.d/ - здесь хранятся "куски" конфигов, которые являются общими для разных заданий, как бы своего рода "настройки по умолчанию"

Скрипт "initialize_bareos_configs.sh" использует эти каталоги, для первичной инициализации конфигурации bareos.
Имейте ввиду, что скрипт ни о чем не спрашивает и ничего не сообщает, а сразу берется за работу (при запуске он попросит подтверждение).
Предварительно надо задать переменные, как минимум из "группы" "Переменные :: можно редактировать".
Все переменные, да и сам скрипт в целом, хорошо прокомментированы, думаю тут сложностей ни у кого не возникнет.
Данный скрипт сначала делает бэкап каталога "/etc/bareos", если такой есть, потом копирует в него содержимое каталога "templates", правит файлы-конфиги, согласно заданным переменным, потом туда же копирует каталоги "backup_scripts", "helpers", "scripts" и "templates". Затем создает файл "/etc/bareos/templates/.initialize_variables", в который сохраняет все переменные и их значения, которые были использованы для наполнения конфигов во время работы скрипта. Если существует конфиг bareos_webui, то настраивает так же и его.
После работы скрипта каталог "/etc/bareos" выглядит так:
/etc/bareos
├── backup_scripts/
├── bareos-dir.conf.d/
├── bareos-fd.conf.d.gen/
├── bareos-sd.conf.d/
├── helpers/
├── inc.d/
├── scripts/
├── templates/
├── bareos-dir.conf
├── bareos-fd.conf
├── bareos-sd.conf
└── bconsole.conf
Все каталоги по своему назначению соответствуют описанным выше.


Вернемся к скрипту add_job.sh и разберем как он работает. Если запустить скрипт без параметров, то он выдаст справку:
Usage: add_job.sh -n job_name -a client_address [-P|-p "pass"] [-d "/path/to"]

  -n|--name job_name            - job name (no spaces)
  -a|--address client_address   - clien hostname or ip address
  -p|--password "pass"          - client password
  -P|--gen-pass                 - forced password generation and set for client (override -p)
  -d|--directory "/path/to"     - directory, where backup's files will be stored
  --version                     - no comments ;)
  --help                        - this help
  --readme                      - a few words from the developer...

А вот что такое "--readme", просто, чтобы вы знали:
"Этот скрипт для того, чтобы можно было быстро добавить новое задение. Для работы скрипт использует переменные, заданные внутри него, параметры запуска, и файлы:
/etc/bareos/bareos-dir.conf.d/zzz_jobs.template
/etc/bareos/bareos-sd.conf.d/zzz_devices.template
/etc/bareos/bareos-fd.conf.d.gen/zzz_bareos-fd.template
Вы можете отредактировать эти переменные и файлы "под себя", чтобы скрипт добавлял задания с нужными вам параметрами. На данный момент, скрипт не умеет создавать ресурсы 'pool' и 'schedule', поэтому после добавления задания, скрипт предлагает отедактивать файл. Пока у меня нет представления, как бы это реализовать, а делать по принципу мастера (вопрос-ответ) не хочется (не нравится мне такой подход и я считаю его не правильным)."

Для начала, очень желательно, открыть скрипт в любимом редакторе и изменить "под себя" переменные из "раздела" "### --> Переменные :: можно менять". А так же прочитать комментарии в скрипте, как минимум те, которые относятся к переменным.

Думаю, лучше всего пояснить работу скрипта на примере. Если запустить скрипт с такими параметрами
add_job.sh -n mail_server -a 10.1.1.1 -P
то он сделает вот что:
  • Если есть хоть один из файлов bareos-dir.conf.d/mail_server.conf, bareos-sd.conf.d/mail_server.conf или bareos-fd.conf.d.gen/mail_server.bareos_fd.conf существует, то скрипт скажет, что такое задание уже есть и спросит, хотите ли его перезаписать
  • Если есть хоть один из файлов bareos-dir.conf.d/mail_server.conf, bareos-sd.conf.d/mail_server.conf или bareos-fd.conf.d.gen/mail_server.bareos_fd.conf, то скрипт сделает рядом с ним (файлом) его бэкап
  • Скопирует шаблоны в новые файлы, например, zzz_jobs.template будет скопирован в файл mail_server.conf, и настроит права на эти файлы
  • Создаст каталог назначения, где будут храниться файлы-бэкапы
  • Проверит в bareos-dir.conf и bareos-sd.conf, есть ли такие отключенные (закомментированные) инлюды на созданные файлы и если есть, предложит включить, а если нет, добавит
  • В созданных файлах пропишет значения для директив, которые определены в переменных и/или задаются через параметры запуска скрипта
  • Предложит открыть и отредактировать файл bareos-dir.conf.d/mail_server.conf
  • После редактирования файла или отказа от него, скрипт сообщает, куда сохранил конфиг для клиента: "Client settings saved to the file /etc/bareos/bareos-fd.conf.d.gen/mail_server.bareos_fd.conf"
  • Проверяет, доступен ли уже клиент и выводит сообщение о результате проверки.
  • Предлагает перезагрузить bareos, чтобы вступили в силу новые настройки
  • Если согласились на перезапуск, то предлагает проверить fileset
  • Если не согласились, то напоминает, как это можно сделать самому

В файле "bareos-dir.conf.d/mail_server.conf" надо изменить:
  • В ресурсе "schedule" надо задать время запуска задания и его уровень (полный, инкрементальный, дифференциальный).
  • Если задание содается для windows машины, то в ресурсе "fileset" надо расскомментировать строку "@/etc/bareos/inc.d/dir_fileset_win.conf" и закомментировать или удалить "@/etc/bareos/inc.d/dir_fileset_nix.conf". А так же прописать (добавить/изменить) директивы "File" (!!! правила читай в helpers/helper.jobs.conf !!!). Если список исключений не нужен, то можно удалить подресурс "Exclude".
  • В ресурсе "job" желательно закомментировать не нужные pool'ы (директивы "* Backup Pool"). Если нужно выполнить на клиенте какие-либо действия перед запуском задания, то нужно раскомментировать и отредактировать директиву "Client Run Before Job", если после - подресурс "RunScript" (!!! правила читай в helpers/helper.jobs.conf !!!).
  • Остались ресурсы "pool". Если в ресурсе "job" были закомментированы не нужные пулы, то стоит закомментировать соответствующие ресурсы "pool". Так же нужно, в каждом pool'е, задать значения для директив Maximum Volumes (сколько всего томов может быть), Volume Retention (сколько хранить в БД информацию о томе), JobRetention (... о задании), FileRetention (... о файлах, которые в томе) (!!! подробнее в helpers/helper.jobs.conf !!!). Например, если мне надо хранить бэкап месяц и делать их каждый день, то я задаю 33 дня для всех "*Retention" и 35 томов для "Maximum Volumes" (подстраховка).



Пару слов о том, как я ставил bareos

(чтобы самому не забыть)

Где взять Bareos: www.bareos.org. В документации рассказано, как подключить репозитории и поставить пакеты из них для разных дистрибутивов.
Веб интерфейс лежит в репозитории на github'e. Там же подробно рассказано про установку и подключение репозитория для разных дистрибутивов.


Речь пойдет о Debian 7, т.к. использую его.
Подключение репозиториев и установка пакетов:
echo 'deb http://download.bareos.org/bareos/release/latest/Debian_7.0/ /' >> /etc/apt/sources.list
wget -qO- http://download.bareos.org/bareos/release/latest/Debian_7.0/Release.key | apt-key add - 
echo 'deb http://mirror.timeweb.ru/mariadb/repo/10.0/debian wheezy main' >> /etc/apt/sources.list
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db 
echo 'deb http://download.bareos.org/bareos/contrib/Debian_7.0/ /' >> /etc/apt/sources.list
wget -qO- http://download.bareos.org/bareos/contrib/Debian_7.0/Release.key | apt-key add -
aptitude update
aptitude install mariadb-server
aptitude install bareos-director bareos-filedaemon bareos-storage bareos-database-mysql bareos-tools bareos-bconsole bareos-webui apache2-mpm-prefork
MariaDB я ставлю отдельно, самой первой. По опыту, так лучше все настраивается "из коробки".

Настройка базы данных для работы веб-интерфейса:
/usr/lib/bareos/scripts/bareos-config get_database_grant_priviliges mysql bareos_webui_user 'xie4Quae.j' readonly > /tmp/database_grant_privileges.sql
mysql -p < /tmp/database_grant_privileges.sql
mysqladmin -p flush-privileges
rm /tmp/database_grant_privileges.sql
Далее подготавливаю место для хранения бэкапов. У меня сервера виртуальные (VMWare ESX), поэтому и пишу эти строки исходя из этого. Чтобы в будущем не мучиться с емкостью дисков под хранение бэкапов, было решено использовать LVM.
aptitude install lvm2
fdisk /dev/sdb
  n
  [enter][enter][enter]
  t
  8e
  w
pvcreate /dev/sdb1 /dev/sdc1 
vgcreate bareos /dev/sdb1 /dev/sdc1 
lvcreate -l 100%FREE -n backups bareos
mkfs.ext4 /dev/bareos/backups
tune2fs -m 0 /dev/bareos/backups
tune2fs -r 0 /dev/bareos/backups
mkdir /mnt/backups
echo '/dev/bareos/backups /mnt/backups ext4 rw,noexec,nouser,async,nosuid 0 0' >> /etc/fstab
mount -a
Что тут происходит... Ставлю lvm2. fdisk'ом размечаю диски (показан только один диск) - создаю по одному разделу но всю емкость диск и назначаю ему тип 8e (Linux LVM). Далее добавляю созданные разделы в физические тома LVM, потом создаю группу томов bareos из этих разделов и из этой группы делаю один диск (логический том) на всю емкость группы с именем backups. Форматирую созданный том. Отключаю резервирование пространства. Создаю каталог, для монтирования. Добавляю в fstab запись, чтобы том монтировался во время загрузки ОС и монтирую его.
Добавление диска (например, когда закончится место) Сначала надо создать диск в vsphere для машины, где стоит демон хранения bareos (или подключить к физическому серверу, если виртуализация не используется).
echo "- - -" >/sys/class/scsi_host/host3/scan
fdisk /dev/sdd
  n
  [enter][enter][enter]
  t
  8e
  w
pvcreate /dev/sdd1
vgextend bareos /dev/sdd1
lvextend -l +100%FREE /dev/bareos/backups
resize2fs -p /dev/bareos/backups
Тут все как и выше, за исключением первой и трех последних команд. vgextend расширяет группу томов на новый диск, далее расширяем логический том на все доступное пространство группы и потом расширяем файловую систему на все доступное дисковое пространство. Эти операции можно делать "на горячую". Первая команда позволяет подключить новый диск без перезагрузки сервера (тестировал только на vmware esx). Не всегда и не у всех будет host3 (см. путь файла). Можно посмотреть какие каталоги есть в "/sys/class/scsi_host/host*" и сделать запись во все (это не опасно).
Теперь в работу включается скрипт initialize_bareos_configs.sh, после чего делаю перезапуск всех демонов bareos, например, так:
/etc/bareos/scripts/all-bacula-stop ; /etc/bareos/scripts/all-bacula-start
Проверить все ли верно настроено для веб-интерфейса - http://your-hostname/bareos-webui/install/test
Сам веб-интерфейс искать тут - http://your-hostname/bareos-webui/
Ссылки:
UPD: Настройка passive mode
  • В ресурсе Client{} надо прописать директиву "Passive = yes" (в bareos-dir.conf.d/client-name.conf)
  • Сделать reload демонта bareos-dir (либо выполнить команду reload в bconsole)
  • На клиенте в ресурсе Client{} прописать директиву "Compatible = no" (в bareos-fd.conf)
  • Сделать restart демона bareos-fd (reload мне не помог; на restart я получал failed, но pid процесса bareos-fd менялся (не разбирался))
Информация с сайта http://blog.angel2s2.ru/.

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

0 коммент.:

Отправить комментарий