You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak standalone-ha实例跨节点配置不同步问题咨询

排查方向

这类跨节点配置不同步的问题和数据库写入无关,核心是Keycloak HA集群的Infinispan缓存失效广播没正常工作,按以下优先级排查:

  • 先查集群节点是否成功组网:看两个实例的启动日志,找JGroups集群视图相关的日志行,正常组网成功的话,每个实例打印的集群成员列表必须包含两个实例的地址。如果每个实例的成员列表都只有自己,说明根本没组成集群,缓存变更通知根本发不到对端。同机部署最常见的原因是两个实例用了默认的同一个JGroups通信端口(默认57600),端口冲突导致集群发现失败。
  • 查缓存配置是否被误改:打开standalone-ha.xml定位到Infinispan配置段,检查realms、clients、authenticationFlows、authorization这几个存储核心配置的缓存,是否被误改成了local-cache。默认HA配置中这些缓存都是集群模式,配置写入数据库后会广播失效事件,通知其他节点清理本地旧缓存、从数据库加载新数据;如果是本地缓存,节点永远只会读自己内存里的旧数据,不会感知到其他节点的变更。
  • 查JGroups通信端口连通性:如果改了TCP协议栈做集群通信,确认两个节点的JGroups绑定端口没有被本地防火墙拦截,同机部署建议直接绑定环回地址,避免网卡选错导致通信失败。
  • 验证缓存失效逻辑:在A节点修改完配置后,去B节点的管理控制台随便改一个无影响的配置(比如给测试客户端加个无关的备注)点保存,看B节点是否会加载出A节点之前改的认证流、客户端配置。如果能加载出来,就完全坐实是B节点没收到缓存失效通知,一直用内存旧数据,和数据库无关。
  • 最后低概率项检查:确认MariaDB的事务隔离级别没有被改成高于可重复读的级别,避免事务可见性异常;检查两个实例是否开启了Infinispan本地缓存持久化,旧的持久化缓存文件可能在启动时直接加载了旧数据,不读库。
解决方法
  • 同机部署两个实例时,启动命令必须给每个实例指定独立的JGroups绑定端口和私有绑定地址,示例启动参数:
    第一个实例加:-Djboss.bind.address.private=127.0.0.1 -Djgroups.bind.port=7600
    第二个实例加:-Djboss.bind.address.private=127.0.0.1 -Djgroups.bind.port=7700
    如果UDP多播在本地环境不通,直接把JGroups的发现协议改成TCPPING,在配置中显式指定两个节点的地址列表,跳过不可靠的多播发现。
  • 不要随意修改standalone-ha.xml默认的Infinispan缓存模式,核心配置类缓存必须使用集群模式(replicated-cache或distributed-cache),禁止改成local-cache。
  • 如果之前启动过实例,先清理两个实例data/目录下的Infinispan持久化缓存文件,再重启实例,避免旧缓存数据干扰。
  • 临时兜底方案:如果集群通信暂时调不通,可以把核心配置类缓存的max-idle时间改短到30秒以内,这样就算没收到失效通知,节点最多30秒也会自动淘汰旧缓存,从数据库加载最新配置,不建议生产环境长期用这个方案。

内容的提问来源于stack exchange,提问作者b0w92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:20:04