Администрирование через пользовательский интерфейс консоли управления#

Предусловия#

В основе архитектуры приложения GraDeLy клиент-серверная реализация. Такая поставка требует развертывания основных компонентов:

  1. Модулей репликации (воркеров) – приложений, непосредственно выполняющих репликацию данных.

  2. Консоли управления – приложения, состоящего в свою очередь из:

    • основного модуля backend (реализующего API взаимодействия с модулями репликации);

    • графического интерфейса пользователя;

    • базы данных (БД) для централизованного хранения конфигураций.

Консоль управления имеет ролевую модель, позволяющую настроить наборы полномочий пользователей. В основе модели полномочия доступа к API управления, которые группируются в роли, назначаемые фактическим пользователям системы.

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

Для настройки подключения к БД хранения конфигураций укажите соответствующие опции в файле application.yml.

Для работы с БД через PgBouncer в URL для подключения укажите не порт БД, а порт PgBouncer.

Новый проект#

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

Создавать проекты может администратор с ролью PROJECT_CREATOR.

Для создания нового проекта:

  1. Нажмите значок Новый проект рядом с полем Выберите проект.

    Новый проект

  2. Введите название проекта в открывшемся окне Добавление проекта и нажмите Сохранить.

    Новый проект

Для редактирования проекта:

  1. Нажмите на раскрывающийся список проектов в левой панели GraDeLy рядом с полем Выберите проект.

  2. Выберите проект для редактирования и нажмите значок Новый проект рядом с названием проекта.

    Новый проект

  3. Отредактируйте название проекта в открывшемся окне Редактирование имени проекта.

    Новый проект

  4. Нажмите Сохранить.

  5. Убедитесь, что администратор СУДИР удалил роли переименованного проекта и назначил пользователям новые роли.

    После переименования проекта прежде действовавшие в нем роли перешли в статус ARCHIVE и автоматически создались новые роли в статусе ACTIVE.

Для удаление проекта:

Удалить можно только пустой проект: без созданных графов, соединений, конфигураций. Если проект содержит граф, соединения, конфигурации, сначала удалите их, потом сам проект.

  1. Нажмите на раскрывающийся список проектов в левой панели GraDeLy рядом с полем Выберите проект.

  2. Выберите проект для удаления и нажмите значок Новый проект рядом с названием проекта.

    Новый проект

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

    Новый проект

  4. Убедитесь, что администратор СУДИР удалил роли уже удаленного проекта согласно документации СУДИР.

    После удаления проекта эти роли перешли в статус ARCHIVE.

Новое соединение#

Создание нового соединения и настройка параметров соединений с БД или Kafka выполняется на вкладке Соединения.

Для этого авторизуйтесь в приложении, откройте вкладку Соединения и нажмите Создать соединение над списком всех соединений.

Соединения, Редактирование свойств соединения.

Для каждого из используемых соединений заполните набор обязательных параметров:

               name:         Человекочитаемое имя
               type:         Из списка [DB, QUEUE]
               driver:       Используемый драйвер
               url:          Строка соединения
               credentials:  Информация для идентификации пользователя
                  user:
                  password:

В Kafka максимальный размер отправляемых сообщений на производителе (Producer) по умолчанию 1 МБ, для отправки сообщений > 1 МБ, вставьте в опциях соединения Kafka параметр max.request.size = {ваше_значение_в_байтах}.

Более подробно настройка создаваемых соединений описана в Руководстве пользователя интерфейса консоли управления.

Редактирование соединения#

  1. Для редактирования соединения нажмите значок Соединения, Значок карандаша рядом с названием соединения и выберите Редактировать в открывшемся меню.

    Соединения, Редактирование свойств соединения

  2. Поправьте нужные поля в открывшемся окне Редактирование свойств соединения:

    Соединения, Редактирование свойств соединения.

Более подробно настройка создаваемых соединений описана в Руководстве пользователя интерфейса консоли управления.

Устранение последствий ошибок репликации#

В сценарии, где в качестве действия при ошибке задано ABORT#

Устраните фактор ошибки и повторно запустите репликацию.

В сценарии, где в качестве действия при ошибке задано RETRY#

Действий со стороны администратора не требуется. Воркер пробует выполнить операцию до исчезновения фактора ошибки. Возможно применение конфигурации с задержкой для избегания зацикливания (подробнее в документе «Руководство пользователя интерфейса консоли управления», раздел «Использование приложения оператором» → «Настройка стратегии поведения при ошибках репликации»).

В сценарии, где в качестве действия при ошибке задано CONTINUE#

Воркер записывает информацию в таблицу или в топик Kafka и продолжает работу.

Для обработки записей об ошибке:

  1. Просмотрите записи об ошибке в топике Kafka или буферной таблице GraDeLy в базе приемника.

  2. Исправьте данные, которых коснулась ошибка, в системе-получателе (например, примените потерянные обновления структуры, записей).

  3. Очистите записи об ошибке в топике или таблице или отметьте эти записи как обработанные.

Перезапуск графа репликации с позиции с помощью вспомогательной таблицы#

Для перезапуска графа репликации с позиции 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 из вспомогательной таблицы:

  1. Откройте на стенде вкладку Соединения.

  2. Выберите соединение Target и нажмите значок Соединения, Значок карандаша рядом с названием соединения и выберите Редактировать в открывшемся меню.

    Графы репликации, Перезапуск графа

  3. Пропишите "apply_position_schema" : "{имя_схемы}" в поле Опции в открывшемся окне Редактирование свойств соединения.

    Графы репликации, Перезапуск графа

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

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

  4. Нажмите Сохранить.

  5. Откройте вкладку Графы репликации и запустите граф.

    Теперь GraDeLyID, идентификатор последней примененной транзакции, записывается во вспомогательную таблицу.

  6. Для перезапуска графа после остановки выберите модуль применителя на схеме графа, который нужно перезапустить.

    Соединения, Редактирование модуля

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

    Соединения, Редактирование модуля

    Репликация запустится с последнего записанного в вспомогательную таблицу значения 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, чтобы показать, что из этого источника применение прекращено.

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

  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. Запустите граф репликации.

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

Поиск воркера после прерывания репликации#

Если репликация прервалась, для проверки статуса воркера, привязанного к процессу:

Выберите процесс во вкладке Процессы и нажмите на ID воркера в строке процесса.

Процессы, Просмотр воркера

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

Процессы, Просмотр воркера

Принудительный перезапуск модуля#

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

Модуль Capture переключится на доступную БД, из которой он будет брать изменения и направлять их в Queue.

  1. Нажмите модуль на графе.

    Соединения, Редактирование модуля

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

    Соединения, Редактирование модуля

Смена порядка транзакций#

GraDeLy оптимизирует порядок транзакций за счет функции reorder. Благодаря ей можно менять порядок команд INSERT, UPDATE, DELETE и объединять их в prepared statements. Смена порядка транзакций повышает скорость записи на 30-50%.

Для использования функции reorder должны быть установлены отложенные ограничения (deferred constraints).

Чтобы включить оптимизацию последовательности транзакций:

По умолчанию "reorder": false, что значит: транзакции идут в том порядке, в котором они были сделаны.

  1. Нажмите модуль на графе.

    Соединения, Редактирование модуля

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

    Соединения, Редактирование модуля

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

    Соединения, Редактирование модуля

  4. Нажмите Сохранить.

Отключение КВР на 15 минут#

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

Контроль второй рукой распространяется на остановку процесса и на отключение КВР на 15 минут. Отключать КВР может только администратор с ролью MAINTENANCE_INSPECTOR.

Для отключения КВР на 15 минут:

  1. Нажмите КВР, Отключение КВР на вкладке КВР.

    КВР, Отключение КВР

  2. Введите обоснование в открывшемся окне Описание.

    КВР, Согласование

  3. Нажмите Согласовать.

Отказоустойчивость Kafka#

GraDeLy умеет реагировать на сбои Kafka благодаря Kafka client. Для этого установите параметр delivery.timeout.ms: он определяет максимальное время ожидания доставки сообщения от производителя к потребителю.

Чтобы задать параметр delivery.timeout.ms:

  1. Нажмите значок Соединения, Значок карандаша рядом с названием соединения Queue в перечне соединений и выберите Редактировать в открывшемся меню…

    Соединения, Редактирование соединения

  2. Пропишите "delivery.timeout.ms": "{число_миллесекунд}" в поле Опции в открывшемся окне Редактирование свойств соединения.

    Соединения, Редактирование соединения

  3. Нажмите Сохранить.