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