Инструкции#

Подготовка ОС для поддержки консистентного резервного копирования#

Чтобы обеспечить консистентность мгновенных снимков при резервном копировании, необходимо установить и настроить QEMU Guest Agent, который используется сервисом резервного копирования для заморозки ввода/вывода в гостевой операционной системе. Для согласованности данных приложений в случае OC Linux помимо этого требуется дополнительная подготовка ваших приложений.

Подготовка ОС Windows#

Для обеспечения консистентности резервных копий экземпляров с ОС Windows достаточно установить QEMU Guest Agent. Он вызывает службу Volume Shadow Copy Service (VSS), которая выполняет заморозку файловой системы и приложений, например Windows SQL Server. Таким образом, никакой дополнительной настройки не требуется — VSS обеспечит необходимую подготовку совместимых приложений.

Чтобы установить QEMU Guest Agent на гостевую ОС Windows:

  1. Скачайте образ с пакетом qemu-guest-agent и драйверами.

  2. Cмонтируйте скачанный iso-образ внутри виртуальной машины.

  3. Установите драйвер Virtioserial.

    ../../_images/virtioserial.png
  4. Установите qemu-guest-agent.

    ../../_images/qemu-guest-agent.png
  5. Перезагрузите операционную систему.

Подготовка ОС Linux#

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

Обработчики представляют собой исполняемые утилиты/скрипты. Выполняемые обработчиком действия зависят от приложения, консистентность данных которого необходимо обеспечить. По умолчанию в образах, предоставляемых К2 Облаком, нет предустановленных обработчиков.

Примечание

Облако не получает информации о результатах выполнения обработчиков. Соответственно, консистентность означает согласованность данных только на уровне файловой системе (см. подробнее раздел Консистентность резервных копий). (Статус консистентности отображается в таблице ресурсов в разделе Резервные копии.)

Примечание

Данная инструкция предполагает использование ОС Ubuntu 20.04 и CentOS 8.2.

Установка QEMU Guest Agent#

  1. Для установки QEMU Guest Agent на гостевую ОС выполните следующие команды:

    apt install qemu-guest-agent
    systemctl enable qemu-guest-agent
    
    yum install qemu-guest-agent
    systemctl enable qemu-guest-agent --now
    
  2. Для заморозки приложений в unit-файле сервиса должен быть настроен запуск скрипта, который в свою очередь запускает необходимые обработчики (hooks):

    [Service]
    ExecStart=-/usr/sbin/qemu-ga -F/etc/qemu/fsfreeze-hook
    
    [Service]
    ExecStart=-/usr/bin/qemu-ga -F/etc/qemu-ga/fsfreeze-hook
    
  3. Перезапустите сервис:

    systemctl daemon-reload
    systemctl restart qemu-guest-agent
    

Подготовка обработчиков#

Необходимые исполняемые файлы обработчиков (hooks) следует сохранить в следующих каталогах:

/etc/qemu/fsfreeze-hook.d/
/etc/qemu-ga/fsfreeze-hook.d/

В качестве иллюстрации рассмотрим обработчик для обеспечения консистентности базы данных mariaDB в CentOS (пример приводится лишь в демонстрационных целях).

Файл обработчика /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh#
#!/bin/sh


case "$1" in
 freeze)
echo "Stopping MariaDB for consistent snapshot"
systemctl stop mariadb
echo "MariaDB service status: $(systemctl is-active mariadb)"
;;

 thaw)
echo "Starting MariaDB after snapshot"
systemctl start mariadb
echo "MariaDB service status: $(systemctl is-active mariadb)"
     ;;

 *)
     exit 1
     ;;
esac

В зависимости от переданного аргумента (freeze или thaw) при вызове обработчика выполняется один из двух блоков кода. В каждом из блоков кода вы можете описать свою логику и выводить нужные вам сообщения (см. раздел Диагностика работы агента и обработчиков).

Файл обработчика необходимо сделать исполняемым:

chmod u+x /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh

Процесс заморозки / разморозки#

Перед созданием снимка диска сервис резервного копирования отправляет QEMU Guest Agent команду freeze на заморозку ввода/вывода. Получив команду, агент вызывает указанный в настройках скрипт (см. шаг 2 установки QEMU Guest Agent), который в свою очередь запускает обработчики из каталога fsfreeze-hook.d. Каждому обработчику в качестве первого аргумента передаётся freeze.

Примечание

Результаты выполнения обработчиков никак не влияют на заморозку файловой системы. Мастер-скрипт просто записывает статус завершения обработчика в журнал (см. следующий раздел).

При заморозке после завершения выполнения обработчиков запускается команда fsfreeze, которая сохраняет кеш файловой системы на диск и замораживает ввод/вывод. При разморозке порядок обратный — сначала выполняется разморозка файловой системы, а затем запускаются обработчики (с аргументом thaw).

Диагностика работы агента и обработчиков#

Примечание

Облако не проверяет корректность работы обработчиков. Для самостоятельной проверки рекомендуем добавить отладочные сообщения в скрипты. Это позволит лучше понять происходящее по записям в журнале, где сохраняются ошибки и сообщения.

Агент пишет свой лог в системный журнал, например, в Centos его сообщения можно найти в /var/log/messaging:

Nov 23 13:38:05 ip-10-200-78-63 qemu-ga[10106]: info: guest-ping called
Nov 23 13:38:05 ip-10-200-78-63 qemu-ga[10106]: info: guest-fsfreeze called
Nov 23 13:38:05 ip-10-200-78-63 qemu-ga[10106]: info: executing fsfreeze hook with arg 'freeze'
Nov 23 13:38:07 ip-10-200-78-63 qemu-ga[10106]: info: executing fsfreeze hook with arg 'thaw'

Сообщения от пользовательских обработчиков, а так же статус их выполнения в случае ОС CentOS записываются в журнал /var/log/qga-fsfreeze-hook.log:

Thu Nov 23 13:38:05 MSK 2023: execute /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh freeze
Stopping MariaDB for consistent snapshot
MariaDB service status: inactive
Thu Nov 23 13:38:06 MSK 2023: /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh finished with status=0
Thu Nov 23 13:38:07 MSK 2023: execute /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh thaw
Starting MariaDB after snapshot
MariaDB service status: active
Thu Nov 23 13:38:07 MSK 2023: /etc/qemu-ga/fsfreeze-hook.d/example-hook.sh finished with status=0

Из записей в журнале видно, какие скрипты были выполнены, выводимые ими сообщения, а так же статус их завершения (exit code).

Примечание

Как правильно настроить и диагностировать работу агента, смотрите в описании своего дистрибутива, так как детали настройки могут отличаться от дистрибутива к дистрибутиву и даже от версии к версии.