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

Асинхронная репликация позволяет синхронизировать данные между базами данных 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

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

Ограничения

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

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

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

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

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

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

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

Важно

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

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

Уровни согласованности реплицируемых данных

Согласованность данных уровня строк

Механизм Change Data Capture, используемый для асинхронной репликации, гарантирует, что изменения по одному и тому же первичному ключу доставляются в том же порядке, в котором они происходили в источнике. Таким образом обеспечивается согласованность данных уровня строк.

Данные, записанные в объекты-реплики в этом режиме, сразу становятся доступными для чтения.

Глобальная согласованность данных

При выполнении транзакций в источнике могут быть атомарно изменены несколько строк таблицы или, более того, строки в разных партициях таблиц(ы). Глобальная согласованность данных в приемнике подразумевает сохранение свойства атомарности — изменения "проявляются" (становятся доступными для чтения) согласованно.

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

Периодичность фиксации изменений

По умолчанию изменения фиксируются (коммитятся) не чаще, чем раз в 10 секунд. Периодичность фиксации изменений можно переопределить, указав опцию COMMIT_INTERVAL при создании экземпляра асинхронной репликации.

Примечание

Периодичность фиксации изменений напрямую влияет на периодичность выгрузки барьеров в потоки изменений — значения параметров синхронизированы. Таким образом, обычно, изменения фиксируются с той же частотой, с которой в потоках изменений появляются барьеры. Однако, в некоторых случаях, например, в случае неравномерной нагрузки между таблицами, барьеры в потоках изменений могут появляться с существенной разницей во времени, что приведёт к увеличению периодичности фиксации изменений. Отставание можно получить из описания экземпляра асинхронной репликации.

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

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

Примечание

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

Важно

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

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

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

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

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

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