2.2. 横向扩展


单个红帽构建的 Keycloak 实例容易受到可用性问题的影响。如果实例停机,您将遇到完全中断,直到另一个实例启动为止。通过在不同的机器上运行两个或多个群集成员,您可以大大增加红帽构建的 Keycloak 的可用性。

单个 JVM 对它可以处理的并发请求数量有限制。其他服务器实例可提供大致线性的吞吐量扩展,直到相关的资源(如数据库或分布式缓存)限制该扩展。

通常,请考虑允许红帽构建 Keycloak Operator 来处理横向扩展问题。使用 Operator 时,根据需要设置 Keycloak 自定义资源 spec.instances,以水平扩展。如需了解更多详细信息,请参阅使用 Red Hat build of Keycloak Operator 部署红帽构建的 Keycloak for HA

如果没有使用 Operator,请查看以下内容:

  • 您的实例可能更高的可用性位于独立的机器上。在 Kubernetes 上,使用 Pod anti-affinitity 来强制执行这一点。
  • 使用分布式缓存;对于多站点集群,将外部缓存用于群集成员来共享同一状态。有关相关配置的详情,请参阅配置分布式缓存。嵌入的 Infinispan 缓存具有横向扩展的注意事项,包括:

    • 您的实例需要一种方式来互相发现。如需更多信息,请参阅配置分布式缓存中的发现
    • 此缓存不适用于跨越多个可用区(也称扩展集群)的集群。对于嵌入式 Infinispan 缓存,可处理一个可用区中的所有实例。目标是避免在响应时间内扩大通信不必要的往返。在 Kubernetes 上,使用 Pod 关联性来强制实施这种 Pod 分组。
    • 这个缓存不会正常处理多个成员加入或同时保留。特别是,同时离开的成员可能会导致数据丢失。在 Kubernetes 中,您可以使用带有默认串行处理的 StatefulSet 来确保 Pod 按顺序启动和停止。

为了避免整个站点不可用时丢失服务可用性,请参阅高可用性指南以了解有关多站点部署的更多信息。请参阅多站点部署

2.2.1. 横向自动扩展

水平自动扩展允许根据需要添加或删除红帽构建的 Keycloak 实例。请记住,启动时间不是即时的,应该使用优化的镜像来最大程度减少开始时间。

在使用嵌入的 Infinispan 缓存集群时,动态添加或删除群集成员需要 Infinispan 来执行 Infinispan 缓存重新平衡,如果这些缓存中有很多条目,这可能会变得昂贵。要最大程度减少此时间,我们默认将会话相关缓存中的条目数限制为 10000。请注意,只有在配置中没有显式禁用 persistent-user-sessions 功能时,才能进行这个优化。

在 Kubernetes 中,Keycloak 自定义资源是可扩展的,这意味着它可以被内置的自动扩展器 作为目标。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.