Асинхронная репликация
Асинхронная репликация синхронизирует метаданные управления и данные объектов между несколькими инсталляциями 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 с подкомандами.
Подкоманда | Параметры и флаги | Описание |
|---|---|---|
| Валидация локальной конфигурации инсталляции. Проверяет, что установлен | |
Пример: | ||
| Вывод локальной конфигурации, статуса синхронизации метаданных (если включена) и количества бакетов с включенной синхронизацией данных | |
Пример: | ||
|
| Установка роли локальной инсталляции. При |
Пример: | ||
Подкоманда | Параметры и флаги | Описание |
|---|---|---|
|
| Добавление пира в локальную конфигурацию. Проверяет доступность пира, совпадение |
Пример: | ||
|
| Обновление параметров подключения существующего пира. Проверяет доступность и совпадение |
Пример: | ||
|
| Выключение пира, используется для DR (Disaster Recovery). Устанавливает |
Пример: | ||
|
| Включение ранее выключенного пира. Устанавливает |
Пример: | ||
| Вывод всех пиров и информации о них, включая результат последнего | |
Пример: | ||
Подкоманда | Параметры и флаги | Описание |
|---|---|---|
|
| Запуск синхронизации метаданных на текущей инсталляции. Проверяет доступность всех включенных пиров, ожидаемые |
Пример: | ||
| Остановка синхронизации метаданных (статус записи | |
Пример: | ||
| Вывод состояния | |
Пример: | ||
Подкоманда | Параметры и флаги | Описание |
|---|---|---|
| Запуск ресинхронизации метаданных. Требует запущенной синхронизации, роль узла — Active, отсутствие запущенных | |
Пример: | ||
| Остановка ресинхронизации метаданных. Останавливает или отменяет задачу в | |
Пример: | ||
Подкоманда | Параметры и флаги | Описание |
|---|---|---|
|
| Создание записи |
Пример: | ||
|
| Запуск новой или ранее остановленной операции синхронизации данных (перевод в статус Active) |
Пример: | ||
|
| Остановка синхронизации данных для бакета |
Пример: | ||
|
| Вывод статуса |
Пример: | ||
|
| Вывод списка объектов |
Пример: | ||
Сценарии рассмотрены для двух инсталляций:
- Активная;
- Пассивная.
-
Установите роль для каждой инсталляции (создается локальная запись пиров):
# Активная инсталляция$ hb multisite set_role --role=active# Пассивная инсталляция$ hb multisite set_role --role=passiveПроверьте, что на обеих инсталляциях появился локальный пир с ролью:
$ hb multisite peers list -
Подключите каждую инсталляцию к остальным с корректными значениями:
# Активная инсталляция$ hb multisite peers add --id='y' --addr=<АДРЕС_АКТИВНОЙ_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН># Пассивная инсталляция$ hb multisite peers add --id='x' --addr=<АДРЕС_ПАССИВНОЙ_ИНСТАЛЛЯЦИИ> --auth=<ТОКЕН>Проверьте, что на обеих инсталляциях роли установились для всех пиров:
$ hb multisite peers list -
Запустите синхронизацию на Active-инсталляции:
$ hb multisite meta_sync startПроверьте состояние синхронизации:
$ hb multisite meta_sync status -
Запустите ресинхронизацию на Active-инсталляции:
$ hb multisite meta_resync startПроверьте состояние ресинхронизации:
$ hb multisite meta_resync status -
Настройте синхронизацию данных по бакетам на Active-инсталляции:
$ hb multisite data_sync set --bucket=<ИМЯ_БАКЕТА> --peers=[<ИДЕНТИФИКАТОРЫ_ПИРОВ>] --mode='active-passive' --sync-updates=true -
Запустите синхронизацию данных по бакетам на Active-инсталляции:
$ hb multisite data_sync start --bucket_name=<ИМЯ_БАКЕТА>Проверьте состояние синхронизации:
$ hb multisite data_sync status --bucket_name=<ИМЯ_БАКЕТА>
Все фоновые процессы multisite-репликации связаны с пространствами, в которых хранятся обрабатываемые данные. Пространства распределены по плоскостям:
- Управление multisite — пространства управления конфигурацией пиров;
- Control Plane — пространства очередей синхронизации и ресинхронизации метаданных;
- Data Plane — пространства очередей синхронизации данных.
Сервис | Пространство | Назначение | Фоновый процесс | Плоскость |
|---|---|---|---|---|
|
| Информация о пирах |
| Управление multisite |
|
| Настройки синхронизации метаданных | Control Plane | |
|
| Настройки синхронизации данных | Data Plane | |
|
| Очередь задач синхронизации метаданных. Заполняется при возникновении событий в S3 на изменение свойств проектов, бакетов, пользователей и ключей (например, создание проекта, бакета, управление настройками бакета и пр.) |
| Control Plane |
|
| Очередь задач ресинхронизации. Одна запись — один запрос пользователя на ресинхронизацию метаданных. При выполнении сканирует пространства S3 и создает задачи в очереди |
| Control Plane |
|
| Очередь задач метаданных для ресинхронизации. Заполняется обработчиком |
| Control Plane |
|
| Пространство очереди синхронизации метаданных (bucket policy) |
| Control Plane |
|
| Пространство очереди ресинхронизации метаданных (bucket policy) |
| Control Plane |
|
| Информация о пирах. Синхронизируется из Hitbox при изменениях пиров | Управление multisite | |
|
| Настройки синхронизации данных. Синхронизируется из Hitbox при изменениях настроек синхронизации данных в бакетах | Data Plane | |
|
| Очередь задач синхронизации метаданных данных. Заполняется при возникновении событий в S3 на изменение свойств хранимых объектов (например, установка списка управления доступом (ACL) объекту, изменение тегов объекта и пр.) |
| Data Plane |
|
| Очередь задач синхронизации содержимого данных. Заполняется при возникновении событий в S3 на создание объектов (например, создание объекта, multipart commit и пр.) |
| Data Plane |
Фоновый процесс синхронизации пиров (multisite_peers_sync_background_worker) нужен:
- в первую очередь — для синхронизации ролей пиров: при смене роли на узле остальные пиры автоматически узнают о новой роли;
- во вторую очередь — для автоматического обнаружения проблем и конфликтов.
Для каждого добавленного пира со статусом enabled=true регулярно (с частотой, настраиваемой в локальной конфигурации) выполняется запрос get_peers_info.