使用され、Infinispanサーバーが別のサイトにデータのバックアップを試みたときに、バックアップが失敗すると、その失敗が呼び出し側(Keycloakサーバー)に伝播されるという点です。2番目のサイトが一時的に到達不能になったり、同じエンティティーの更新を試みる同時トランザクションが発生した場合は、バックアップが失敗する可能性があります。この場合、Keycloakサーバーは複数回再試行します。その再試行が失敗した場合、より長いタイムアウト後、ユーザーにはエラーが表示されます。使用すると、失敗したバックアップは、InfinispanサーバーからKeycloakサーバーに伝播されません。失敗したバックアップは無視され、ユーザーにはエラーが表示されません。バックアップのデフォルトのタイムアウトは10秒間であるため短いです。属性によって変更することができます。タイムアウトにおける再試行はありません。タイムアウト時は、InfinispanサーバーのログにWARNINGメッセージが表示されます。(再試行なし)では、サイト間でデータの不整合が発生します。これは、両方のサイトで同時に同じエンティティーを更新しようとする際にも発生します。これらの不整合はどれほど悪いことなのでしょうか。通常は、ユーザーが再認証する必要があることだけを意味します。キャッシュにより提供され、その特定のキーを処理する、使い捨てのキャッシュが実際に1回使用されますが、同じキーが2回"正常に"書き込まれる可能性があります。仕様では、コードは使い捨てでなければならないと言及されています。ポリシーでは、これは厳密には保証されておらず、両方のサイトで同時に書き込まれる試みがあった場合、同じコードが2回書き込まれる可能性があります。使用すると、サイトをオフラインおよびオンラインにするで説明したとおり、少し時間を置いて失敗した後、他のサイトはオフラインになります。デフォルトの1分のタイムアウトでは、関連するキャッシュがすべてオフラインになるまで、通常は1~3分かかります。その後、エンドユーザーの観点から、動作はすべて問題なく進みます。サイトをオフラインおよびオンラインにするで説明したとおり、オンラインに戻ったときに手動でサイトを復元する必要があります。警告がInfinispanログに書き込まれていないことです。詳細については、Infinispanのドキュメントを参照してください。ロックの取得タイムアウトデフォルト設定では、NON_DURABLE_XAモードでトランザクションを取得タイムアウト0で使用しています。これは、同じキーに対して進行中の別のトランザクションがある場合、トランザクションはすぐに失敗することを意味します。デフォルトの10秒ではなく0に切り替えるのは、デッドロックの可能性を避けるためです。Keycloakでは、同じエンティティー(通常はセッション・エンティティーまたはloginFailure)が両方のサイトから同時に更新されることがあります。これにより、状況によってはデッドロックが発生し、トランザクションが10秒間ブロックされる可能性があります。設定されていれば、Keycloakから再試行されます。2番目の同時トランザクションが終了するまで、通常は再試行が成功し、エンティティーは両方の同時トランザクションから更新を適用します。この設定での同時トランザクションは、非常に良い一貫性と結果が得られるため、そのまま使用することをお勧めします。唯一の(機能しない)問題は、Infinispanサーバーログの例外です。これは、ロックがすぐに利用できなくなるたびに発生します。どちらが必要かを決める必要があります。クロスサイト・レプリケーションを認識できる7つのキャッシュがあり、これらは、クロスサイトに対する次の3つの異なるモードで設定できます。バックアップが使用された場合、バックアップが同期され、バックアップが2番目のサイトで処理されると、呼び出し側(Keycloakサーバー)で操作が完了したとみなされます。更新が確実に確認されます。データの一貫性が必要な場合は、これは必須になります。場合と同様に、他のサイトへのバックアップが失敗した場合は、呼び出し側には全く通知されません。キャッシュによっては、バックアップをまったく取らず、Infinispanサーバーへのデータ書き込みを完全にスキップすることも可能です。要素を使用しないでください。要素もInfinispanサーバー側では必要ありません。バックアップで設定されています。考慮すべき点は次のとおりです。あるInfinispanサーバーが純粋にバックアップとしてのみ使用されます。方式を使用するのが通常は望ましいです。キャッシュは、主に、キャッシュ無効化イベントなどのいくつかのメッセージを他のサイトに送信するために使用されます。userStorageの同期化などの特別なイベントが単一のサイトでのみ発生するようにするためにも使用されます。設定することを推奨します。キャッシュは、使い捨てのキャッシュとして使用され、トークンまたはチケットが1回だけ使用されたということを追跡します。アクショントークンまたはOAuth2のコードです。設定して、パフォーマンスをわずかに向上させることは可能ですが、特定のチケットが実際に1回だけ使用され使い捨てになるかは保証されていません。方式によって両方のリクエストが成功する可能性があります。方式)を優先するかによります。キャッシュは、3つのモードのいずれかで使用できます。バックアップがまったくない場合、ユーザーのログイン失敗のカウントがサイトごとに個別にカウントされることを意味します(詳しくはInfinispanキャッシュを参照してください)。これにはいくつかのセキュリティー上の意味がありますが、パフォーマンス上の利点があります。サービス拒否(DoS)攻撃のリスクを軽減します。攻撃者が両方のサイトでユーザーのユーザー名とパスワードを使用して1000件の同時リクエストをシミュレートすると、サイト間で多くのメッセージが渡され、ネットワークの混雑が発生する可能性があります。方式は、攻撃者のリクエストが他のサイトへのバックアップを待つことによってブロックされず、潜在的にさらに混雑したネットワーク・トラフィックを招くため、状況は悪化する可能性があります。方式では正確ではありません。キャッシュをまったくバックアップしないことが推奨されます。保持しておくことをお勧めします。切り替えることが可能になります。次のような場合はこれが当てはまります。モードで説明した通り、アクティブ/パッシブモードを使用しています。JavaScriptアダプター.を使用しています。JavaScriptアダプターは、ブラウザー内でバックチャネル・リクエストを送信するため、それらはブラウザーのスティッキー・セッションに参加し、このユーザーの別のブラウザー・リクエストと同じクラスターノード(したがって同じサイト)で終了します。ロードバランサーは、クライアントIPアドレス(ロケーション)に基づいてリクエストを処理でき、クライアント・アプリケーションは両方のサイトにデプロイされています。ロンドンとニューヨークの2つのサイトがあります。アプリケーションがロンドンサイトとニューヨークサイトの両方に配備されている場合は、ロンドンユーザーからのすべてのユーザー・リクエストがロンドンサイトのアプリケーションとロンドンサイトのKeycloakサーバーにリダイレクトされるようにすることができます。ロンドンサイトのクライアント・デプロイメントからのバックチャネル・リクエストは、ロンドンサイトのKeycloakサーバーでも終了します。米国のユーザーの場合、すべてのKeycloakリクエスト、アプリケーション・リクエスト、バックチャネル・リクエストはニューヨークサイトで処理されます。対して、それは類似していますが、クライアント・アプリケーションのいずれに対してもオフライン・トークンを使用する予定ががない場合、それらをバックアップする必要はまったくありません。方式に保持する方が安全です。属性を編集してください。属性に注意してください。トラブルシューティング以下のヒントは、トラブルシューティングが必要な場合に役立ちます。9.4.19でのクロスサイト・レプリケーションの設定を行い、最初にこの機能を有効にして、どのように動作するかを理解することをお勧めします。物事を理解するためにこの文書全体を読むことも賢明です。Infinispanサーバーのセットアップで説明されているように、jconsoleクラスターのステータス(GMS)とInfinispanのJGroupsのステータス(RELAY)をチェックインします。状況が期待どおりに見えない場合、問題はInfinispanサーバーの設定にある可能性があります。Keycloakサーバーの場合、サーバーの起動時に次のようなメッセージが表示されます。site1Keycloakサーバーの起動時に、サイト名とノード名が想定どおりに表示されていることを確認してください。同じデータセンターのKeycloakサーバーだけが互いにクラスター化されていることを含め、Keycloakサーバーが期待どおりにクラスター内にあることを確認してください。これは、GMSビューを介してJConsoleでチェックすることもできます。詳細については、クラスターのトラブルシューティングを参照してください。org.infinispan.client.hotrod.impl.transport.tcp.TcpTransport.<init>(TcpTransport.java:82)これは通常、Keycloakサーバーが自身のデータセンター内のInfinispanサーバーにアクセスできないことを意味します。ファイアウォールが期待どおりに設定され、Infinispanサーバーが接続可能であることを確認してください。...サイトの該当するInfinispanサーバーのログをチェックし、他のサイトへのバックアップに失敗したかどうかを確認します。バックアップ・サイトが利用できない場合は、Infinispanサーバーがオフラインサイトにバックアップしようとしないようにオフラインに切り替えて、Keycloakサーバー側で正常に操作が成功するようにすることをお勧めします。JMXを介して利用可能なInfinispanの統計を確認してください。キャッシュで利用可能かどうかを確認します。キャッシュ内の要素の数をチェックすることによって間接的に行うことができます。1つ以上のエントリーが存在するはずです。Keycloakサーバーのセットアップの説明に従って、DEBUGロギングを有効にします。ログインして2番目のサイトで新しいセッションが利用できないと思われる場合は、Keycloakサーバーログをチェックし、Keycloakサーバーのセットアップで説明したようにリスナーがトリガーされていることを確認してください。keycloak-userメーリングリストに質問したい場合は、電子メール内の両方のデータセンターのKeycloakサーバーからログファイルを送信すると便利です。ログスニペットをメールに追加するか、ログをどこかに置いて電子メールで参照してください。Keycloakサーバーで更新したエンティティーが表示されない場合は、同期したデータベース自体のレプリケーションか、Keycloakキャッシュが適切に無効化されなかったかのどちらかに問題があります。問題がデータベースのレプリケーション・レベルにある場合は、ここで説明するように一時的にKeycloakキャッシュを無効化してください。データベースに手動で接続し、データが期待どおりに更新されるかどうかを確認するのに役立ちます。これはすべてのデータベースに固有のものなので、データベースのドキュメントを参照する必要があります。場合によっては、Infinispanサーバーログに次のようなロックに関する例外が表示されることがあります。GlobalTx:server1:4352これらの例外は必ずしも問題ではありません。両方のデータセンターで同じエンティティーの同時編集がトリガーされると、いつでも発生する可能性があります。これは、デプロイメントの多くの場合に当てはまります。Keycloakサーバーは、失敗した操作について通知を受けて再試行するため、ユーザーの観点からは通常問題はありません。Keycloakサーバーの起動時に次のような例外が発生した場合。...これらのログエントリーはKeycloakの結果で、Infinispanで認証が必要かどうかを自動的に検出し、認証が必要であることを意味します。この時点で、サーバーが正常に起動され、これらを無視しても問題ないか、またはサーバーの起動に失敗していることに気づきます。説明されているように認証のために正しく設定されていることを確認してください。設定して認証を強制できます。</spi>Keycloakでアプリケーションに認証しようとすると、ブラウザーの無限のリダイレクトで認証に失敗し、Keycloakサーバーログに次のようなエラーが表示されます。restart_after_timeout=trueおそらく、スティッキー・セッションをサポートするようにロードバランサーを設定する必要があることを意味します。ロードバランサー・サーバーが現在のサーバーを識別するために使用する正しい名前が含まれていることを確認してください。発生している可能性があります(キャッシュが正しく期限切れになっていないことに起因する問題)。タグで更新してください。situationsそれらを無視することができます。よって引き起こされるいくつかの他の問題が発生する可能性があるため、これはお勧めしません。したがって、今のところこの警告は無視する必要があります。Rodプロトコルが使用されていることを示しています。これは、Keycloakを古いバージョンのInfinispanサーバーで使用しようとした場合に発生する可能性があります。プロパティーを追加すると役に立ちます。次のように設定します。ファイルを編集して行います。このファイルの場所は動作モードによって異なります。サブシステムの設定について説明します。サブシステムの設定は同じです。keycloak-serverサブシステムは通常、以下のようにファイルの末尾で宣言されています。...</subsystem>このサブシステム内での変更はサーバーが再起動されるまで有効になりませんので、注意してください。各設定の詳細については、その設定と関連する別の箇所で説明します。SPIプロバイダー設定の宣言に使用される形式について学ぶことをお勧めします。Keycloakは、柔軟性に優れた、高度なモジュールシステムです。50以上のサービス・プロバイダー・インターフェイス(いわゆるSPI)があり、各SPIの実装を交換することができます。SPI宣言のすべての要素は任意で選択できるものですが、完全なSPI宣言は以下のようになります。いうSPIに2つのプロバイダーが定義されています。この設定をどのように処理するかはSPIが決定します。SPIによって複数のプロバイダーを許可するものもあれば、そうでないものもあります。SPIの選択の手助けになります。各プロバイダーが独自の設定プロパティーを定義することについても注意してください。いうプロパティーを持っている点は単なる偶然です。プロパティー値のタイプはそれぞれプロバイダーによって解釈されます。プロバイダーについて確認してみましょう。</provider></spi>この値は角括弧で始まり、角括弧で終わることが分かります。これは、値がリストとしてプロバイダーに渡されることを意味します。リストはシステムからプロバイダーに渡されます。リストに値を追加するには、各リスト要素をカンマで区切ります。エスケープする必要があります。手順に従ってください。ツールでコマンドを発行して行うこともできます。CLIを使用すると、サーバーをローカルでもリモートでも設定することができます。スクリプティングと組み合わせると特に便利です。実行する必要があります。...\bin\jboss-cli.batこれを実行すると、以下のようにプロンプトが表示されます。コマンドを実行します。実行中のスタンドアローン・サーバーまたはドメイン・コントローラーと同じマシンで実行し、アカウントに適切なファイル・アクセス権限がある場合は、管理者のユーザー名とパスワードを設定または入力する必要はありません。Documentationを参照してください。CLI組み込みモードサーバーがアクティブではない間にスタンドアローン・サーバーと同じマシン上にコマンドが発行された場合は、サーバーをCLIに組み込み、受信要求を許可しない特殊モードに変更することができます。コマンドを実行します。GUIモードの使用CLIはGUIモードでも実行できます。GUIモードでは、実行中のサーバーの管理モデル全体をグラフィカルに表示および編集できるSwingアプリケーションが起動します。GUIモードは、CLIコマンドの書式を設定したり、オプションを調べる際のヘルプとして特に便利です。GUIは、ローカルまたはリモートサーバーからサーバーログを取得することもできます。オプションも渡します。--helpオプションを参照してください。いうノードを見つけます。新しいタブには、keycloak-serverサブシステムのみが表示されます。keycloak-serverサブシステムCLIスクリプティングCLIには、さまざまなスクリプト機能があります。スクリプトはCLIコマンドを含む単なるテキストファイルです。テーマとテンプレートのキャッシュをオフにする簡単なスクリプトを見ていきましょう。メニューに従うか、または以下のようにコマンドラインからスクリプトを実行します。--file=turn-off-caching.cliCLIレシピここでは、設定タスクおよびそれらをCLIコマンドで実行する方法について説明します。その点は注意してください。スタンドアローンの場合、これは単に以下の意味になります。/subsystem=keycloak-serverドメインモードの場合、これは以下のような意味になります。型のプロバイダー・プロパティー値の設定**/spi=eventsStore/provider=jpa/:map-put(name=properties,key=exclude-events,value=[EVENT1,EVENT2])プロファイルKeycloakには、デフォルトでは有効とされていない機能があり、完全にはサポートされていないものがあります。デフォルトで有効とされている機能を無効にすることもできます。有効および無効にできる機能は、以下のとおりです。Authentication(WebAuthn)YesPreviewすべてのプレビュー機能を有効にするには、次のようにサーバーを起動します。)ファイルを作成することにより、これを永続的に設定することができます。以下をファイルに追加します。profile=preview特定の機能を有効にするには、以下のようにサーバーを起動します。ファイルに以下を追加することにより、永続的に設定することができます。feature.docker=enabled特定の機能を無効にするには、以下のようにサーバーを起動します。ファイルに以下を追加することにより、永続的に設定することができます。feature.impersonation=disabledリレーショナル・データベースの設定Keycloakには、H2というJavaベースのリレーショナル・データベースが組み込まれています。これは、Keycloakがデータを保存するために使用するデフォルトのデータベースで、単に認証サーバーをそのまま実行できるように組み込まれただけのものです。そのため、プロダクション用の外部データベースに置き換えることを強くお勧めします。H2データベースは並行性の高いシチュエーションではあまり実用的ではないので、クラスター内でも使用しないでください。この章では、Keycloakをより成熟度の高いデータベースに接続する方法を説明します。Keycloakでは、リレーショナル・データを保存するために2つの階層化技術が使用されます。最下層の技術はJDBCです。JDBCは、RDBMSへの接続に使用されるJavaAPIです。データベース・ベンダーによって提供されるデータベース・タイプ毎に、さまざまなJDBCドライバーがあります。この章では、これらのベンダー固有のドライバーのいずれかを使用するようにKeycloakを設定する方法について説明します。これは、Javaオブジェクトをリレーショナル・データにマップするORマッピングAPIの1つです。Keycloakのデプロイメントで、Hibernateの設定に触れる必要はほとんどありませんが、そのまれなケースに遭遇した場合どうなるかを説明します。chapterで詳しく説明しています。データベース設定のチェックリスト以下は、KeycloakにRDBMSを設定するために行う手順です。データベース用のJDBCドライバーの検索とダウンロードドライバーのJARをモジュールにパッケージ化し、このモジュールをサーバーにインストールサーバーの設定プロファイルでJDBCドライバーを宣言データベースのJDBCドライバーを使用するようにデータソース設定を変更データベースへの接続パラメーターを定義するようにデータソース設定を変更この章では、すべてのサンプルにおいてPostgreSQLを使用します。他のデータベースも同じ手順でインストールできます。JDBCドライバーのパッケージ化RDBMS用のJDBCドライバーのJARを検索してダウンロードします。このドライバーを使用する前に、モジュールにパッケージ化してサーバーにインストールする必要があります。モジュールによって、KeycloakのクラスパスにロードされるJAR、およびこれらのJARが他のモジュールに持つ依存関係が定義されます。ディレクトリー内に、モジュールの定義を格納するディレクトリー構造を作成してください。ディレクトリー構造の名前には、JDBCドライバーのJavaパッケージ名を使うのが一般的です。いうディレクトリーを作成します。ファイルを作成します。ファイルを開き、以下のようなXMLを作成します。</dependencies></module>モジュール名は、モジュールのディレクトリー構造と一致していなければなりません。属性は、ドライバーのJARファイル名を指定します。残りの部分は、JDBCドライバーのJARが持っている通常の依存関係です。JDBCドライバーの宣言とロードJDBCをデプロイメント・プロファイルに宣言し、サーバー起動時にロードして利用できるようにします。前提条件JDBCドライバーをパッケージ化しました。手順デプロイメント・モードに応じて、これらのファイルのいずれかを編集し、JDBCドライバーを宣言します。