模拟 Keycloak 站点故障转移

先决条件

  • 一个跨两个 OpenShift 集群复制的 Keycloak 实例,具有 Infinispan xsite 和 Aurora DB

  • 领域、用户和客户端存在,并具有基准测试 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 运算符被缩减到 0 个 Pod,以防止 Keycloak Ingress 被重新创建。

CLUSTER_FAIL

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

GOSSIP_ROUTER_FAIL

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

有关可以配置的其他环境变量的描述,请参见下文。

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 运算符。

PASSIVE

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

DOMAIN

必需。承载 client.primary.backup. 子域的 Route53 域名。

执行

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