Bareos: Бекап VMware для непритязательных
Сегодня, в день резервного копирования, хочется написать с одной стороны что-то лёгкое и простое, а с другой стороны полезное. Сегодня мы все поглощены импортозамещением и переходом на бесплатные продукты. Но с бесплатными продуктами для резервного копирования всё обстоит немного плохо. Давайте сегодня развернём Bareos, ведь у него есть бесплатный плагин для резервного копирования VMware и oVirt’а и посмотрим насколько он хорош для резервного копирования виртуальных машин. Да и вообще у меня давненько уже не проскакивало туториалов по Linux, надо навёрстывать упущенное.
Если кто давно читает мой блог, то знает, что я начинал свой путь в Linux с Gentoo и довольно много писал про работу с ним. Но эти времена игр давно прошли. Когда я стал использовать Linux в бОльших объёмах, я перешёл на использование пакетных дистрибутивов и полюбил CentOS, но с приходом Stream от этой операционный системы я решил отказаться и перешёл на Debian, поэтому сегодня Bareos мы будем разворачивать именно на этой операционной системе. Но оставим лирику и перейдём к установке. Для этого нам необходимо подключить репозиторий Bareos. Можно это сделать вручную, но вообще у Bareos есть даже специальный шелскрипт, который сделает всё за нас. Скачиваем его и запускаем
wget https://download.bareos.org/current/Debian_11/add_bareos_repositories.sh chmod +x add_bareos_repositories.sh ./add_bareos_repositories.sh
После этого обновляем данные репозиториев и устанавливаем
apt update apt install postgresql postgresql-contrib bareos
В качестве базы данных Bareos использует postgresql (прям свет клином у меня на нём сошёлся в последнее время). В принципе он и сам его может подтянуть из зависимостей, но я столкнулся с тем, что в этом случае не создаётся пользователь postgres и фэйлится развёртывание базы Bareos, так что лучше поставить его самостоятельно. Установка займёт пару минут, после чего мы сможем перейти к конфигурированию для нашей первой резервной копии.
Прежде чем запустить все сервисы, давайте сразу сменим директорию, куда будем складывать резервные копии, а то класть её в / мне не сильно нравится. У меня это будет отдельный диск, смонтированный в /mnt/backup/ и нам необходимо внести следующее изменение в файле /etc/bareos/bareos-sd.d/device/FileStorage.conf:
Archive Device = /mnt/backup
После этого можно запустить сервисы Bareos
systemctl start bareos-dir systemctl start bareos-sd systemctl start bareos-fd
И проверить, что всё запустилось корректно
systemctl status bareos-dir bareos-sd bareos-fd
Несмотря на то, что сам я любитель сидеть в консоли, просмотр выполняющихся заданий из консоли Bareos мне не очень понравился, поэтому я решил установить web-gui, возможно и вам он окажется полезен, тем более, что устанавливается так же просто, как и сам Bareos и не требует конфигурирования.
apt install libapache2-mod-php bareos-webui systemctl reload apache2
После этого нам необходимо зайти в консоль Bareos и создать пользователя для webui
bconsole
В консоли Bareos выполняем следующие команды
reload configure add console name=admin password=secret profile=webui-admin tlsenable=false
После этого можно зайти по адресу http://ip/bareos-webui/ и проверить возможность входа и работу веб-интерфейса.
Теперь первым делом нам необходимо поставить плагин для поддержки VMware. Плагин устанавливается отдельным пакетом
apt install bareos-vmware-plugin
Так же нам потребуется установить VMware SDK, лучше всего делать это не через пакетный менеджер ОС, а через pip, это гарантирует более свежую версию пакета
pip3 install pyvmomi
После этого необходимо в конфигурационном файле /etc/bareos/bareos-fd.d/client/myself.conf включить поддержку плагинов
Plugin Directory = "/usr/lib/bareos/plugins" Plugin Names = python
Обращаю отдельно внимание, что python написано без кавычек, хотя в конфиге по дефолту кавычки стоят, но в этом случае мы получим ошибку
Command plugin requested, but is not loaded
так что у имени плагина не ставьте кавычки
Бекапим
Теперь мы можем приступить к тому, что бы поставить на РК нашу первую виртуальную машину. Для этого нам необходимо описать сущность FileSet, в котором будет описано подключение к vCenter и источник резервного копирования. FileSet создаётся индивидуально для каждого задания резервного копирования и описывает что именно должно быть включено в резервную копию. В нашем случае мы описываем с какими параметрами подключаться к vCenter, где именно и какую именно виртуальную машину нужно искать и что работать с VMware мы будем при помощи плагина bareos-fd-vmware. Так же здесь включается и сжатие
/etc/bareos/bareos-dir.d/fileset/nginx-int-bareos.conf
FileSet { Name = "nginx-int-bareos_fileset" Include { Options { signature = MD5 Compression = GZIP } Plugin = "python" ":module_path=/usr/lib/bareos/plugins" ":module_name=bareos-fd-vmware" ":dc=Datacenter:folder=/lab/backups/sources" ":vmname=nginx-int-bareos" ":vcserver=vc.korphome.local" ":vcuser=backupagent@vsphere.local" ":vcpass=" ":vcthumbprint=B88AD1B5A7076F4D6D4F4E59EB81B7D08659B3BA" } }
dc — название datacenter
folder — папка с VM, по-умолчанию корень
vmname — имя виртуальной машины
vcserver — адрес сервера
vcuser — логин юзера специально заведенного для работ с бэкапом
vcpass — его пароль
vcthumbprint — thumbprint сертификата vCenter
Как получить thumbprint?
echo -n | openssl s_client -connect _адресс_vcenter:443 2>/dev/null | openssl x509 -noout -fingerprint -sha1 | tr -d ":"
Остальные параметры думаю не нуждаются в более глубоком разбирательстве
Теперь нам остаётся сделать само задание
/etc/bareos/bareos-dir.d/job/nginx-int-bareos.conf
Job { Name = "nginx-int-bareos" JobDefs = "DefaultJob" FileSet = "nginx-int-bareos_fileset" }
Примечание: по-умолчанию, при создании виртуальной машины у неё выключен CBT. Если энтерпрайз продукты умеют сами этот параметр включать, то Bareos этого не делает при запуске задания на первый Full бэкап и это необходимо делать вручную. Для этого у Bareos есть скрипт vmware_cbt_tool.py, который необходимо натравить на нужную нам виртуальную машину
/usr/sbin/vmware_cbt_tool.py -s vc.korphome.local -u backupaget -p Passw0rd -d Datacenter -f / -v nginx-int —enablecbt
-s — адрес vCenter
-u — пользователь на vCenter
-p — пароль
-d — датацентр
-f — папка с VM, корень по-умолчанию
-v — название VM
—enablecbt — включает CBT для виртуальной машины
Теперь заходим в bconsole, делаем reload и запускаем фульник нашего задания
run job=nginx-int-bareos level=Full
За процессом можно наблюдать из bconsole с помощью команды messages, но на мой взгляд это удобнее делать через web-gui
Восстанавливаем
Восстановление на мой взгляд удобнее производить как раз из web-gui, т.к. в консоли искать бекапы и помечать их на восстановление не слишком наглядно.
В поле «Задание резервного копирования» мы выбираем точку, из которой мы хотим восстановиться. Причём, если мы восстанавливаемся из инкрементной резервной копии, то нам необходимо в поле «Объединить все задания до последнего полного резервного копирования вместе» выбрать «Да», иначе Bareos накатит просто инкремент на имеющуюся виртуальную машину и работоспособной системы мы не получим
Можно воспользоваться альтернативным выбором точки восстановления, т.к. искать их в большом выпадающем списке не всегда удобно
Переходим в раздел «Задания», фильтруем по нужному нам имени виртуальной машины и нажимаем кнопку восстановления и попадаем в мастер восстановления с уже выбранной данной точкой. Ну а так выглядит лог корректного восстановления виртуальной машины
Если же мы хотим восстановить из резервной копии в новую виртуальную машину, то в поле Plugin options нам необходимо указать дополнительные параметры
python:restore_datastore=B-NVME-2:vmname=AD-restored:restore_powerstate=off
restore_datastore — на какой датастор мы будем восстанавливать ВМ
vmname — имя машины (соответственно должно отличаться от оригинальной)
restore_powerstate=off — восстанавливаем и не включаем, т.к. машина получит те же сетевые настройки, дабы не повлиять случайно на продуктив. При этом UUID и MAC адреса генерируются новые
При этом при помощи дополнительных параметров мы можем восстановить виртуальную машину и в другой кластер, например. Полный список дополнительных параметров описан на странице плагинов в самом конце.
И в заключении хочется сказать, что данному продукту конечно ещё не хватает очень многого, к чему мы привыкли с энтерпрайз продуктами для резервного копирования. Не хватает гибкости и удобства, большего функционала и удобства использования. Именно поэтому в заголовке я говорил именно о непритязательных пользователях, т.к. этого минимального набора функционала достаточно для простого резервного копирования и восстановления виртуальных машин VMware без дополнительных возможностей, но ведь зато продукт бесплатен и не имеет никаких ограничений, а что ещё могло бы с ним конкурировать в этом ключе? Veeam Community Edition конечно очень хорош даже в несколько урезанном виде, но он ограничен и по числу инстансов всего 10-ю, так что в случае большей инфраструктуры этот продукт уже не подойдёт.