Kubernetes部署Keycloak性能优化:需支持500CCU并优化响应时间
Keycloak集群性能优化方案(解决Infinispan超时&提升至500CCU)
问题定位
当前压测到150CCU出现Infinispan缓存超时错误,且Pod CPU/内存占用仅20%未触发HPA,说明瓶颈不在于计算资源,而是分布式缓存同步延迟或缓存配置不合理导致的请求阻塞。
具体优化配置
一、Infinispan缓存核心参数调整(针对standalone-ha.xml)
调整缓存副本数(CACHE_OWNERS)
默认缓存副本数过高会增加跨Pod同步开销,修改以下核心缓存的owners属性:<cache-container name="keycloak"> <!-- 认证会话缓存 --> <replicated-cache name="authenticationSessions" mode="SYNC"> <locking isolation="REPEATABLE_READ" acquire-timeout="3000" concurrency-level="1000"/> <transaction mode="NON_XA"/> <state-transfer enabled="true" timeout="60000"/> <!-- 集群节点数≥2时设为2,减少同步压力 --> <cluster owners="2"/> </replicated-cache> <!-- 登录失败缓存 --> <replicated-cache name="loginFailures" mode="SYNC"> <locking isolation="REPEATABLE_READ" acquire-timeout="3000" concurrency-level="1000"/> <transaction mode="NON_XA"/> <cluster owners="2"/> </replicated-cache> <!-- 用户会话缓存 --> <replicated-cache name="sessions" mode="SYNC"> <locking isolation="REPEATABLE_READ" acquire-timeout="3000" concurrency-level="1000"/> <transaction mode="NON_XA"/> <cluster owners="2"/> </replicated-cache> </cache-container>说明:集群节点数超过3时,可将
owners设为2-3,平衡冗余度与同步开销。延长缓存操作超时时间
针对超时错误,调整缓存的锁定与请求超时:<!-- 在cache-container下添加传输层超时配置 --> <transport executor="infinispan-transport" lock-timeout="6000"/> <!-- 具体缓存的锁等待超时调整为5000ms --> <locking isolation="REPEATABLE_READ" acquire-timeout="5000" concurrency-level="2000"/>切换部分缓存为异步模式(可选)
对非强一致性要求的缓存(如loginFailures),改为ASYNC异步模式降低同步压力:<replicated-cache name="loginFailures" mode="ASYNC"> <!-- 其他配置保持不变 --> </replicated-cache>注意:
sessions和authenticationSessions需保留SYNC模式,避免会话不一致。
二、令牌与会话生命周期优化
通过缩短无效资源留存时间,减少缓存占用:
- Access Token Lifespan(访问令牌有效期):在Keycloak控制台「领域设置→令牌」中,从默认5分钟改为1分钟(可根据业务场景调整至30秒)。
- SSO Session Idle(SSO会话闲置超时):改为5分钟,自动清理闲置会话。
- SSO Session Max(SSO会话最长有效期):改为1小时,避免长期无效会话占用缓存。
三、HPA配置优化
当前仅基于CPU触发扩容,无法应对缓存瓶颈,调整如下:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: keycloak-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: keycloak minReplicas: 3 # 提升最小副本数,增强缓存同步冗余度 maxReplicas: 8 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 80 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 70 # 增加内存触发条件
四、额外调优建议
启用缓存统计
在standalone-ha.xml中开启Infinispan统计,便于定位缓存热点:<cache-container name="keycloak" statistics="true"> <!-- 其他配置 --> </cache-container>可通过JMX或Keycloak监控面板查看缓存命中率、同步延迟等指标。
数据库连接池优化
调整数据源连接池参数,避免数据库连接成为瓶颈:<datasource name="KeycloakDS" jndi-name="java:jboss/datasources/KeycloakDS"> <pool> <min-pool-size>20</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> </datasource>Kubernetes网络优化
将Keycloak Pod调度到同一可用区,减少跨节点网络延迟,或启用集群网络优化插件提升缓存同步效率。
内容的提问来源于stack exchange,提问作者Viettel Solutions
相关产品推荐
相关产品推荐

