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

Асинхронная репликация позволяет синхронизировать данные между базами данных YDB почти в реальном времени. Также она может быть использована для миграции данных между базами данных с минимальным простоем работающих с ними приложений. Базы данных могут располагаться как в одном кластере YDB, так и на разных.

Принцип работы

Асинхронная репликация реализована поверх Change Data Capture и оперирует логическими данными. Схема процесса репликации:

Как следует из схемы выше, в асинхронной репликации участвуют две базы:

  1. Источник — база данных с исходными объектами.
  2. Приёмник — база данных, в которой будут созданы экземпляр асинхронной репликации и объекты-реплики.

Процесс асинхронной репликации состоит из следующих стадий:

Инициализация

Инициализация асинхронной репликации состоит из:

  • Создания экземпляра асинхронной репликации в приемнике с помощью выражения CREATE ASYNC REPLICATION.
  • Установки соединения с источником. Для соединения с источником приемник использует параметры подключения, указанные при создании экземпляра асинхронной репликации.

Примечание

Пользователь, от имени которого производится подключение к источнику, должен обладать следующими правами:

  • просмотр объектов схемы и содержимого каталогов;
  • создание, изменение, удаление и чтение потоков изменений.

Примечание

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

Репликация первоначальных данных

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

Прогресс репликации первоначальных данных можно получить из описания экземпляра асинхронной репликации.

Репликация изменений

После завершения первоначального сканирования читатели получают только данные об изменениях и записывают их в объекты-реплики.

Для каждого изменения известно время его возникновения (created_atcreated\_at). В то же время читатели отслеживают время получения изменения (received_atreceived\_at). Таким образом, отставание репликации может быть вычислено по формуле:

replication_lag=received_atcreated_atreplication\_lag = received\_at - created\_at

Отставание репликации также можно получить из описания экземпляра асинхронной репликации.

Ограничения

  • Набор исходных объектов задается при создании экземпляра асинхронной репликации и не может быть изменен.

  • В качестве исходных объектов поддерживаются:

    • строковые таблицы;
    • директории — будут реплицироваться все строковые таблицы, содержащиеся в них (включая содержимое поддиректорий) на момент создания экземпляра асинхронной репликации.
  • Во время работы асинхронной репликации в исходных таблицах блокируется возможность изменения состава столбцов.

  • Во время работы асинхронной репликации объекты-реплики доступны только для чтения.

Обработка ошибок в процессе асинхронной репликации

В процессе асинхронной репликации возможно возникновение разных классов ошибок:

  • Временные сбои. Например, транспортные ошибки, перегрузка системы и т.д. Запросы будут повторяться до успешного выполнения.
  • Критичные ошибки. Например, ошибки прав доступа, ошибки схемы и т.д. Процесс репликации будет остановлен, и в описании экземпляра репликации будет указан текст ошибки.

Важно

На данный момент остановленный из-за критичной ошибки процесс асинхронной репликации не может быть перезапущен. Его нужно удалить и создать заново.

Подробнее про классы ошибок и политики их обработки см. в разделе Обработка ошибок.

Завершение асинхронной репликации

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

Примечание

Завершённый процесс асинхронной репликации не может быть возобновлён.

Важно

На данный момент поддерживается только принудительное завершение асинхронной репликации, при котором не производится никаких дополнительных проверок (на консистентность данных, на отставание и т.д.).

Для завершения асинхронной репликации используйте выражение ALTER ASYNC REPLICATION.

Удаление асинхронной репликации

При удалении асинхронной репликации:

  • В исходных таблицах удаляются потоки изменений.
  • В исходных таблицах разблокируется возможность изменения состава столбцов.
  • Опционально могут быть удалены все объекты-реплики.
  • Удаляется экземпляр асинхронной репликации.

Для удаления асинхронной репликации используйте выражение DROP ASYNC REPLICATION.