VK Object Storage logo
Помощь
Обновлена 20 августа 2026 г. в 21:45

Асинхронная репликация

Асинхронная репликация синхронизирует метаданные управления и данные объектов между несколькими инсталляциями VK Object Storage (multisite). В любой момент времени ровно одна инсталляция выступает в роли Active (активная) и принимает изменения, остальные — Passive (пассивные).

Управление конфигурацией multisite выполняется через утилиту HB CLI — группа команд hb multisite.

В разделе:

Правила

При работе multisite соблюдаются следующие правила:

  • В любой момент времени ровно одна инсталляция (пир) обладает ролью Active и может принимать изменения метаданных, синхронизируя их на остальные пиры.
  • Каждая инсталляция имеет неизменяемый идентификатор (id) и версию (s3_version) в конфигурации.
  • Каждая инсталляция должна быть сконфигурирована. Узел не принимает изменения от неизвестного пира.
  • Процесс синхронизации может быть запущен в один момент времени только на одном пире.
  • Направление синхронизации данных (data sync) переключается автоматически при смене ролей Active-Passive.
  • На инсталляции в один момент времени не может быть запущено более одного meta_resync.
  • На инсталляции в один момент времени не может быть запущено более одного data_resync для одного бакета.

Команды управления конфигурацией

Управление multisite выполняется командой hb multisite с подкомандами.

Общие команды

Таблица 1 — Общие команды multisite

Подкоманда

Параметры и флаги

Описание

validate

Асинхронная репликация

Валидация локальной конфигурации инсталляции. Проверяет, что установлен id инсталляции и s3_version. Выводит актуальную локальную конфигурацию

Пример: $ hb multisite validate

status

Асинхронная репликация

Вывод локальной конфигурации, статуса синхронизации метаданных (если включена) и количества бакетов с включенной синхронизацией данных

Пример: $ hb multisite status

set_role

--role=<РОЛЬ> — устанавливаемая роль. Доступное значение: active или passive

Установка роли локальной инсталляции. При --role=active проверяет окружение: если уже есть другой Active — возвращает ошибку; если потеряна связь с другим пиром — выводит предупреждение с рекомендацией исключить недоступный узел

Пример: $ hb multisite set_role --role=active

Управление пирами

Таблица 2 — Команды управления пирами

Подкоманда

Параметры и флаги

Описание

peers add

  • --id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ> — идентификатор инсталляции (пир);
  • --auth=<ТОКЕН> — параметры доступа;
  • --addr=<АДРЕС_ИНСТАЛЛЯЦИИ> — параметры подключения, указывается адрес сервиса Hync инсталляции;
  • --enabled=<ЗНАЧЕНИЕ> — по умолчанию true

Добавление пира в локальную конфигурацию. Проверяет доступность пира, совпадение id из get_peers_info и совместимость версии s3_version

Пример: $ hb multisite peers add --id='y' --addr=<АДРЕС_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН>

peers update

  • --id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ> — идентификатор инсталляции;
  • --auth=<ТОКЕН> — параметры доступа;
  • --addr=<АДРЕС_ИНСТАЛЛЯЦИИ> — параметры подключения, указывается адрес сервиса Hync инсталляции;

Обновление параметров подключения существующего пира. Проверяет доступность и совпадение id, role и версии S3

Пример: $ hb multisite peers update --id='<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ>' --addr=<АДРЕС_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН>

peers disable

--id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ>

Выключение пира, используется для DR (Disaster Recovery). Устанавливает peers.enabled=false

Пример: $ hb multisite peers disable --id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ>

peers enable

--id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ>

Включение ранее выключенного пира. Устанавливает peers.enabled=true

Пример: $ hb multisite peers enable --id=<ИДЕНТИФИКАТОР_ИНСТАЛЛЯЦИИ>

peers list

Асинхронная репликация

Вывод всех пиров и информации о них, включая результат последнего get_peers_info

Пример: $ hb multisite peers list

Синхронизация метаданных (meta_sync)

Таблица 3 — Команды meta_sync

Подкоманда

Параметры и флаги

Описание

meta_sync start

--switch-to-active — переключить пир на Active и одновременно включить синхронизацию

Запуск синхронизации метаданных на текущей инсталляции. Проверяет доступность всех включенных пиров, ожидаемые id, роли и версии, отсутствие запущенных meta_sync и meta_resync на пирах

Пример: $ hb multisite meta_sync start

meta_sync stop

Асинхронная репликация

