6.5. HA シングルトンデプロイメント
アプリケーションをシングルトンデプロイメントとしてデプロイできます。クラスター化されたサーバーのグループにデプロイされる場合、シングルトンデプロイメントでは該当するタイミングで単一のノードにのみデプロイされます。デプロイメントがアクティブなノードが停止または失敗すると、デプロイメントは別のノードで自動的に開始されます。
以下の状況では、シングルトンデプロイメントを複数のノードにデプロイできます。
- 特定のノード上のクラスター化されたサーバーのグループは、設定の問題やネットワークの問題により接続を確立できません。
以下の設定ファイルなど、HA 以外の設定が使用されます。
-
Jakarta EE 8 Web Profile、または Jakarta EE 8 Web Profile をサポートする
standalone.xml設定または、Java EE 8 Full Platform プロファイルをサポートするstandalone-full.xml。 -
デフォルトのドメインプロファイルまたはフルドメインプロファイルのいずれかで設定される
domain.xml設定。
-
Jakarta EE 8 Web Profile、または Jakarta EE 8 Web Profile をサポートする
HA 以外の設定には、デフォルトで singleton サブシステムが有効になっていません。このデフォルト設定を使用する場合、アプリケーションのデプロイメントを正常にプロモートするために singleton-deployment.xml ファイルは無視されます。
ただし、HA 以外の設定を使用すると、jboss-all.xml 記述子ファイルのエラーが発生する可能性があります。これらのエラーを回避するには、singleton-deployment.xml 記述子に単一のデプロイメントを追加します。その後、任意のプロファイルタイプを使用してアプリケーションをデプロイできます。
HA シングルトンの動作を制御するポリシーは、新しい singleton サブシステムによって管理されます。デプロイメントは特定のシングルトンポリシーを指定するか、デフォルトのサブシステムポリシーを使用します。
デプロイメントは、デプロイメントオーバーレイとして既存のデプロイメントに適用される META-INF/singleton-deployment.xml デプロイメント記述子を使用して、シングルトンデプロイメントとして識別されます。また、必要なシングルトン設定を既存の jboss-all.xml ファイル内に組み込むこともできます。
シングルトンデプロイメントの定義または選択
デプロイメントをシングルトンデプロイメントとして定義するには、アプリケーションアーカイブに META-INF/singleton-deployment.xml 記述子を含めます。
Maven WAR プラグインがすでに存在する場合、プラグインを META-INF ディレクトリー (**/src/main/webapp/META-INF) に移行できます。
手順
アプリケーションが EAR ファイルにデプロイされている場合は、
jboss-all.xmlファイル内にあるsingleton-deployment.xml記述子またはsingleton- deployment要素をMETA-INFディレクトリーの最上位に移動します。例: シングルトンデプロイメント記述子
<?xml version="1.0" encoding="UTF-8"?> <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/>
アプリケーションデプロイメントを WAR ファイルまたは JAR ファイルとして追加するには、
singleton-deployment.xml記述子をアプリケーションアーカイブの/META-INFディレクトリーの最上位に移動します。例: 特定のシングルトンポリシーを使用したシングルトンデプロイメント記述子
<?xml version="1.0" encoding="UTF-8"?> <singleton-deployment policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>
オプション:
jboss-all.xmlファイルでsingleton-deploymentを定義するには、jboss-all.xml記述子をアプリケーションアーカイブの/META-INFディレクトリーの最上位に移動します。例:
jboss-all.xmlでのsingleton-deploymentの定義<?xml version="1.0" encoding="UTF-8"?> <jboss xmlns="urn:jboss:1.0"> <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/> </jboss>オプション: singleton ポリシーを使用して
jboss-all.xmlファイルでsingleton-deploymentを定義します。jboss-all.xml記述子をアプリケーションアーカイブの/META-INFディレクトリーの最上位に移動します。例: 特定のシングルトンポリシーを使用した
jboss-all.xmlでのsingleton-deploymentの定義<?xml version="1.0" encoding="UTF-8"?> <jboss xmlns="urn:jboss:1.0"> <singleton-deployment policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/> </jboss>
シングルトンデプロイメントの作成
JBoss EAP は、以下の 2 つの選択ポリシーを提供します。
単純な選択ポリシー
simple-election-policyはposition属性で示された特定のメンバーを選択します (該当するアプリケーションがデプロイされます)。position属性は、降順の経過時間でソートされた候補のリストから選択するノードのインデックスを決定します (0は最も古いノード、1は 2 番目に古いノード、-1は最も新しいノード、-2は 2 番目に新しいノードを示します)。指定された位置が候補の数を超えると、モジュロ演算が適用されます。例: 管理 CLI を使用して
simple-election-policyで新しいシングルトンポリシーを作成し、位置を-1に設定batch /subsystem=singleton/singleton-policy=my-new-policy:add(cache-container=server) /subsystem=singleton/singleton-policy=my-new-policy/election- policy=simple:add(position=-1) run-batch
注記新しく作成されたポリシー
my-new-policyをデフォルトとして設定するには、以下のコマンドを実行します。/subsystem=singleton:write-attribute(name=default, value=my-new-policy)
例:
standalone-ha.xmlで位置を-1としてsimple-election-policyを設定<subsystem xmlns="urn:jboss:domain:singleton:1.0"> <singleton-policies default="my-new-policy"> <singleton-policy name="my-new-policy" cache-container="server"> <simple-election-policy position="-1"/> </singleton-policy> </singleton-policies> </subsystem>ランダムな選択ポリシー
random-election-policyは、該当するアプリケーションがデプロイされるランダムなメンバーを選択します。例: 管理 CLI を使用して
random-election-policyで新しいシングルトンポリシーを作成batch /subsystem=singleton/singleton-policy=my-other-new-policy:add(cache-container=server) /subsystem=singleton/singleton-policy=my-other-new-policy/election-policy=random:add() run-batch
例:
standalone-ha.xmlを使用したrandom-election-policyの設定<subsystem xmlns="urn:jboss:domain:singleton:1.0"> <singleton-policies default="my-other-new-policy"> <singleton-policy name="my-other-new-policy" cache-container="server"> <random-election-policy/> </singleton-policy> </singleton-policies> </subsystem>注記ポリシーを追加する前に、
cache-containerのdefault-cache属性を定義する必要があります。定義しないと、カスタムキャッシュコンテナーを使用する場合に、エラーメッセージが表示されることがあります。
設定
また、シングルトン選択ポリシーを使用して、クラスターの 1 つ以上のメンバーの優先順位を指定することもできます。優先順位は、ノード名またはアウトバウンドソケットバインド名を使用して定義できます。ノードの優先順位は、常に選択ポリシーの結果よりも優先されます。
例: 管理 CLI を使用した既存のシングルトンポリシーの優先順位の指定
/subsystem=singleton/singleton-policy=foo/election-policy=simple:list-add(name=name-preferences, value=nodeA) /subsystem=singleton/singleton-policy=bar/election-policy=random:list-add(name=socket-binding-preferences, value=binding1)
例: 管理 CLI を使用して simple-election-policy および name-preferences で新しいシングルトンポリシーを設定
batch /subsystem=singleton/singleton-policy=my-new-policy:add(cache-container=server) /subsystem=singleton/singleton-policy=my-new-policy/election-policy=simple:add(name-preferences=[node1, node2, node3, node4]) run-batch
新しく作成されたポリシー my-new-policy をデフォルトとして設定するには、以下のコマンドを実行します。
/subsystem=singleton:write-attribute(name=default, value=my-new-policy)
例: standalone-ha.xml を使用した socket-binding-preferences での random-election-policy の設定
<subsystem xmlns="urn:jboss:domain:singleton:1.0">
<singleton-policies default="my-other-new-policy">
<singleton-policy name="my-other-new-policy" cache-container="server">
<random-election-policy>
<socket-binding-preferences>binding1 binding2 binding3 binding4</socket-binding-preferences>
</random-election-policy>
</singleton-policy>
</singleton-policies>
</subsystem>
クォーラムの定義
ネットワークパーティションは、シングルトンデプロイメントに対して特に問題となります。これは、同時に実行する同じデプロイメントに対して複数のシングルトンプロバイダーをトリガーできるためです。このような状況を回避するために、シングルトンポリシーはシングルトンプロバイダーの選択が行われる前に、最小数のノードが存在することを必要とするクォーラムを定義できます。典型的なデプロイメントでは、N/2 + 1 をクォーラムとして使用します (ここで、N は予想されるクラスターサイズです)。この値は実行時に更新でき、対応するシングルトンポリシーを使用するすべてのシングルトンサービスに即時反映されます。
例: standalone-ha.xml ファイルでのクォーラム宣言
<subsystem xmlns="urn:jboss:domain:singleton:1.0">
<singleton-policies default="default">
<singleton-policy name="default" cache-container="server" quorum="4">
<simple-election-policy/>
</singleton-policy>
</singleton-policies>
</subsystem>
例: 管理 CLI を使用したクォーラム宣言
/subsystem=singleton/singleton-policy=foo:write-attribute(name=quorum, value=3)
シングルトンデプロイメントを使用したクラスター全体のシングルトンとしてアプリケーションにパッケージ化されたサービスの完全な作業例は、JBoss EAP に同梱される ha-singleton-deployment クイックスタートを参照してください。
CLI を使用したプライマリーシングルトンサービスプロバイダーの決定
singleton サブシステムは、特定のシングルトンポリシーから作成された各シングルトンデプロイメントまたはサービスのランタイムリソースを公開します。これは、CLI を使用したプライマリーシングルトンプロバイダーの判断に役立ちます。
現在シングルトンプロバイダーとして動作するクラスターメンバーの名前を表示できます。例を以下に示します。
/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=primary-provider)
{
"outcome" => "success",
"result" => "node1"
}また、シングルトンデプロイメントまたはサービスがインストールされているノードの名前を表示することもできます。例を以下に示します。
/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=providers)
{
"outcome" => "success",
"result" => [
"node1",
"node2"
]
}