« Молчание ягнят или как заткнуть APC | Комп и зомбоящик » |
Бэкап виртуалок.
В дано написано, что есть Bacula и есть виртуалки. Виртуалки, это хост с CentOS и KVM, управляемым через libvirt (т.е. стандартный для RH вариант). Под диски виртуалкам даны LVM-тома. Нужно забэкапить.
Дисклаймер: Написано криво. Если чо, я не виноват.
Поскольку Bacula умеет выполнять скрипты до и после собственно бэкапа, эта фича и была использована. Получилось такое два скрипта (один "до", другой "после") + мелкие довески.
Скрипт "до".
- Перебираем все виртуалки (XML-файлы libvirt'а) и выдергиваем оттуда имя виртуалки и ее LVM-том
- Если нужно, выполняем с виртуалкой какие-то действия (типа, остановки БД), дабы не получить битые файлы
- Делаем снапшот тома
- Если нужно, возвращаем виртуалку как бдыло (типа, снова запускаем БД)
- Поскольку том есть образ винтчестера, не получится его взять и замонтировать, нужно раздербанить его на отдельные разделы. Тут нам поможет Device Mapper. Разумеется, работаем со снапшотом, а не с оригиналом.
- Проходимся по замапленным разделам и монтируем все что не своп в отдельные папочки. Эти папочки потом и достаются Бакуле.
Скрипт "после":
- Проходится по папке с замонтированными разделами и отмонтируем все обратно
- Перебираем все виртуалки (XML-файлы libvirt'а) и выдергиваем оттуда имя виртуалки (от него зависит имя снапшота)
- Убираем маппинги для снапшотов
- Удаляем шнапшоты
Мелкие довески, это по два скрипта на каждую виртуалку, с действиями до и после выполнения снапшота. Собственно, скрипт с именем pre-VMNAME.sh стукается по ssh на виртуалку (да, нужна авторизация по ключу) и стопит MySQL, а скрипт post-VMNAME.sh так же запускает мускул обратно.
Бакуле в настройках задания указано такое:
Run Script {
Runs When = Before
Runs On Client = yes
Command = /root/bacula-scripts/1-pre-backup.sh
}
Run Script {
Runs When = After
# Даже если бэкап не выполнился, снапшоты все равно нужно убирать
Runs On Failure = yes
Runs On Client = yes
Command = /root/bacula-scripts/2-post-backup.sh
}
Итого, все виртуалки бэкапятся разом, практически on-line, не считая остановки баз данных на секунду-другую для снятия снапшота. Но в тукущем виде есть и пачка минусов.
- Нужно делать отдельные скрипты для каждой виртуалки требующей действий перед снапшотом. И раскидывать ключи для авторизации.
- В текущем виде нельзя бэкапить винду (которой там пока и нету). Т.е. можно конечно, ntfs благополучно замонтируется и забэкапится, но восстановить обратно до рабочего состояния системный раздел не получится. Нужно будет приделать ntfsclone для ntfs-разделов, но по времени это нифига не то же самое что монтирование.