Если вы настраивали аварийное восстановление для OpenStack, то знаете частую проблему: при отказе от Ceph организация безагентной инкрементальной репликации требует поиска альтернативных способов отслеживания изменений.

Самым очевидным кандидатом на эту роль выступает механизм QEMU Dirty Bitmaps — это хорошо изученный в экосистеме KVM/QEMU способ отслеживания измененных блоков (CBT). Однако его использование в OpenStack упиралось в отсутствие штатного API на уровне управляющего слоя. Из-за этого приходилось выбирать между двумя крайностями: строить инфраструктуру исключительно на Ceph или ставить агенты внутрь каждой гостевой ОС.

Ниже расскажу, с какими ограничениями сталкивались наши пользователи раньше, как мы переписали логику работы с инкрементальными данными на уровне гипервизора и что еще полезного появилось в релизе «Хайстекс Акура 4.6».

Полная и инкрементальная репликация из OpenStack независимо от типа СХД

Раньше для инкрементальной репликации из OpenStack в «Хайстекс Акура» требовался прямой доступ к Ceph. В версии 4.6 мы вынесли отслеживание изменений на уровень гипервизора QEMU/KVM и полностью сняли это ограничение. Что это дает:

  • Полную безагентность: больше не нужно ставить сторонний софт в гостевые ОС.

  • Поддержку любых СХД: решение выполняет инкрементальную и полную репликацию через Cinder.

Первая репликация всегда выполняется полностью. В последующих циклах система вычитывает только изменившиеся блоки через QEMU Dirty Bitmaps.

Важная деталь: так как dirty bitmaps хранятся в памяти процесса QEMU, исходная ВМ должна оставаться включенной между циклами. Если процесс QEMU останавливался или перезапускался, следующая репликация автоматически выполнится в полном объеме, после чего инкрементальная цепочка продолжится.

Чтобы безопасно забирать dirty bitmaps с compute-нод, мы выделили эту логику в отдельный сервис — Bitmap Manager, который выполняет роль ограниченного прикладного шлюза. Учитывая жесткие требования регуляторов и служб безопасности, поддерживаются два сценария развертывания:

  1. Удаленное размещение: сервис запускается в управляющей зоне, подключается к Libvirt по SSH и вычитывает метаданные NBD по TCP. Подходит для контуров, где запрещено ставить сторонние компоненты на compute-ноды.

  2. Локальное размещение: сервисный контейнер разворачивается непосредственно на compute-ноде и общается с Libvirt и QEMU через локальные UNIX-сокеты. Это полностью исключает необходимость открывать SSH и выводить NBD-порты в сеть.

При этом сам внешний агент репликации запускается как отдельная ВМ в OpenStack. Он общается с OpenStack API, который создает snapshot/image и подключает временный том к Агенту. Агент вычитывает данные как из обычного блочного устройства, используя карту блоков, полученную от Bitmap Manager.

Рис. 1. Варианты размещения Bitmap Manager: удаленное (в управляющей зоне) и локальное (на compute-ноде OpenStack)
Рис. 1. Варианты размещения Bitmap Manager: удаленное (в управляющей зоне) и локальное (на compute-ноде OpenStack)
Рис. 2. Схема взаимодействия агента репликации, Bitmap Manager и  API OpenStack при вычитке измененных блоков
Рис. 2. Схема взаимодействия агента репликации, Bitmap Manager и  API OpenStack при вычитке измененных блоков

Аварийное восстановление для  изолированных контуров

Технология Direct2Target (D2T) впервые появилась в «Хайстекс Акура» для миграции виртуальных машин на площадки, где развернуть промежуточное объектное хранилище невозможно или нецелесообразно: агент записывает данные сразу на диски целевой платформы. В версии 4.6 D2T адаптирован под DR-сценарии, в том числе когда прямое API-подключение к целевой площадке недоступно. Поэтому теперь D2T определяет, куда именно попадают данные на целевой стороне. А за сетевую маршрутизацию отвечает интегрированная технология Receiver Mesh: агенты репликации обмениваются данными напрямую друг с другом, минуя контроллер «Хайстекс Акура».

Вместе это позволяет строить сценарии миграции и аварийного восстановления в полностью изолированных контурах, где недоступны ни объектное хранилище на приемной стороне, ни прямой сетевой маршрут к нему.

Дополнительно в рамках D2T расширена поддержка форматов образов — теперь система «из коробки» понимает raw, qcow2, VMDK, OVA и ISO, и повышена стабильность работы пользовательского интерфейса.

Другие изменения в релизе 4.6

Помимо механизмов CBT и D2T, в новую версию вошли платформенные и системные обновления:

  • Миграция на PostgreSQL. База данных решения переведена на PostgreSQL. Для пользователей процесс обновления проходит без изменения текущих регламентов и рабочих процессов.

  • Оптимизация работы агентов. Повышена надежность операций подключения и отключения (attach/detach) временных томов Cinder. Ускорена обработка файловых резервных копий при нестабильном сетевом соединении.

  • Расширение поддержки ОС. Добавлена совместимость с новыми дистрибутивами и ядрами Linux, включая RHEL 9.8, RHEL 10.2 и Ubuntu 26.04.

Требования к инфраструктуре для внедрения CBT

Перед пилотным тестированием рекомендуется проверить соответствие среды следующим условиям:

1. Подготовка и настройка окружения

  • Выберите один гипервизор и разверните связанный экземпляр Bitmap Manager — на отдельной управляющей машине или локально на compute-ноде.

  • Настройте аутентификацию по токену и необходимые права Libvirt.

    • Для удаленного варианта дополнительно настройте SSH-доступ, правила межсетевого экрана и TLS PSK для NBD.

    • Для локального варианта настройте работу через UNIX-сокеты и изоляцию сервисного контейнера.

  • Убедитесь, что Bitmap Manager корректно обнаруживает тестовую ВМ и вызывает строго заявленный набор QMP-команд.

2. Проверка CBT и базовых сценариев репликации

  • Выполните первую полную репликацию виртуальной машины типа boot-from-volume.

  • Внесите изменения в данные ВМ и убедитесь, что платформа вычитывает исключительно изменившиеся диапазоны блоков.

  • Подтвердите, что процедура создания снимка запущенной ВМ проходит без остановки процесса QEMU.

3. Валидация жизненного цикла дисков

  • Проверьте корректность цепочки операций с временными дисками: создание, монтирование (attach), чтение данных, размонтирование (detach) и удаление.

  • Протестируйте ВМ с максимально допустимым в вашей инфраструктуре числом дисков и проверьте точность сопоставления устройств (disk mapping).

4. Отработка сбойных и специфических сценариев

  • Выполните остановку или перезагрузку ВМ (power-off / reboot) и подтвердите штатный переход следующего цикла к полной репликации.

  • Совместно с администратором OpenStack отработайте процедуру восстановления при таймаутах и зависании подключений томов (stuck attachment).

  • Если сценарии входят в рамки проекта, отдельно проверьте репликацию boot-from-image ВМ, поведение при живой миграции (live migration) и работу в условиях доступа между разными проектами OpenStack (cross-project access).

Дистрибутивы «Хайстекс Акура 4.6» и документация по развертыванию доступны в личном кабинете. Запрашивайте демо по ссылке. А если у вас специфический сетап OpenStack — добро пожаловать в комментарии.