Остановка синхронизации метаданных (статус записи multisite_meta_sync переводится в stopped)

Пример: $ hb multisite meta_sync stop

meta_sync status

Асинхронная репликация

Вывод состояния meta_sync и meta_resync на текущей инсталляции

Пример: $ hb multisite meta_sync status

Ресинхронизация метаданных (meta_resync)

Таблица 4 — Команды meta_resync

Подкоманда

Параметры и флаги

Описание

meta_resync start

Асинхронная репликация

Запуск ресинхронизации метаданных. Требует запущенной синхронизации, роль узла — Active, отсутствие запущенных meta_resync. Создает задачу в multisite_xqmeta_resync

Пример: $ hb multisite meta_resync start

meta_resync stop

Асинхронная репликация

Остановка ресинхронизации метаданных. Останавливает или отменяет задачу в multisite_xqmeta_resync

Пример: $ hb multisite meta_resync stop

Синхронизация данных (data_sync)

Таблица 5 — Команды data_sync

Подкоманда

Параметры и флаги

Описание

data_sync set

  • --bucket=<ИДЕНТИФИКАТОР_БАКЕТА>;
  • --peers=[<ИДЕНТИФИКАТОРЫ_ПИРОВ>] (через запятую);
  • --mode='active-passive';
  • --sync-updates=<ЗНАЧЕНИЕ> (по умолчанию false)

Создание записи multisite_data_sync (при выполнении команды создается новая версия записи). Имя бакета устанавливается автоматически. Требует, чтобы инсталляция была Active, синхронизация была включена, бакет синхронизирован на этапе meta_sync, а пиры отвечали на get_peers_info

Пример: $ hb multisite data_sync set --bucket=<ИДЕНТИФИКАТОР_БАКЕТА> --peers=[<ИДЕНТИФИКАТОРЫ_ПИРОВ>] --mode='active-passive' --sync-updates=true

data_sync start

  • --bucket_id=<ИДЕНТИФИКАТОР_БАКЕТА> или --bucket_name=<ИМЯ_БАКЕТА>;
  • --sync_updates=<ЗНАЧЕНИЕ>

Запуск новой или ранее остановленной операции синхронизации данных (перевод в статус Active)

Пример: $ hb multisite data_sync start --bucket_name=<ИМЯ_БАКЕТА>

data_sync stop

--bucket_id=<ИДЕНТИФИКАТОР_БАКЕТА> или --bucket_name=<ИМЯ_БАКЕТА>

Остановка синхронизации данных для бакета

Пример: $ hb multisite data_sync stop --bucket_name=<ИМЯ_БАКЕТА>

data_sync status

--bucket_id=<ИДЕНТИФИКАТОР_БАКЕТА> или --bucket_name=<ИМЯ_БАКЕТА>

Вывод статуса data_sync для бакета

Пример: $ hb multisite data_sync status --bucket_name=<ИМЯ_БАКЕТА>

data_sync list

--bucket_name_prefix=<ПРЕФИКС>

Вывод списка объектов multisite_data_sync. При указании --bucket_name_prefix объекты фильтруются по префиксу имени бакета

Пример: $ hb multisite data_sync list --bucket_name_prefix=<ПРЕФИКС>

Сценарий первичной настройки

Сценарии рассмотрены для двух инсталляций:

  • Активная;
  • Пассивная.
  1. Установите роль для каждой инсталляции (создается локальная запись пиров):

    # Активная инсталляция$ hb multisite set_role --role=active# Пассивная инсталляция$ hb multisite set_role --role=passive

    Проверьте, что на обеих инсталляциях появился локальный пир с ролью:

    $ hb multisite peers list
  2. Подключите каждую инсталляцию к остальным с корректными значениями:

    # Активная инсталляция$ hb multisite peers add --id='y' --addr=<АДРЕС_АКТИВНОЙ_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН># Пассивная инсталляция$ hb multisite peers add --id='x' --addr=<АДРЕС_ПАССИВНОЙ_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН>

    Проверьте, что на обеих инсталляциях роли установились для всех пиров:

    $ hb multisite peers list
  3. Запустите синхронизацию на Active-инсталляции:

    $ hb multisite meta_sync start

    Проверьте состояние синхронизации:

    $ hb multisite meta_sync status
  4. Запустите ресинхронизацию на Active-инсталляции:

    $ hb multisite meta_resync start

    Проверьте состояние ресинхронизации:

    $ hb multisite meta_resync status
  5. Настройте синхронизацию данных по бакетам на Active-инсталляции:

    $ hb multisite data_sync set --bucket=<ИМЯ_БАКЕТА> --peers=[<ИДЕНТИФИКАТОРЫ_ПИРОВ>] --mode='active-passive' --sync-updates=true
  6. Запустите синхронизацию данных по бакетам на Active-инсталляции:

    $ hb multisite data_sync start --bucket_name=<ИМЯ_БАКЕТА>

    Проверьте состояние синхронизации:

    $ hb multisite data_sync status --bucket_name=<ИМЯ_БАКЕТА>

