Вопрос или проблема
Я создал тестовую виртуальную машину для применения кластеризации 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.
Анализ конфигурации
-
Конфигурация 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-адресов и портов.
-
Конфигурация 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, а не тем, который вы указали в настройках.
Рекомендации по устранению неисправностей
Для решения данной проблемы выполните следующие шаги:
-
Проверьте настройки сети: Убедитесь, что виртуальной машине назначены правильные IP-адреса. Попробуйте использовать
10.0.0.5
как внутренний IP, чтобы обеспечить доступ к кластеру. Проверьте, запускаются ли другие экземпляры Keycloak на указанных IP-адресах. -
Настройте JGroups: Возможно, стоит изменить настройки JGroups для использования более общего образа адреса, например, заменив
bind_addr
иexternal_addr
на0.0.0.0
или добавив точно определённые адреса вашей сети. -
Разрешения сетевых интерфейсов: Убедитесь, что ваши виртуальные сети настроены так, чтобы umożyć общение между узлами. Также проверьте настройки брандмауэра (iptables) и разрешений Docker на доступ к портам.
-
Запуск с дополнительными параметрами: Для более детальной диагностики вы можете запустить Keycloak с параметром
-Djboss.bind.address=<ваш IP>
, где вместо<ваш IP>
укажите адрес, на котором хотите запустить Keycloak. -
Добавление дополнительных узлов: Если вы планируете запускать несколько экземпляров, убедитесь, что все узлы могут видеть друг друга по сети и слушают на порту 7805.
Заключение
Настройка кластеризации Keycloak может быть сложной задачей из-за особенностей сетевой конфигурации и специфики окружения. Следуя рекомендациям по анализу и настройке, вы сможете устранить возникшие проблемы и осуществить успешную кластеризацию. Убедитесь, что все узлы видят друг друга и правильно настроены для работы в единообразной сети. Если после выполнения всех рекомендаций проблема не будет решена, рекомендуется обратиться к документации Keycloak или сообществу поддержки.