3.3. ドメインクラスターモード
ドメインモードは、サーバーの設定を一元管理して公開する方法です。
クラスターを標準モードで実行すると、クラスターのサイズが大きくなるにつれてすぐに深刻化する可能性があります。設定変更が必要になるたびに、クラスター内の各ノードで実行できるようになります。ドメインモードは、設定を保存して公開する中心的な場所を提供することで、この問題を解決します。設定は非常に複雑となる場合がありますが、それだけの価値があると言えます。この機能は、Red Hat Single Sign-On の派生元である JBoss EAP Application Server に組み込まれています。
このガイドでは、ドメインモードの基本について説明します。クラスターでドメインモードを設定する方法は、JBoss EAP の 設定ガイド を参照してください。
ドメインモードで実行するための基本的な概念のいくつかを以下に示します。
- ドメインコントローラー
- ドメインコントローラーは、クラスター内の各ノードの一般的な設定を保存、管理、および公開するプロセスです。このプロセスは、クラスター内のノードが設定を取得するための中心となるポイントです。
- ホストコントローラー
- ホストコントローラーは、特定のマシン上のサーバーインスタンスを管理します。1 つ以上のサーバーインスタンスを実行するように設定します。ドメインコントローラーは、各マシンのホストコントローラーと対話してクラスターを管理することもできます。実行中のプロセスの数を減らすために、ドメインコントローラーは、実行されているマシンのホストコントローラーとしても機能します。
- ドメインプロファイル
- ドメインプロファイルは、サーバーが起動に使用できる名前付きの設定セットです。ドメインコントローラーは、異なるサーバーによって使用される複数のドメインプロファイルを定義できます。
- サーバーグループ
- サーバーグループとはサーバーの集合のことです。これらは 1 つとして管理および設定されます。ドメインプロファイルをサーバーグループに割り当てることができ、そのグループ内のすべてのサービスは、そのドメインプロファイルを設定として使用します。
ドメインモードでは、ドメインコントローラーがマスターノードで起動します。クラスターの設定は、ドメインコントローラーにあります。次に、クラスター内の各マシンでホストコントローラーが起動されます。各ホストコントローラーのデプロイメント設定は、そのマシンで開始する Red Hat Single Sign-On サーバーインスタンスの数を指定します。ホストコントローラーが起動すると、設定された数の Red Hat Single Sign-On サーバーインスタンスが起動します。これらのサーバーインスタンスは、ドメインコントローラーから設定をプルします。
3.3.1. ドメイン設定
本ガイドのさまざまな章では、データベース、HTTP ネットワーク接続、キャッシュ、およびその他のインフラストラクチャー関連のものなど、さまざまな側面の設定について説明します。スタンドアロンモードは standalone.xml ファイルを使用してこれらを設定しますが、ドメインモードは …/domain/configuration/domain.xml 設定ファイルを使用します。ここで、Red Hat Single Sign-On サーバーのドメインプロファイルとサーバーグループが定義されます。
domain.xml
ドメインコントローラーの実行中にこのファイルに加える変更は適用されず、サーバーによって上書きされる場合もあります。代わりに、JBoss EAP のコマンドラインスクリプトまたは Web コンソールを使用します。詳細は、JBoss EAP 設定ガイド を参照してください。
この domain.xml ファイルのいくつかの側面を見てみましょう。auth-server-standalone
および auth-server-clustered
profile
XML ブロックは、設定の決定を一括して行う場所です。ここでは、ネットワーク接続、キャッシュ、データベース接続などを設定します。
auth-server プロファイル
<profiles> <profile name="auth-server-standalone"> ... </profile> <profile name="auth-server-clustered"> ... </profile>
auth-server-standalone
プロファイルは、クラスター化されていないセットアップです。auth-server-clustered
プロファイルはクラスター化されたセットアップです。
スクロールダウンすると、さまざまな socket-binding-groups
が定義されていることが確認できます。
socket-binding-groups
<socket-binding-groups> <socket-binding-group name="standard-sockets" default-interface="public"> ... </socket-binding-group> <socket-binding-group name="ha-sockets" default-interface="public"> ... </socket-binding-group> <!-- load-balancer-sockets should be removed in production systems and replaced with a better softare or hardare based one --> <socket-binding-group name="load-balancer-sockets" default-interface="public"> ... </socket-binding-group> </socket-binding-groups>
この設定は、各 Red Hat Single Sign-On サーバーインスタンスで開かれるさまざまなコネクターのデフォルトのポートマッピングを定義します。${…}
が含まれる値は、コマンドラインで -D
スイッチで上書きできる値です。つまり、
$ domain.sh -Djboss.http.port=80
Red Hat Single Sign-On のサーバーグループの定義は、server-groups
XML ブロックにあります。これは使用されるドメインプロファイル (default
) と、ホストコントローラーがインスタンスの起動時に Java 仮想マシンのデフォルトブート引数の一部を指定します。また、socket-binding-group
をサーバーグループにバインドします。
サーバーグループ
<server-groups> <!-- load-balancer-group should be removed in production systems and replaced with a better softare or hardare based one --> <server-group name="load-balancer-group" profile="load-balancer"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="load-balancer-sockets"/> </server-group> <server-group name="auth-server-group" profile="auth-server-clustered"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups>
3.3.2. ホストコントローラーの設定
Red Hat Single Sign-On には、…/domain/configuration/ ディレクトリーにある 2 つのホストコントローラー設定ファイル (host-master.xml および host-slave.xml) が同梱されています。host-master.xml は、ドメインコントローラー、ロードバランサー、および 1 つの Red Hat Single Sign-On サーバーインスタンスを起動するように設定されています。host-slave.xml は、ドメインコントローラーと通信し、1 つの Red Hat Single Sign-On サーバーインスタンスを起動するように設定されています。
ロードバランサーは必須サービスではありません。これは、開発マシンでクラスターリングを簡単にテストできるようにするために存在します。実稼働環境で使用できますが、使用するハードウェアまたはソフトウェアベースのロードバランサーが異なる場合は、これを置き換えるオプションがあります。
ホストコントローラーの設定
ロードバランサーサーバーインスタンスを無効にするには、host-master.xml を編集し、"load-balancer"
エントリーをコメントアウトまたは削除します。
<servers> <!-- remove or comment out next line --> <server name="load-balancer" group="loadbalancer-group"/> ... </servers>
このファイルについて注意すべきもう 1 つの興味深い点は、認証サーバーインスタンスの宣言です。これには、port-offset
が設定されています。domain.xml socket-binding-group
またはサーバーグループで定義されたネットワークポートには、port-offset
の値が追加されます。この例のドメイン設定では、ロードバランサーサーバーが開かれているポートが起動した認証サーバーインスタンスと競合しないように、これを行います。
<servers> ... <server name="server-one" group="auth-server-group" auto-start="true"> <socket-bindings port-offset="150"/> </server> </servers>
3.3.3. サーバーインスタンスの作業ディレクトリー
ホストファイルで定義された各 Red Hat Single Sign-On サーバーインスタンスは、…/domain/servers/{SERVER NAME} の下に作業ディレクトリーを作成します。追加の設定をそこに置くことができ、サーバーインスタンスが必要とする、または作成する一時ファイル、ログファイル、またはデータファイルもそこに配置されます。これらのサーバーディレクトリーごとの構造は、他の JBoss EAP の起動サーバーと同じようになります。
作業ディレクトリー
3.3.4. ドメインブートスクリプト
ドメインモードでサーバーを実行する場合は、オペレーティングシステムに応じて、サーバーを起動するために特定のスクリプトを実行する必要があります。このスクリプトは、サーバーディストリビューションの bin/ ディレクトリーにあります。
ドメインブートスクリプト
サーバーを起動するには、次のコマンドを実行します。
Linux/Unix
$ .../bin/domain.sh --host-config=host-master.xml
Windows
> ...\bin\domain.bat --host-config=host-slave.xml
ブートスクリプトを実行する場合は、--host-config
スイッチを介して使用するホスト制御設定ファイルを渡す必要があります。
3.3.5. クラスター化されたドメインの例
初期状態の domain.xml 設定を使用して、ドライブのクラスターリングをテストできます。このドメインの例は、1 台のマシンで実行され、以下を起動することを目的としています。
- ドメインコントローラー
- HTTP ロードバランサー
- 2 つの Red Hat Single Sign-On サーバーインスタンス
2 台のマシンでクラスターの実行をシミュレーションするには、domain.sh
スクリプトを 2 回実行して、2 つの別々のホストコントローラーを起動します。1 つ目は、ドメインコントローラー、HTTP ロードバランサー、および 1 つの Red Hat Single Sign-On 認証サーバーインスタンスを起動するマスターホストコントローラーです。2 つ目は、認証サーバーインスタンスのみを起動するスレーブホストコントローラーになります。
3.3.5.1. ドメインコントローラーへのスレーブ接続の設定
ただし、起動する前に、スレーブホストコントローラーを設定して、ドメインコントローラーとセキュアに通信できるようにします。これを行わないと、スレーブホストはドメインコントローラーから集中設定を取得できなくなります。セキュアな接続を設定するには、サーバー管理ユーザーと、マスターとスレーブの間で共有されるシークレットを作成する必要があります。これを行うには、…/bin/add-user.sh
スクリプトを実行します。
スクリプトを実行する際に、Management User
を選択し、ある AS プロセスで別の接続に新規ユーザーが使用されるかどうかを尋ねられたら yes
と回答します。これにより、…/domain/configuration/host-slave.xml ファイルにカットアンドペーストする必要があるシークレットが生成されます。
アプリケーションサーバー管理者の追加
$ add-user.sh What type of user do you wish to add? a) Management User (mgmt-users.properties) b) Application User (application-users.properties) (a): a Enter the details of the new user to add. Using realm 'ManagementRealm' as discovered from the existing property files. Username : admin Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file. - The password should not be one of the following restricted values {root, admin, administrator} - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s) - The password should be different from the username Password : Re-enter Password : What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]: About to add user 'admin' for realm 'ManagementRealm' Is this correct yes/no? yes Added user 'admin' to file '/.../standalone/configuration/mgmt-users.properties' Added user 'admin' to file '/.../domain/configuration/mgmt-users.properties' Added user 'admin' with groups to file '/.../standalone/configuration/mgmt-groups.properties' Added user 'admin' with groups to file '/.../domain/configuration/mgmt-groups.properties' Is this new user going to be used for one AS process to connect to another AS process? e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls. yes/no? yes To represent the user add the following to the server-identities definition <secret value="bWdtdDEyMyE=" />
add-user.sh は、ユーザーを Red Hat Single Sign-On サーバーには追加せず、基礎となる JBoss Enterprise Application Platform に追加します。上記のスクリプトで使用および生成された認証情報は、単なる例になります。お使いのシステムで生成されたものを使用してください。
以下のように、秘密の値を …/domain/configuration/host-slave.xml ファイルにカットアンドペーストします。
<management> <security-realms> <security-realm name="ManagementRealm"> <server-identities> <secret value="bWdtdDEyMyE="/> </server-identities>
3.3.5.2. ブートスクリプトの実行
1 つの開発マシンで 2 つのノードクラスターをシミュレートしているため、起動スクリプトを 2 回実行します。
マスターの起動
$ domain.sh --host-config=host-master.xml
スレーブの起動
$ domain.sh --host-config=host-slave.xml
これを試すには、ブラウザーを開いて http://localhost:8080/authにアクセスします。