第 10 章 服务器缓存配置
Red Hat Single Sign-On 有两个缓存类型。其中一种缓存位于数据库前面,以减少 DB 的负载,并通过将数据保留在内存中来降低总体响应时间。realm、client、role 和 user 元数据保存在这种类型的缓存中。这个缓存是一个本地缓存。即使您位于带有更多 Red Hat Single Sign-On 服务器的集群中,本地缓存也不使用复制。相反,它们只会在本地保留副本,如果条目被更新为集群的其余部分,则会使条目被驱除。复制的缓存 工作
有单独的,该任务是将无效消息发送到整个集群,了解应从本地缓存驱除哪些条目。这可大大减少网络流量,提高了效率,避免通过线路传输敏感元数据。
第二个缓存处理管理用户会话、离线令牌以及跟踪登录故障,以便服务器能够检测密码中断和其他攻击。这些缓存中保存的数据仅在内存中临时,但可能在群集中复制。
本章讨论为集群和非集群部署的这些缓存的一些配置选项。
这些缓存的更高级配置可以在 JBoss EAP 配置指南 的 Infinispan 部分中找到。
10.1. 驱除和过期
为红帽单点登录配置了多个不同缓存。有一个域缓存,它保存有关安全应用程序、常规安全数据和配置选项的信息。还有一个用户缓存,其中包含用户元数据。两个缓存都默认为 10000 个条目,并使用至少最近使用的驱除策略。它们也都与用于控制集群设置中驱除的对象修订缓存相关联。此缓存隐式创建,其配置的大小会两倍。同样适用于包含授权数据 的授权
缓存。密钥
缓存保存有关外部密钥的数据,不需要具有专用修订版本缓存。相反,它明确声明了 过期
,因此这些密钥会定期过期,并强制定期从外部客户端或身份提供程序下载。
这些缓存的驱除策略和最大条目可以在 standalone. xml、standalone -ha.xml 或 domain.xml 中配置,具体取决于您的 操作模式。在配置文件中,有 infinispan 子系统的部分,其类似于:
<subsystem xmlns="urn:jboss:domain:infinispan:12.0"> <cache-container name="keycloak"> <local-cache name="realms"> <object-memory size="10000"/> </local-cache> <local-cache name="users"> <object-memory size="10000"/> </local-cache> ... <local-cache name="keys"> <object-memory size="1000"/> <expiration max-idle="3600000"/> </local-cache> ... </cache-container>
要限制或扩展允许条目的数量,只需添加或编辑 对象
元素或特定缓存配置的 过期
元素。
此外,也有单独的缓存 会话、
、客户端会话
、离线
会话offlineClientSessions
、loginFailures
和 actionTokens
。这些缓存在集群环境中分布,默认大小不绑定。如果将它们绑定,则可能会丢失一些会话。Red Hat Single Sign-On 本身在内部清除过期的会话,以避免在不限制的情况下增加这些缓存的大小。如果因为大量会话而导致内存问题,您可以尝试:
- 增加集群的大小(集群中更多节点意味着会话在节点间平均分配)
- 增加 Red Hat Single Sign-On 服务器进程的内存
- 减少所有者的数量,以确保缓存保存在一个位置。详情请查看 第 10.2 节 “复制和故障转移”
- 为分布式缓存禁用 l1-lifespan。如需了解更多信息,请参阅span 文档
- 减少会话超时,这可单独为 Red Hat Single Sign-On 管理控制台中的每个域进行。但是,这可能会对最终用户的可用性产生影响。如需了解更多详细信息 ,请参阅超时。
有一个额外的复制缓存 work
,它主要用于在集群节点之间发送消息;默认情况下也未绑定。但是,这个缓存不应该造成任何内存问题,因为这个缓存中的条目非常短。