AWS Route 53 (ロードバランサー) for ROSA
このガイドでは、特定のサイトで障害が発生した場合に、Keycloak デプロイメントで自動クライアントフェイルオーバーを達成する方法について説明します。
クライアントフェイルオーバーのための Route 53
クライアントフェイルオーバーを提供するために、プライマリサイトがダウンした場合にトラフィックを自動的に再ルーティングするために、AWS Route 53 の DNS フェイルオーバー 機能を利用できます。AWS のヘルスチェックは、サイトが応答しているかどうかを 30 秒ごとにチェックし、クライアントから見た DNS はそれに応じて更新されます。
このスクリプトは、ルートドメイン keycloak-benchmark.com
用に、3 つの追加ホストエントリを持つサブドメイン名を生成します。
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 トピックを作成します。このトピックは、存在しないエンドポイント /lb-check-failed-over
を指すようにヘルスチェックを更新する AWS Lambda 関数をトリガーするために使用されます。バックアップからプライマリークラスターにフェイルバックするには、ヘルスチェックを手動で /lb-check
に更新する必要があります。
新しい Route 53 フェイルオーバーのセットアップ
手順
-
2 つの 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.
サブドメインがprimary.
サブドメインと同じ IP を指している場合、スクリプトは0
を返します。PRIMARY_CLUSTER
とBACKUP_CLUSTER
が同じ ROSA クラスターに設定されている場合、このスクリプトは失敗します。 -
プライマリ ROSA クラスターにログインし、keycloak 名前空間から
aws-health-route
Route を削除します。 -
ヘルスチェックが
primary.<生成されたサブドメイン>.keycloak-benchmark.com
が正常でなくなったと判断するまで約 30 秒待ちます。これは、AWS コンソール でヘルスチェックを検査することで確認できます。 -
最初の手順のスクリプトを実行すると、終了コード
1
が返されるはずです。