2.2. 横向扩展


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

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

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

如果没有使用 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 自定义资源是可扩展的,这意味着它可以被内置的自动扩展器 作为目标。例如,要根据平均 CPU 使用率缩放:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: keycloak-hpa
  namespace: keycloak-cluster
spec:
  scaleTargetRef:
    apiVersion: k8s.keycloak.org/v2alpha1
    kind: Keycloak
    name: keycloak
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 80
Copy to Clipboard Toggle word wrap
注意

通常不需要在内存中扩展持久会话,在使用远程 Data Grid 时不需要全部扩展。如果您使用持久的会话或远程 Data Grid,且遇到内存问题,则最好完全诊断问题,并重新查看 调整 CPU 和内存资源指南的概念。对于水平扩展,最好调整内存请求和限制。

如需更多信息,请参阅 Kubernetes 文档,包括使用 自定义指标

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat