AWS Route 53 作為 ROSA 的負載平衡器
本指南說明如何在特定站點發生故障時,實現 Keycloak 部署的自動用戶端故障轉移。
Route 53 用於用戶端故障轉移
為了提供用戶端故障轉移,我們可以利用 AWS Route 53 的 DNS 故障轉移功能,在主要站點關閉時自動重新路由流量。AWS 上的健康檢查會每 30 秒檢查一次站點是否有回應,並且用戶端看到的 DNS 將會相應地更新。
此腳本會產生一個子網域名稱,並為我們的根網域 keycloak-benchmark.com
提供三個額外的主機條目。
primary.<產生的子網域>.keycloak-benchmark.com
-
Keycloak 站點 1 的子網域
backup.<產生的子網域>.keycloak-benchmark.com
-
Keycloak 站點 2 的子網域
client.<產生的子網域>.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.<產生的子網域>.keycloak-benchmark.com
連線至主要站點。./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.<產生的子網域>.keycloak-benchmark.com
不再健康。這可以透過檢查 AWS 主控台中的健康檢查來確認。 -
從第一個步驟執行腳本,應傳回結束代碼
1
。