Настройка репликации из нескольких источников в один приемник с помощью технической таблицы#

Настраивать репликацию могут пользователи с правами APPADMIN.

Для репликации данных из нескольких источников в один приемник GraDeLy использует техническую таблицу $GRADELY_APPLY_POSITION$.

При репликации из нескольких источников количество строк таблицы будет определяться количеством источников транзакции и количеством модулей Applier в каждом потоке (если в репликации участвует один модуль Applier, то thread_id=0).

Таким образом, для определения места начала репликации GraDeLy ориентируется на source_id, указывающий строку и БД-источник, и trx_id, содержащий идентификатор транзакции GraDeLyID.

Если в таблице есть запись с идентификаторами source_id и trx_id, то модуль Applier начинает применение изменений из trail-файла с GraDeLyID (поле trx_id)+1.

При каждом применении транзакции на БД приемнике выполняется команда обновления таблицы:

```
update "$GRADELY_APPLY_POSITION$" set trx_id = ?, internal_id = ? where source_id = ? and thread_id=0
```

В случае переключения БД-лидера (switchover), идентификатором источника будет выступать новая БД.

При таком сценарии модуль APPLIER добавляет новую строку в техническую таблицу, а в старой строке обновляет поле trx_id=-1, чтобы показать, что из этого источника применение прекращено.

Последовательность выполнения#

Для запуска репликации из нескольких источников в один приемник:

  1. Убедитесь, что у вас создана техническая таблица $GRADELY_APPLY_POSITION$. Как создать техническую таблицу описано в «Руководстве по установке», разделе «Установка» → «Порядок установки», пункт 12.

  2. Создайте на сервере-источнике слот публикации и публикацию для каждого источника:

    SELECT * FROM pg_create_logical_replication_slot('{имя слота}', 'pgoutput');
    CREATE PUBLICATION for table {имя_публикации}`
    
  3. Создайте соединения для каждой БД-источника, указав для каждого соединения слот и публикацию из пункта 2.

  4. Создайте граф репликации с несколькими источниками, модулями Capture, Kafka, модулями Applier и одним приемником.

    Схема сложного графа

  5. Запустите граф репликации.

    Схема сложного графа

Результат#

Граф работает.