Настройка интеграции с Прикладным Журналом#
Компонент «Прикладной журнал» (далее – ПЖ) обеспечивает возможность переключения на резервную БД.
Режимы работы репликации БД#
Master На каждый SQL запрос (отличный от SELECT) создается n журналов, в зависимости от количества указанных типов данных, и отправляет в Kafka ПЖ в один writer topic(s), привязанный к абстрактной зоне ПЖ. Зона ПЖ, в рамках которой конфигурируются типы данных, кафка топики и ПЖ плагины, задается через параметр конфигурации kcse-aplj-zone-id. Сконфигурированный плагин для каждого типа данных (или один плагин для всех типов данных, зависит от требований к производительности) в ПЖ переносит этот журнал в соответствующий кафка topic(s) (количество возможных плагинов и типов данных неограниченно).
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#
Необходимо учитывать, что один instance вычитывает и применяет изменения. Остальные находятся в резерве.
Возможные варианты запуска:#
Вариант 1. Создание Master и Stand-In Keycloak.SE на пустых базах данных. Для этого необходимо:
Запустить Keycloak.SE в режиме Master на пустой БД с нужным параметром(-ами) kcse-aplj-data-types, дождаться полного запуска.
Запустить Keycloak.SE в режиме Stand-In на пустой БД с нужным параметром kcse-aplj-data-types, дождаться полного запуска.
Вариант 2. Подключение репликации в Master Keycloak.SE на уже сформированной базе и добавление Stand-In экземпляров:
Перезапустить Keycloak.SE в режиме Master на уже сформированной БД с нужным параметром(-ами) kcse-aplj-data-types, дождаться полного запуска.
Сделать срез БД данного Master Keycloak.SE средствами БД с фиксацией времени в миллисекундах (или посмотреть в ПЖ время создания первого журнала, с которого стоит начать репликацию).
Запустить Stand-In Keycloak.SE на этой БД, срезе с Master, указав время его создания или время создания первого журнала в ПЖ в формате timestamp в параметре kcse-aplj-new-instance-from-Master, с которого стоит начать реплицирование, игнорируя предыдущие журналы в топике.
Вариант 3. Подключение нового экземпляра Stand-In Keycloak.SE в рамках уже работающего Master и других Stand-In экземпляров:
Сделать срез БД рабочего Stand-In Keycloak.SE средствами БД и запустить Stand-In Keycloak.SE на этой БД, выставив true в параметре kcse-aplj-new-instance-from-Stand-In
Проверка работы интеграции#
Выполнять любые действия в Master Keycloak.SE.
Проверить, что изменения среплецированы в БД всех Keycloak Stand-In.
Ограничения работы:#
Должна быть только одна группа экземпляров, подключенная к одной БД, которая что-либо пишет в эту БД, все остальные экземляры Keycloak.SE на других БД автоматически становятся Stand-In.
У Stand-In Keycloak.SE должны быть только права UPDATE на таблицу databasechangeloglock (помимо прав на чтение).
Рекомендуется запускать Master и все Stand-In экземпляры на схемах с одинаковым названием и не использовать параметр kcse-aplj-db-Master-schema, иначе возможны конфликты репликации.
Необходимо, чтобы время жизни кеша Stand-In Keycloak.SE было минимальным, т.к. Keycloak.SE не будет возвращать актуальные данные и изменения после репликации не будут отображаться пока кеш живет.
Если Stand-In Keycloak.SE запускается на срезе БД другого Stand-In, то параметры kcse-aplj-replication-init-timestamp и kcse-aplj-replication-init-service-id указывать не нужно.
Если Stand-In Keycloak.SE запускается на срезе БД Master, то необходимо использовать только один из параметров kcse-aplj-replication-init-timestamp или kcse-aplj-replication-init-service-id. Рекомендуется использовать kcse-aplj-replication-init-timestamp.