Настройка интеграции с Прикладным Журналом#

Компонент «Прикладной журнал» (далее – ПЖ) обеспечивает возможность переключения на резервную БД.

Режимы работы репликации БД#

  1. Master На каждый SQL запрос (отличный от SELECT) создается n журналов, в зависимости от количества указанных типов данных, и отправляет в Kafka ПЖ в один writer topic(s), привязанный к абстрактной зоне ПЖ. Зона ПЖ, в рамках которой конфигурируются типы данных, кафка топики и ПЖ плагины, задается через параметр конфигурации kcse-aplj-zone-id. Сконфигурированный плагин для каждого типа данных (или один плагин для всех типов данных, зависит от требований к производительности) в ПЖ переносит этот журнал в соответствующий кафка topic(s) (количество возможных плагинов и типов данных неограниченно).

  2. Stand-In Режим позволяет только читать и применять SQL сообщения из одного topic(s) Kafka ПЖ. Ограничение конфигурируется через указание в параметре kcse-aplj-data-types одного типа данных, вместо неограниченного количества у Master. Любые Stand-In экземпляры Keycloak.SE с одинаковым параметром типа данных, по которому они вычитывают сообщения из Kafka ПЖ? должны быть подключены строго к одной БД.

Пример конфигурации Master Keycloak.SE:

           - name: KCSE_APLJ_ENABLED
              value: 'true'
            - name: KCSE_APLJ_MODE
              value: master
            - name: KCSE_APLJ_KAFKA_BOOTSTRAP_SERVERS
              value: '{HOST1}:{PORT},{HOST2}:{PORT},{HOST3}:{PORT}'
            - name: KCSE_APLJ_ZONE_ID
              value: KCSE
            - name: KCSE_APLJ_DATA_TYPES
              value: 'PERSISTENCE,PERSISTENCE2'
            - name: KCSE_APLJ_PLUGIN_CODE
              value: EXPORT_FUNC_SI
            - name: KCSE_APLJ_DB_SCHEMA
              value: public

Пример конфигурации Stand-In Keycloak.SE:

 - name: KCSE_APLJ_ENABLED
              value: 'true'
            - name: KCSE_APLJ_MODE
              value: standin
            - name: KCSE_APLJ_KAFKA_BOOTSTRAP_SERVERS
              value: '{HOST1}:{PORT},{HOST2}:{PORT},{HOST3}:{PORT}'
            - name: KCSE_APLJ_ZONE_ID
              value: KCSE
            - name: KCSE_APLJ_DATA_TYPES
              value: PERSISTENCE
            - name: KCSE_APLJ_PLUGIN_CODE
              value: EXPORT_FUNC_SI
            - name: KCSE_APLJ_DB_SCHEMA
              value: public

Для Stand-In Keycloak.SE в файле keycloak.conf необходимо заполнить следующие параметры:

kcse-aplj-db-username={PASSWORD}
kcse-aplj-db-password={PASSWORD}

Подробнее о конфигурационных параметрах можно узнать в разделе Конфигурационные параметры

Репликация в Stand-In#

Репликация в Stand-In Необходимо учитывать, что один instance вычитывает и применяет изменения. Остальные находятся в резерве.

Возможные варианты запуска:#

Вариант 1. Создание Master и Stand-In Keycloak.SE на пустых базах данных. Для этого необходимо:

  1. Запустить Keycloak.SE в режиме Master на пустой БД с нужным параметром(-ами) kcse-aplj-data-types, дождаться полного запуска.

  2. Запустить Keycloak.SE в режиме Stand-In на пустой БД с нужным параметром kcse-aplj-data-types, дождаться полного запуска.

Вариант 2. Подключение репликации в Master Keycloak.SE на уже сформированной базе и добавление Stand-In экземпляров:

  1. Перезапустить Keycloak.SE в режиме Master на уже сформированной БД с нужным параметром(-ами) kcse-aplj-data-types, дождаться полного запуска.

  2. Сделать срез БД данного Master Keycloak.SE средствами БД с фиксацией времени в миллисекундах (или посмотреть в ПЖ время создания первого журнала, с которого стоит начать репликацию).

  3. Запустить Stand-In Keycloak.SE на этой БД, срезе с Master, указав время его создания или время создания первого журнала в ПЖ в формате timestamp в параметре kcse-aplj-new-instance-from-Master, с которого стоит начать реплицирование, игнорируя предыдущие журналы в топике.

Вариант 3. Подключение нового экземпляра Stand-In Keycloak.SE в рамках уже работающего Master и других Stand-In экземпляров:

  1. Сделать срез БД рабочего Stand-In Keycloak.SE средствами БД и запустить Stand-In Keycloak.SE на этой БД, выставив true в параметре kcse-aplj-new-instance-from-Stand-In

Проверка работы интеграции#

  1. Выполнять любые действия в Master Keycloak.SE.

  2. Проверить, что изменения среплецированы в БД всех Keycloak Stand-In.

Ограничения работы:#

  1. Должна быть только одна группа экземпляров, подключенная к одной БД, которая что-либо пишет в эту БД, все остальные экземляры Keycloak.SE на других БД автоматически становятся Stand-In.

  2. У Stand-In Keycloak.SE должны быть только права UPDATE на таблицу databasechangeloglock (помимо прав на чтение).

  3. Рекомендуется запускать Master и все Stand-In экземпляры на схемах с одинаковым названием и не использовать параметр kcse-aplj-db-Master-schema, иначе возможны конфликты репликации.

  4. Необходимо, чтобы время жизни кеша Stand-In Keycloak.SE было минимальным, т.к. Keycloak.SE не будет возвращать актуальные данные и изменения после репликации не будут отображаться пока кеш живет.

  5. Если Stand-In Keycloak.SE запускается на срезе БД другого Stand-In, то параметры kcse-aplj-replication-init-timestamp и kcse-aplj-replication-init-service-id указывать не нужно.

  6. Если Stand-In Keycloak.SE запускается на срезе БД Master, то необходимо использовать только один из параметров kcse-aplj-replication-init-timestamp или kcse-aplj-replication-init-service-id. Рекомендуется использовать kcse-aplj-replication-init-timestamp.