kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222
これは、2つのサイトの Infinispan クラスタの状態が切断され、キャッシュの内容が同期しなくなった場合に使用します。例えば、スプリットブレインの後や、一方のサイトがメンテナンスのためにオフラインになった場合などに実行します。
手順の最後に、セカンダリサイトのデータは破棄され、アクティブサイトのデータに置き換えられます。オフラインサイト内のすべてのキャッシュは、無効なキャッシュコンテンツを防ぐためにクリアされます。
このガイドのコンテキストでは、site-a
は現在アクティブなサイトであり、site-b
は AWS Global Accelerator EndpointGroup の一部ではなく、したがってユーザーリクエストを受信していないオフラインサイトです。
状態を転送すると、応答時間やリソース使用量の増加により、Infinispan クラスタのパフォーマンスに影響を与える可能性があります。 |
最初の手順は、オフラインサイトから古いデータを削除することです。
オフラインサイトにログインします。
Keycloak をシャットダウンします。これにより、すべての Keycloak キャッシュがクリアされ、Keycloak の状態が Infinispan と同期しなくなるのを防ぎます。
Keycloak Operator を使用して Keycloak をデプロイする場合、Keycloak Custom Resource 内の Keycloak インスタンスの数を 0 に変更します。
Infinispan CLI ツールを使用して Infinispan クラスタに接続します。
kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222
Infinispan クラスタのユーザー名とパスワードが要求されます。これらの認証情報は、「Infinispan Operator を使用した HA のための Infinispan のデプロイ」ガイドの認証情報の設定セクションで設定されたものです。
Username: developer
Password:
[infinispan-0-29897@ISPN//containers/default]>
ポッド名は、Infinispan CR で定義されたクラスタ名によって異なります。接続は、Infinispan クラスタ内の任意のポッドで行うことができます。 |
次のコマンドを実行して、オフラインサイトからアクティブサイトへのレプリケーションを無効にします。これにより、クリアリクエストがアクティブサイトに到達し、正しいキャッシュデータがすべて削除されるのを防ぎます。
site take-offline --all-caches --site=site-a
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
レプリケーションステータスが offline
であることを確認します。
site status --all-caches --site=site-a
{
"status" : "offline"
}
ステータスが offline
でない場合は、前の手順を繰り返します。
レプリケーションが offline であることを確認してください。そうしないと、クリアデータが両方のサイトをクリアしてしまいます。 |
次のコマンドを使用して、オフラインサイト内のすべてのキャッシュデータをクリアします。
clearcache actionTokens
clearcache authenticationSessions
clearcache loginFailures
clearcache work
これらのコマンドは何も出力しません。
オフラインサイトからアクティブサイトへのクロスサイトレプリケーションを再度有効にします。
site bring-online --all-caches --site=site-a
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
レプリケーションステータスが online
であることを確認します。
site status --all-caches --site=site-a
{
"status" : "online"
}
これで、アクティブサイトからオフラインサイトへの状態転送の準備ができました。
アクティブサイトにログインします。
Infinispan CLI ツールを使用して Infinispan クラスタに接続します。
kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222
Infinispan クラスタのユーザー名とパスワードが要求されます。これらの認証情報は、「Infinispan Operator を使用した HA のための Infinispan のデプロイ」ガイドの認証情報の設定セクションで設定されたものです。
Username: developer
Password:
[infinispan-0-29897@ISPN//containers/default]>
ポッド名は、Infinispan CR で定義されたクラスタ名によって異なります。接続は、Infinispan クラスタ内の任意のポッドで行うことができます。 |
アクティブサイトからオフラインサイトへの状態転送をトリガーします。
site push-site-state --all-caches --site=site-b
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
すべてのキャッシュでレプリケーションステータスが online
であることを確認します。
site status --all-caches --site=site-b
{
"status" : "online"
}
すべてのキャッシュについて push-site-status
コマンドの出力を確認して、状態転送が完了するのを待ちます。
site push-site-status --cache=actionTokens
site push-site-status --cache=authenticationSessions
site push-site-status --cache=loginFailures
site push-site-status --cache=work
{
"site-b" : "OK"
}
{
"site-b" : "OK"
}
{
"site-b" : "OK"
}
{
"site-b" : "OK"
}
ステータス値の可能性については、「クロスサイトドキュメントのこのセクション」の表を確認してください。
エラーが報告された場合は、その特定のキャッシュの状態転送を繰り返します。
site push-site-state --cache=<cache-name> --site=site-b
次のコマンドで状態転送ステータスをクリア/リセットします。
site clear-push-site-status --cache=actionTokens
site clear-push-site-status --cache=authenticationSessions
site clear-push-site-status --cache=loginFailures
site clear-push-site-status --cache=work
"ok"
"ok"
"ok"
"ok"
これで状態がオフラインサイトで利用可能になったため、Keycloak を再度起動できます。
セカンダリサイトにログインします。
Keycloak を起動します。
Keycloak Operator を使用して Keycloak をデプロイする場合、Keycloak Custom Resource 内の Keycloak インスタンスの数を元の値に変更します。
2つのサイトが同期されたら、「サイトをオンラインにする」ガイドの手順に従って、以前にオフラインだったサイトを Global Accelerator EndpointGroup に安全に追加できます。
「Infinispan CLI コマンドを自動化するための概念」を参照してください。