Фоновые процессы

Все фоновые процессы multisite-репликации связаны с пространствами, в которых хранятся обрабатываемые данные. Пространства распределены по плоскостям:

  • Управление multisite — пространства управления конфигурацией пиров;
  • Control Plane — пространства очередей синхронизации и ресинхронизации метаданных;
  • Data Plane — пространства очередей синхронизации данных.

Пространства и фоновые процессы

Таблица 6 — Пространства и фоновые процессы multisite

Сервис

Пространство

Назначение

Фоновый процесс

Плоскость

hitbox

multisite_peers

Информация о пирах

multisite_peers_sync_background_worker — синхронизация сохраненных пиров и уточнение их текущего статуса и состояния

Управление multisite

hitbox

multisite_meta_sync

Настройки синхронизации метаданных

Асинхронная репликация

Control Plane

hitbox

multisite_data_sync

Настройки синхронизации данных

Асинхронная репликация

Data Plane

hitbox

multisite_xqmeta

Очередь задач синхронизации метаданных. Заполняется при возникновении событий в S3 на изменение свойств проектов, бакетов, пользователей и ключей (например, создание проекта, бакета, управление настройками бакета и пр.)

xqueue multisite_xqmeta — обработчик очереди синхронизации метаданных

Control Plane

hitbox

multisite_xqmeta_resync

Очередь задач ресинхронизации. Одна запись — один запрос пользователя на ресинхронизацию метаданных. При выполнении сканирует пространства S3 и создает задачи в очереди multisite_xqmeta_resync_tasks

xqueue multisite_xqmeta_resync — обработчик очереди задач на ресинхронизацию метаданных

Control Plane

hitbox

multisite_xqmeta_resync_tasks

Очередь задач метаданных для ресинхронизации. Заполняется обработчиком multisite_xqmeta_resync при скане S3. Обработка происходит по тем же принципам, что и обработка задач в очереди синхронизации

xqueue multisite_xqmeta_resync_tasks — обработчик задач, созданных при ресинхронизации метаданных

Control Plane

policebank

multisite_bucket_policy

Пространство очереди синхронизации метаданных (bucket policy)

xqueue multisite_bucket_policy — обработчик очереди синхронизации метаданных (bucket policy)

Control Plane

policebank

multisite_xqmeta_resync

Пространство очереди ресинхронизации метаданных (bucket policy)

xqueue xqmeta_resync_space — обработчик очереди ресинхронизации метаданных (bucket policy)

Control Plane

matter

multisite_peers

Информация о пирах. Синхронизируется из Hitbox при изменениях пиров

Асинхронная репликация

Управление multisite

matter

multisite_data_sync

Настройки синхронизации данных. Синхронизируется из Hitbox при изменениях настроек синхронизации данных в бакетах

Асинхронная репликация

Data Plane

matter

multisite_xqdata_meta

Очередь задач синхронизации метаданных данных. Заполняется при возникновении событий в S3 на изменение свойств хранимых объектов (например, установка списка управления доступом (ACL) объекту, изменение тегов объекта и пр.)

xqueue multisite_xqdata_meta — обработчик очереди синхронизации метаданных данных

Data Plane

matter

multisite_xqdata_data

Очередь задач синхронизации содержимого данных. Заполняется при возникновении событий в S3 на создание объектов (например, создание объекта, multipart commit и пр.)

xqueue multisite_xqdata_data — обработчик очереди синхронизации содержимого данных

Data Plane

Синхронизация пиров

Фоновый процесс синхронизации пиров (multisite_peers_sync_background_worker) нужен:

  • в первую очередь — для синхронизации ролей пиров: при смене роли на узле остальные пиры автоматически узнают о новой роли;
  • во вторую очередь — для автоматического обнаружения проблем и конфликтов.

Для каждого добавленного пира со статусом enabled=true регулярно (с частотой, настраиваемой в локальной конфигурации) выполняется запрос get_peers_info.

Была ли статья полезна?