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

Keycloak高可用架构:分布式缓存有效性检测问题

Keycloak分布式缓存正常工作的检测方法

先修正你的测试方式

你直接访问节点A和节点B的测试方法本身存在问题,核心原因有两个:

  • Keycloak的会话Cookie默认绑定当前访问的域名/端口,直接访问不同节点会让浏览器生成两个独立的Cookie,自然无法共享会话。
  • 如果节点间未配置共享加密密钥,节点B无法解密节点A生成的会话数据,会直接失效原有会话,导致两边都登出。

正确的测试姿势应该走负载均衡器:通过HAProxy的统一域名访问Keycloak,登录后手动让HAProxy转发请求到另一个节点(比如临时禁用当前节点、调整权重),再操作页面验证是否保持登录状态。

具体检测缓存正常的方法

1. 确认Infinispan集群状态

在每个Keycloak节点的控制台日志中,搜索ISPN000094: Received new cluster view,确认两个节点都在集群成员列表内。也可以通过管理API查询缓存状态:

# 替换为你的管理员账号、密码和负载均衡地址
curl -u admin:admin http://<负载均衡地址>/admin/serverinfo

在返回的JSON结果中,找到infinispan相关字段,查看集群节点数量和各类缓存的运行状态。

2. 验证跨节点会话同步

  • 通过负载均衡器登录Keycloak,打开浏览器开发者工具的Application标签,记录KEYCLOAK_SESSION和KEYCLOAK_SESSION_LEGACY的Cookie值。
  • 强制HAProxy将后续请求转发到另一个节点(比如临时修改HAProxy配置,把当前节点权重设为0)。
  • 刷新页面,检查Cookie是否有效、页面是否保持登录状态;同时查看目标节点的日志,搜索Session loaded from cache,确认会话数据从分布式缓存中加载成功。

3. 检查缓存配置一致性

确保两个Keycloak节点的Infinispan配置完全一致,重点核对:

  • jdbc_ping的数据库连接配置是否相同,确认JGROUPSPING表中存在两个节点的订阅记录。
  • 是否配置了共享加密密钥:在docker-compose.yml中给两个节点添加相同的环境变量:
    environment:
      - KC_SPI_CONNECTIONS_INFINISPAN_CACHE_CONTAINER_ENCRYPTION_KEY=<32位共享密钥>
    
  • 确认会话类缓存(如sessions、authenticationSessions)的模式为DIST_SYNC(分布式同步),可通过节点日志中ISPN000128: Infinispan version下方的缓存配置信息验证。

4. 测试配置与令牌缓存同步

  • 登录管理控制台后,在节点A创建一个新角色,通过负载均衡器切换到节点B,检查该角色是否存在(验证配置类缓存同步)。
  • 登录前端应用获取访问令牌,将请求转发到节点B,用该令牌调用用户信息接口,确认能正常返回用户数据(验证令牌缓存同步)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:46:08