AWS Route 53 作为 ROSA 的负载均衡器
本指南描述了当给定站点发生故障时,如何实现 Keycloak 部署的自动客户端故障转移。
Route 53 用于客户端故障转移
为了提供客户端故障转移,我们可以利用 AWS Route 53 的 DNS 故障转移 功能,以便在主站点宕机时自动重新路由流量。AWS 上的健康检查每 30 秒检查一次站点是否响应,客户端看到的 DNS 将相应更新。
此脚本生成一个子域名名称,以及我们根域名 keycloak-benchmark.com
的三个进一步的主机条目。
primary.<generated-subdomain>.keycloak-benchmark.com
-
Keycloak 站点 1 的子域名
backup.<generated-subdomain>.keycloak-benchmark.com
-
Keycloak 站点 2 的子域名
client.<generated-subdomain>.keycloak-benchmark.com
-
Keycloak 客户端使用的子域名,在发生故障时将自动从站点 1 故障转移到站点 2。
这些 DNS 条目已在 OpenShift 集群中注册,以便它们响应对该主机名的请求。设置完成后,Keycloak 部署将更新为使用新的主机名。
请参见下面新创建的元素(绿色)和更新的元素(黄色)。
为了确保在没有用户输入的情况下,故障的主站点不会被标记为健康,例如在自动 ROSA 集群重启的情况下,我们创建了一个 AWS SNS 主题,每当主健康检查失败时,该主题都会触发一个事件。此主题用于触发一个 AWS Lambda 函数,该函数将健康检查更新为指向不存在的端点 /lb-check-failed-over
。为了从备份集群故障恢复到主集群,需要手动将健康检查更新回 /lb-check
。
设置新的 Route 53 故障转移
步骤
-
创建两个 ROSA 集群
-
创建子域名记录和健康检查
PRIMARY_CLUSTER=<name-rosa-cluster> \ BACKUP_CLUSTER=<name-of-rosa_cluster> \ ./provision/aws/route53/route53_create.sh
记下脚本生成的域名和 URL,以供后续步骤使用。子域名名称的生成部分允许在不同的集群中存在多个 Keycloak 实例。
Domain: <generated-subdomain>.keycloak-benchmark.com Client Site URL: client.<generated-subdomain>.keycloak-benchmark.com Primary Site URL: primary.<generated-subdomain>.keycloak-benchmark.com Backup Site URL: backup.<generated-subdomain>.keycloak-benchmark.com
-
正常部署 Keycloak,但需要设置以下环境变量。
-
主集群
KC_HOSTNAME_OVERRIDE=client.<generated-subdomain>.keycloak-benchmark.com # Hostname used by clients KC_HEALTH_HOSTNAME=primary.<generated-subdomain>.keycloak-benchmark.com # Hostname used by AWS health checks
-
备份集群
KC_HOSTNAME_OVERRIDE=client.<generated-subdomain>.keycloak-benchmark.com # Hostname used by clients KC_HEALTH_HOSTNAME=backup.<generated-subdomain>.keycloak-benchmark.com # Hostname used by AWS health checks
-
测试故障转移
要测试从主站点到备份站点的故障转移,请执行以下操作
-
验证
client.<generated-subdomain>.keycloak-benchmark.com
连接到 primary。./provision/aws/route53/route53_test_primary_used.sh <generated-subdomain>.keycloak-benchmark.com; echo $?
如果
client.
子域名指向的 IP 与primary.
子域名相同,则脚本返回0
。如果 PRIMARY_CLUSTER
和BACKUP_CLUSTER
设置为相同的 ROSA 集群,则此脚本将失败。 -
登录到主 ROSA 集群,并从 keycloak 命名空间中删除
aws-health-route
路由。 -
等待约 30 秒,让健康检查确定
primary.<generated-subdomain>.keycloak-benchmark.com
不再健康。这可以通过在 AWS 控制台 中检查健康检查来确认。 -
执行第一步的脚本,应返回退出代码
1
。