模拟 Keycloak 站点故障转移

先决条件

  • 一个跨两个 Openshift 集群复制的 Keycloak 实例,使用 Infinispan xsite 和 Aurora DB

  • Realm、用户和客户端已存在,其值符合基准测试 CLI 命令的要求

从 CLI 运行故障测试

准备工作

  • 解压 keycloak-benchmark-${version}.[zip|tar.gz] 文件

  • 为测试准备 Keycloak

  • 确保您的本地 KUBECONFIG 设置为您想要发生故障的 Openshift 集群。

参数

故障转移脚本需要设置以下环境变量:FAILOVER_MODEDOMAIN

FAILOVER_MODE 确定脚本启动的故障转移类型,可以是以下值之一

FAILOVER_MODE 描述

HEALTH_PROBE

删除 Keycloak aws-health-route,以便 Route53 最终会故障转移。

KEYCLOAK_ROUTES

删除所有 Keycloak 路由,以便 Route53 最终会故障转移,但对旧 DNS IP 地址的请求将失败。 Keycloak Operator 缩减到 0 个 pod,以防止重新创建 Keycloak Ingress。

CLUSTER_FAIL

删除所有 Keycloak 和 Infinispan pod,不设置宽限期,并删除关联的 StatefulSet。 两个 Operator 都被缩减,以防止重新创建已删除的资源。

GOSSIP_ROUTER_FAIL

删除 Infinispan Gossip Router pod,不设置宽限期,并删除关联的 Deployment。 Infinispan operator 被缩减,以防止重新创建已删除的资源。

请参阅下文,了解可以配置的其他环境变量的描述。

DOMAIN

必需。 托管 client.primary.backup. 子域的 Route53 域。

FAILOVER_DELAY

可选。 在启动集群故障转移之前等待的延迟秒数。 默认为 60 秒。

执行

使用 从 CLI 运行基准测试 指南来模拟针对特定 Kubernetes 环境的负载。

并行执行以下命令以启动故障转移

FAILOVER_MODE="KEYCLOAK_ROUTES" DOMAIN=... ./kc-failover.sh
为了使 kc-failover.sh 脚本准确记录 Route53 故障转移发生所需的时间,建议在与 Keycloak 基准测试场景相同的环境中执行该脚本。

在故障转移测试后恢复集群

一旦执行了故障转移基准测试,就可以通过设置 RECOVERY_MODE 环境变量来执行脚本,从而恢复原始集群状态。 RECOVERY_MODE 的值确定用于重新创建 aws-health-route 路由的子域。

参数

RECOVERY_MODE 描述

ACTIVE

使用 primary.${DOMAIN} URL 重新创建 aws-health-route 路由,并扩容 Infinispan 和 Keycloak Operator。

PASSIVE

使用 backup.${DOMAIN} URL 重新创建 aws-health-route 路由,并扩容 Infinispan 和 Keycloak Operator。

DOMAIN

必需。 托管 client.primary.backup. 子域的 Route53 域。

执行

RECOVERY_MODE=ACTIVE DOMAIN=... ./kc-failover.sh