Проблема настройки кластеризации Keycloak

Вопрос или проблема

Я создал тестовую виртуальную машину для применения кластеризации Keycloak. Я установил туда версию Keycloak 26 и настроил ее следующим образом.

conf/cache-ispn-tcpping.xml

<infinispan
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:infinispan:config:15.0 http://www.infinispan.org/schemas/infinispan-config-15.0.xsd"
        xmlns="urn:infinispan:config:15.0">

    <jgroups>
        <stack name="tcpping" extends="tcp">
            <TCP bind_port="7805" bind_addr="10.0.0.5" external_addr="10.0.0.5" />
            <TCPPING
                initial_hosts="10.0.0.5[7805],10.0.0.6[7805]"
                port_range="0"
            />
            <FD_SOCK bind_port="57805"/>
            <pbcast.GMS print_local_addr="true" join_timeout="3000"/>
            <pbcast.STABLE stability_delay="1000" max_bytes="50000"/>
            <pbcast.NAKACK2 use_mcast_xmit="false" discard_delivered_msgs="true"/>
            <UNICAST3 xmit_table_num_rows="1024" xmit_table_msgs_per_row="1024"/>
            <MERGE3 min_interval="10000" max_interval="30000"/>
        </stack>
    </jgroups>

    <cache-container name="keycloak">
        <transport lock-timeout="60000" stack="tcp"/>
...

conf/keycloak.conf

...
cache=ispn
cluster=default
cache-stack=tcp
cache-config-file=cache-ispn-tcpping.xml
cache-remote-port=7805

Однако, когда я запускаю его, выполняется следующее сообщение.


[root@vm-test keycloak-26.0.1]# ./bin/kc.sh start
2024-10-24 01:20:44,085 WARN  [org.keycloak.quarkus.runtime.cli.Picocli] (main) Следующие используемые параметры времени выполнения недоступны и будут проигнорированы во время сборки:
        - cache-remote-port: Доступно только при установленном удаленном хосте.
2024-10-24 01:20:47,021 INFO  [org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory] (main) Запуск встроенного менеджера кэша Infinispan
2024-10-24 01:20:47,798 INFO  [org.infinispan.CONTAINER] (Thread-5) ISPN000556: Запуск пользовательского маршалера 'org.infinispan.commons.marshall.ImmutableProtoStreamMarshaller'
2024-10-24 01:20:48,263 WARN  [org.jgroups.stack.Configurator] (Thread-5) JGRP000014: ThreadPool.thread_dumps_threshold устарел: проигнорировано
2024-10-24 01:20:48,279 INFO  [org.infinispan.CLUSTER] (Thread-5) ISPN000078: Запуск канала JGroups `ISPN` со стеком `tcp`
2024-10-24 01:20:48,280 INFO  [org.jgroups.JChannel] (Thread-5) local_addr: b2234e0f-3122-402a-9b7c-daea16717644, имя: vm-test-20791
2024-10-24 01:20:48,301 INFO  [org.jgroups.protocols.FD_SOCK2] (Thread-5) сервер слушает на *.57800
2024-10-24 01:20:50,308 INFO  [org.jgroups.protocols.pbcast.GMS] (Thread-5) vm-test-20791: не обнаружены участники после 2002 мс: создание кластера как координатора
2024-10-24 01:20:50,318 INFO  [org.infinispan.CLUSTER] (Thread-5) ISPN000094: Получен новый вид кластера для канала ISPN: [vm-test-20791|0] (1) [vm-test-20791]
2024-10-24 01:20:50,396 INFO  [org.infinispan.CLUSTER] (Thread-5) ISPN000079: Локальный адрес канала `ISPN` - `vm-test-20791`, физические адреса - `[172.17.0.1:7800]`
2024-10-24 01:20:50,864 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Имя узла: vm-test-20791, имя сайта: null
2024-10-24 01:20:50,872 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Регистрация класса org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
2024-10-24 01:20:52,061 WARN  [io.agroal.pool] (main) Datasource '<default>': Утечка ресурсов JDBC: 7 ResultSet(s) и 0 Statement(s)
2024-10-24 01:20:52,378 INFO  [io.quarkus] (main) Keycloak 26.0.1 на JVM (работает на Quarkus 3.15.1) запущен за 9.176с. Слушает на: https://0.0.0.0:8443
2024-10-24 01:20:52,378 INFO  [io.quarkus] (main) Профиль prod активирован.
2024-10-24 01:20:52,378 INFO  [io.quarkus] (main) Установленные функции: [agroal, cdi, hibernate-orm, jdbc-mssql, keycloak, narayana-jta, opentelemetry, reactive-routes, rest, rest-jackson, smallrye-context-propagation, vertx]

Я применил 7805 к порту кэша, который существует во всех настройках, но он работает как порт по умолчанию 7800. IP также работает только как внутренний IP docker 172.17.0.1:7800.

Я вовсе не могу найти причину. Как я могу изменить номер порта и IP физических адресов???

Ответ или решение

Проблема настройки кластеризации Keycloak: решение

Введение

Согласно вашему описанию, у вас возникли сложности с настройкой кластеризации Keycloak на тестовом виртуальном машине с версией 26.0.1. Основная проблема заключается в том, что необходимые порты и IP-адреса для кластеризации не настраиваются должным образом, и вы получаете сообщение об использовании порта по умолчанию 7800, вместо ожидаемого 7805.

Анализ конфигурации

  1. Конфигурация JGroups: Вы указали настройки JGroups в файле cache-ispn-tcpping.xml, где задали следующие параметры:

    <TCP bind_port="7805" bind_addr="10.0.0.5" external_addr="10.0.0.5"/>
    <TCPPING initial_hosts="10.0.0.5[7805],10.0.0.6[7805]" port_range="0"/>

    Эти настройки должны обеспечить кластеризацию через TCP с использованием указанных вами IP-адресов и портов.

  2. Конфигурация Keycloak: В файле keycloak.conf вы задали следующие параметры:

    cache=ispn
    cluster=default
    cache-stack=tcp
    cache-config-file=cache-ispn-tcpping.xml
    cache-remote-port=7805

    Однако, согласно логам, вы получаете предупреждение о том, что параметр cache-remote-port игнорируется, так как не указан удалённый хост.

Основные проблемы

  • Отсутствие обнаружения других узлов: Сообщение no members discovered after 2002 ms: creating cluster as coordinator указывает на то, что ваш узел не может обнаружить другие узлы в сети. Следовательно, он создаёт кластер в качестве координатора.
  • Использование неверного IP и порта: В логах указано, что канал JGroups использует адрес 172.17.0.1:7800, который является внутренним IP-адресом Docker, а не тем, который вы указали в настройках.

Рекомендации по устранению неисправностей

Для решения данной проблемы выполните следующие шаги:

  1. Проверьте настройки сети: Убедитесь, что виртуальной машине назначены правильные IP-адреса. Попробуйте использовать 10.0.0.5 как внутренний IP, чтобы обеспечить доступ к кластеру. Проверьте, запускаются ли другие экземпляры Keycloak на указанных IP-адресах.

  2. Настройте JGroups: Возможно, стоит изменить настройки JGroups для использования более общего образа адреса, например, заменив bind_addr и external_addr на 0.0.0.0 или добавив точно определённые адреса вашей сети.

  3. Разрешения сетевых интерфейсов: Убедитесь, что ваши виртуальные сети настроены так, чтобы umożyć общение между узлами. Также проверьте настройки брандмауэра (iptables) и разрешений Docker на доступ к портам.

  4. Запуск с дополнительными параметрами: Для более детальной диагностики вы можете запустить Keycloak с параметром -Djboss.bind.address=<ваш IP>, где вместо <ваш IP> укажите адрес, на котором хотите запустить Keycloak.

  5. Добавление дополнительных узлов: Если вы планируете запускать несколько экземпляров, убедитесь, что все узлы могут видеть друг друга по сети и слушают на порту 7805.

Заключение

Настройка кластеризации Keycloak может быть сложной задачей из-за особенностей сетевой конфигурации и специфики окружения. Следуя рекомендациям по анализу и настройке, вы сможете устранить возникшие проблемы и осуществить успешную кластеризацию. Убедитесь, что все узлы видят друг друга и правильно настроены для работы в единообразной сети. Если после выполнения всех рекомендаций проблема не будет решена, рекомендуется обратиться к документации Keycloak или сообществу поддержки.

Оцените материал
Добавить комментарий

Капча загружается...