HA 模式下的 Keycloak(Wildfly/Infinispan) - 检测集群中其他机器的问题
Keycloak(Wildfly/Infinispan) in HA mode - issue in detecting other machines in the cluster
因此,当我将机器置于 ELB 下时,登录不起作用。
我已尝试使用 TCP 和 UDP 进行 IP 广播。尝试使用 TCPPING 而不是 MPING(虽然不确定我是否正确使用它们)。
Infinispan 被用于分布式缓存。
这是默认配置,后面是我所做的更改:
<subsystem xmlns="urn:jboss:domain:jgroups:7.0">
<channels default="tcp">
<channel name="ee" stack="udp" cluster="ejb"/>
</channels>
<stacks>
<stack name="udp">
<transport type="UDP" socket-binding="jgroups-udp"/>
<protocol type="PING"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="UFC"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
<stack name="tcp">
<transport type="TCP" socket-binding="jgroups-tcp"/>
<socket-protocol type="MPING" socket-binding="jgroups-mping"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
</stacks>
</subsystem>
更改为 TCP,并在 TCP 堆栈中删除 MPING 以添加 TCPPING:
<transport type="TCP" socket-binding="jgroups-tcp"/>
<protocol type="TCPPING">
<property name="initial_hosts"><IP of VM1>[7600],<IP of VM2>[7600]</property>
<property name="port_range">0</property>
</protocol>
如何进一步调试部署?
我是这样调试的:
确保 jgroups-tcp
和 jgroups-tcp-fd
正在监听 public 接口,而不是私有接口。这些属性位于 standalone/configurations/standalone-ha.xml
.
在通过 bin/standalone.sh | bin/standalone.bat
启动集群实例时,请确保传递 -b <public interface IP>
而不是 0.0.0.0
(所有接口)。要查找 public 接口 IP,运行 以下命令:
ifconfig eth0 | grep -i mask | awk '{print }'| cut -f2 -d:
当你启动第一个实例时(应该是你传入的实例initial_hosts
属性;你可以尝试telnet <IP> 7600
测试你的TCPPING是否正常或不。它应该适用于集群发现。
因此,当我将机器置于 ELB 下时,登录不起作用。 我已尝试使用 TCP 和 UDP 进行 IP 广播。尝试使用 TCPPING 而不是 MPING(虽然不确定我是否正确使用它们)。 Infinispan 被用于分布式缓存。 这是默认配置,后面是我所做的更改:
<subsystem xmlns="urn:jboss:domain:jgroups:7.0">
<channels default="tcp">
<channel name="ee" stack="udp" cluster="ejb"/>
</channels>
<stacks>
<stack name="udp">
<transport type="UDP" socket-binding="jgroups-udp"/>
<protocol type="PING"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="UFC"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
<stack name="tcp">
<transport type="TCP" socket-binding="jgroups-tcp"/>
<socket-protocol type="MPING" socket-binding="jgroups-mping"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
</stacks>
</subsystem>
更改为 TCP,并在 TCP 堆栈中删除 MPING 以添加 TCPPING:
<transport type="TCP" socket-binding="jgroups-tcp"/>
<protocol type="TCPPING">
<property name="initial_hosts"><IP of VM1>[7600],<IP of VM2>[7600]</property>
<property name="port_range">0</property>
</protocol>
如何进一步调试部署?
我是这样调试的:
确保
jgroups-tcp
和jgroups-tcp-fd
正在监听 public 接口,而不是私有接口。这些属性位于standalone/configurations/standalone-ha.xml
.在通过
bin/standalone.sh | bin/standalone.bat
启动集群实例时,请确保传递-b <public interface IP>
而不是0.0.0.0
(所有接口)。要查找 public 接口 IP,运行 以下命令:ifconfig eth0 | grep -i mask | awk '{print }'| cut -f2 -d:
当你启动第一个实例时(应该是你传入的实例
initial_hosts
属性;你可以尝试telnet <IP> 7600
测试你的TCPPING是否正常或不。它应该适用于集群发现。