6.5. HA シングルトンデプロイメント
アプリケーションをシングルトンデプロイメントとしてデプロイできます。クラスター化されたサーバーのグループにデプロイされる場合、シングルトンデプロイメントでは該当するタイミングで単一のノードにのみデプロイされます。デプロイメントがアクティブなノードが停止または失敗すると、デプロイメントは別のノードで自動的に開始されます。
以下の状況では、シングルトンデプロイメントを複数のノードにデプロイできます。
- 特定のノード上のクラスター化されたサーバーのグループは、設定の問題やネットワークの問題により接続を確立できません。
以下の設定ファイルなど、HA 以外の設定が使用されます。
-
Java EE 8 Web Profile、または Java EE 8 Web Profile をサポートする
standalone.xml
設定または、Java EE 8 Full Platform プロファイルをサポートするstandalone-full.xml
。 -
デフォルトのドメインプロファイルまたはフルドメインプロファイルのいずれかで設定される
domain.xml
設定。
-
Java EE 8 Web Profile、または Java 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"/>
<?xml version="1.0" encoding="UTF-8"?> <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/>
Copy to Clipboard Copied! アプリケーションデプロイメントを 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"/>
<?xml version="1.0" encoding="UTF-8"?> <singleton-deployment policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>
Copy to Clipboard Copied! オプション:
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>
<?xml version="1.0" encoding="UTF-8"?> <jboss xmlns="urn:jboss:1.0"> <singleton-deployment xmlns="urn:jboss:singleton-deployment:1.0"/> </jboss>
Copy to Clipboard Copied! オプション: 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>
<?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>
Copy to Clipboard Copied!
シングルトンデプロイメントの作成
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
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
Copy to Clipboard Copied! 注記新しく作成されたポリシー
my-new-policy
をデフォルトとして設定するには、以下のコマンドを実行します。/subsystem=singleton:write-attribute(name=default, value=my-new-policy)
/subsystem=singleton:write-attribute(name=default, value=my-new-policy)
Copy to Clipboard Copied! 例:
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>
<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>
Copy to Clipboard Copied! ランダムな選択ポリシー
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
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
Copy to Clipboard Copied! 例:
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>
<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>
Copy to Clipboard Copied! 注記ポリシーを追加する前に、
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)
/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
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)
/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>
<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>
<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)
/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=primary-provider)
{
"outcome" => "success",
"result" => "node1"
}
また、シングルトンデプロイメントまたはサービスがインストールされているノードの名前を表示することもできます。例を以下に示します。
/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=providers) { "outcome" => "success", "result" => [ "node1", "node2" ] }
/subsystem=singleton/singleton-policy=default/deployment=singleton.jar:read-attribute(name=providers)
{
"outcome" => "success",
"result" => [
"node1",
"node2"
]
}