На чём и как проще всего автоматизировать создание бэкапов KVM-машин?

Есть KVM-гипервизор с 20 виртуальными машинами. Каждый день нужно делать полные бэкапы некоторых машин. Пока приходится вручную с помощью Virsh выключать машины, делать бэкап, а потом включать снова.

Есть ли какое-нибудь средство, помимо скриптов bash, которое может помочь реализовать следующий сценарий ниже?
1. Инициировать выключение виртуальной машины.
2. Сделать полное копирование виртуальной машины (у меня они в формате qcow2 в виде одного единственного файла, очень удобно кстати, взял скопировал файл и всё готово).
3. Включить виртуальную машину.
4. Сделать shrink скопированной виртуальной машины (точнее, её виртуального hdd), чтобы размер стал реальным (делаю с помощью qemu-image).
5. Сжать tar bzip.
6. Запустить создание бэкапа следующей виртуальной машины (пункты с 1 по 5).
  • Вопрос задан
  • 1858 просмотров
Пригласить эксперта
Ответы на вопрос 3
@younghacker
Соглашусь с 3ton по поводу LVM. Но делать резервную копию по-живому это экстрим.
Можете получить полуобновлённую базу данных, полуживую файловую систему и так далее. За исключением того что сделаете копию не только диска но и памяти и в момент паузы виртуальной машины.
Без доступа внутрь виртуалки нельзя гарантировать что на диск сброшены все данные.
Мой совет - пересмотрите технологию бэкапов.

Я практикую следующий подход:
Перед обновлением системы на сервере делаю полный бэкап по следующей схеме.
  1. Остановка виртуалки (виртуалки реагируют на ACPI снаружи)
  2. Снапшот LV привязанного к виртуалке.
  3. Старт виртуалки.
    При использовании скриптов (не вручную) даунтайм получится практически равным рестарту виртуалки.
  4. Обновление (системы) Если обновляется кернел то делаю по аналогичной схеме делаю второй LV снапшот.
  5. копирование снапшота(ов)
  6. удаление снапшотов.
Имейте ввиду что необходимо иметь запас места для снапшота на время его жизни (копирования) так как свободное место на LVM начнёт быстро таять как только виртуалка начнёт активно изменять данные на своём диске.

Тоесть нет смысла ежедневно делать резервную копию того что не изменялось (система и программы).

А ежедневные бэкапы делаю при помощи скриптов + bareos/bacula.
Такой подход в целом уменьшает размер резервных копий.

Ну и хорошо после создания бэкапа делать его восстановление и проверку.
Для виртуалки обычно хватает разворачивания на другом физическом сервере (чтобы небыло конфликтов) и проверки запущенности всех важных сервисов и доступности баз данных (тестовые скрипты).

Далее можно оптимизировать. Не бэкапить swap виртуалок. Его можно убрать при копировании снапшота. А лучше swap выдавать отдельным LV. Тогда его не нужно и снапшотить.
В виртуалках я также по аналогии с отдельным свапом делаю отдельные диски для DB, логов, и так далее. Всё это позволяет ужать размер бэкапа системы до 3-5 гиг в несжатом виде.
Ответ написан
Смотрите в сторону bdsync и bdsync-manager
Возможно что-то придется доделать, но куда же без этого
Ответ написан
Комментировать
@3ton
В свое время(лет 5-6 назад) тоже задавался таким вопросом, решено было сделать на LVM. Теперь все просто решается клоном LVM и даже не выключаю виртуалки. У меня другой к Вам вопрос, а сколько у вас ядер? Если не ошибаюсь рекомендации к ядрам - не меньше чем кол-во виртуалок+хостовая.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы