Администрирование через пользовательский интерфейс консоли управления#
перезапуск графа репликации с позиции с помощью вспомогательной таблицы;
настройка репликации из нескольких источников в один приемник с помощью вспомогательной таблицы;
Предусловия#
В основе архитектуры приложения GraDeLy клиент-серверная реализация. Такая поставка требует развертывания основных компонентов:
Модулей репликации (воркеров) – приложений, непосредственно выполняющих репликацию данных.
Консоли управления – приложения, состоящего в свою очередь из:
основного модуля backend (реализующего API взаимодействия с модулями репликации);
графического интерфейса пользователя;
базы данных (БД) для централизованного хранения конфигураций.
Консоль управления имеет ролевую модель, позволяющую настроить наборы полномочий пользователей. В основе модели полномочия доступа к API управления, которые группируются в роли, назначаемые фактическим пользователям системы.
При настройке ролей администратору рекомендуется руководствоваться принципом наименьших привилегий, чтобы избежать несанкционированного доступа к ресурсам.
Для настройки подключения к БД хранения конфигураций укажите соответствующие опции в файле application.yml.
Для работы с БД через PgBouncer в URL для подключения укажите не порт БД, а порт PgBouncer.
Новый проект#
Для начала работы с компонентом при установке GraDeLy создайте хотя бы один проект.
Создавать проекты может администратор с ролью PROJECT_CREATOR.
Для создания нового проекта:
Нажмите значок
рядом с полем Выберите проект.
Введите название проекта в открывшемся окне Добавление проекта и нажмите Сохранить.

Для редактирования проекта:
Нажмите на раскрывающийся список проектов в левой панели GraDeLy рядом с полем Выберите проект.
Выберите проект для редактирования и нажмите значок
рядом с названием проекта.
Отредактируйте название проекта в открывшемся окне Редактирование имени проекта.

Нажмите Сохранить.
Убедитесь, что администратор СУДИР удалил роли переименованного проекта и назначил пользователям новые роли.
После переименования проекта прежде действовавшие в нем роли перешли в статус ARCHIVE и автоматически создались новые роли в статусе ACTIVE.
Для удаление проекта:
Удалить можно только пустой проект: без созданных графов, соединений, конфигураций. Если проект содержит граф, соединения, конфигурации, сначала удалите их, потом сам проект.
Нажмите на раскрывающийся список проектов в левой панели GraDeLy рядом с полем Выберите проект.
Выберите проект для удаления и нажмите значок
рядом с названием проекта.
Нажмите Удалить в открывшемся окне предупреждения.

Убедитесь, что администратор СУДИР удалил роли уже удаленного проекта согласно документации СУДИР.
После удаления проекта эти роли перешли в статус ARCHIVE.
Новое соединение#
Создание нового соединения и настройка параметров соединений с БД или Kafka выполняется на вкладке Соединения.
Для этого авторизуйтесь в приложении, откройте вкладку Соединения и нажмите Создать соединение над списком всех соединений.
.
Для каждого из используемых соединений заполните набор обязательных параметров:
name: Человекочитаемое имя
type: Из списка [DB, QUEUE]
driver: Используемый драйвер
url: Строка соединения
credentials: Информация для идентификации пользователя
user:
password:
В Kafka максимальный размер отправляемых сообщений на производителе (Producer) по умолчанию 1 МБ, для отправки сообщений > 1 МБ, вставьте в опциях соединения Kafka параметр
max.request.size = {ваше_значение_в_байтах}.
Более подробно настройка создаваемых соединений описана в Руководстве пользователя интерфейса консоли управления.
Редактирование соединения#
Для редактирования соединения нажмите значок
рядом с названием соединения и выберите Редактировать в открывшемся меню.
Поправьте нужные поля в открывшемся окне Редактирование свойств соединения:
.
Более подробно настройка создаваемых соединений описана в Руководстве пользователя интерфейса консоли управления.
Устранение последствий ошибок репликации#
В сценарии, где в качестве действия при ошибке задано ABORT#
Устраните фактор ошибки и повторно запустите репликацию.
В сценарии, где в качестве действия при ошибке задано RETRY#
Действий со стороны администратора не требуется. Воркер пробует выполнить операцию до исчезновения фактора ошибки. Возможно применение конфигурации с задержкой для избегания зацикливания (подробнее в документе «Руководство пользователя интерфейса консоли управления», раздел «Использование приложения оператором» → «Настройка стратегии поведения при ошибках репликации»).
В сценарии, где в качестве действия при ошибке задано CONTINUE#
Воркер записывает информацию в таблицу или в топик Kafka и продолжает работу.
Для обработки записей об ошибке:
Просмотрите записи об ошибке в топике Kafka или буферной таблице GraDeLy в базе приемника.
Исправьте данные, которых коснулась ошибка, в системе-получателе (например, примените потерянные обновления структуры, записей).
Очистите записи об ошибке в топике или таблице или отметьте эти записи как обработанные.
Перезапуск графа репликации с позиции с помощью вспомогательной таблицы#
Для перезапуска графа репликации с позиции GraDeLy использует собственный идентификатор транзакций GraDeLyID. Идентификатор записывается в Kafka в столбцы key и value, в столбец trx_id вспомогательной таблицы, если создана и участвует в репликации.
Чтобы гарантировать корректный перезапуск модуля GraDeLy, в базе данных создается вспомогательная таблица $GRADELY_APPLY_POSITION$, содержащая GraDeLyID, идентификатор последней примененной транзакции. Таблица содержит единственную строку уникального SourceID, значение в которой обновляется после каждой выполненной транзакции.
Столбцы таблицы:
thread_id — идентификатор строки;
source_id — идентификатор строки и БД источника (первичный ключ), с которого пришла транзакция;
trx_id — идентификатор транзакции GraDeLyID;
internal_id — идентификатор, формируемый источником: в PostgreSQL это lsn, в Oracle — CommitSCN.
Как создать вспомогательную таблицу описано в «Руководстве по установке», разделе «Установка» → «Порядок установки», пункт 12.
Для перезапуска графа с GraDeLyID из вспомогательной таблицы:
Откройте на стенде вкладку Соединения.
Выберите соединение Target и нажмите значок
рядом с названием соединения и выберите Редактировать в открывшемся меню.
Пропишите
"apply_position_schema" : "{имя_схемы}"в поле Опции в открывшемся окне Редактирование свойств соединения.
Если не указать имя схемы, содержащей вспомогательную таблицу, воркер применителя будет искать вспомогательную таблицу в схеме с именем public.
Если вспомогательная таблица находится в схеме с именем public, имя схемы в поле Опции можно не прописывать. Если вспомогательная таблица в схеме с другим именем и в поле Опции имя этой схемы не указано, воркер применителя не найдет вспомогательную таблицу, и участвовать в репликации таблица не будет.
Нажмите Сохранить.
Откройте вкладку Графы репликации и запустите граф.
Теперь GraDeLyID, идентификатор последней примененной транзакции, записывается во вспомогательную таблицу.
Для перезапуска графа после остановки выберите модуль применителя на схеме графа, который нужно перезапустить.

Нажмите
в открывшемся окне Модуль.
Репликация запустится с последнего записанного в вспомогательную таблицу значения GraDeLyID + 1.
Настройка репликации из нескольких источников в один приемник с помощью вспомогательной таблицы#
Для репликации данных из нескольких источников в один приемник 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, чтобы показать, что из этого источника применение прекращено.
Для запуска репликации из нескольких источников в один приемник:#
Убедитесь, что у вас создана вспомогательная таблица
$GRADELY_APPLY_POSITION$. Как создать вспомогательную таблицу описано в «Руководстве по установке», разделе «Установка» → «Порядок установки», пункт 12.Создайте на сервере-источнике слот публикации и публикацию для каждого источника:
SELECT * FROM pg_create_logical_replication_slot('{имя слота}', 'pgoutput'); CREATE PUBLICATION for table {имя_публикации}`Создайте соединения для каждой БД-источника, указав для каждого соединения слот и публикацию из пункта 2.
Создайте граф репликации с несколькими источниками, модулями Capture, Kafka, модулями Applier и одним приемником.

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

Поиск воркера после прерывания репликации#
Если репликация прервалась, для проверки статуса воркера, привязанного к процессу:
Выберите процесс во вкладке Процессы и нажмите на ID воркера в строке процесса.

Откроется список воркеров на вкладке Воркеры. Привязанный к выбранному процессу воркер будет подсвечен. ID воркера будет отображаться в столбце Идентификатор воркера и url страницы.

Принудительный перезапуск модуля#
При остановке репликации из-за отказа БД источника для принудительного перезапуска модуля:
Модуль Capture переключится на доступную БД, из которой он будет брать изменения и направлять их в Queue.
Нажмите модуль на графе.

Нажмите
в открывшемся окне Модуль.
Смена порядка транзакций#
GraDeLy оптимизирует порядок транзакций за счет функции reorder. Благодаря ей можно менять порядок команд INSERT, UPDATE, DELETE и объединять их в prepared statements. Смена порядка транзакций повышает скорость записи на 30-50%.
Для использования функции reorder должны быть установлены отложенные ограничения (deferred constraints).
Чтобы включить оптимизацию последовательности транзакций:
По умолчанию
"reorder": false, что значит: транзакции идут в том порядке, в котором они были сделаны.
Нажмите модуль на графе.

Нажмите Редактировать в открывшемся окне Модуль.

Включите переупорядочивание операций в транзакции для оптимизации последовательности транзакций. Смена порядка транзакций повышает скорость записи на 30-50%.

Нажмите Сохранить.
Отключение КВР на 15 минут#
КВР (Контроль Второй Рукой) — это механизм подтверждения операций. Вкладка отображается, если при развертывании приложения был включен КВР (подробнее в «Руководстве по установке», разделе «Установка», «Порядок установки»).
Контроль второй рукой распространяется на остановку процесса и на отключение КВР на 15 минут. Отключать КВР может только администратор с ролью MAINTENANCE_INSPECTOR.
Для отключения КВР на 15 минут:
Нажмите
на вкладке КВР.
Введите обоснование в открывшемся окне Описание.

Нажмите Согласовать.
Отказоустойчивость Kafka#
GraDeLy умеет реагировать на сбои Kafka благодаря Kafka client. Для этого установите параметр delivery.timeout.ms: он определяет максимальное время ожидания доставки сообщения от производителя к потребителю.
Чтобы задать параметр delivery.timeout.ms:
Нажмите значок
рядом с названием соединения Queue в перечне соединений и выберите Редактировать в открывшемся меню…
Пропишите
"delivery.timeout.ms": "{число_миллесекунд}"в поле Опции в открывшемся окне Редактирование свойств соединения.
Нажмите Сохранить.