第 6 章 WEB アプリケーションのクラスター化
6.5. HA シングルトンデプロイメント
4. ServiceActivator クラスの名前 (例:
org.jboss.as.quickstarts.ha.singleton.service.SingletonServiceActivator) が含まれ る、org.jboss.msc.service.ServiceActivator という名前のファイルを META-INF/services/
ディレクトリーに作成します。
完全な作業例は、JBoss EAP に同梱される ha-singleton-service クイックスタートを参照してくださ い。このクイックスタートには、バックアップサービスでインストールされるシングルトンサービスを 実証する 2 つ目の例も含まれています。バックアップサービスは、シングルトンサービスの実行用に選 択されていないすべてのノード上で実行されます。また、このクイックスタートは異なる選択ポリシー の設定方法についても実証します。
Maven WAR プラグインがすでに存在する場合、プラグインを META-INF ディレクトリー (**/src/main/webapp/META-INF) に移行できます。
手順 手順
アプリケーションが EAR ファイルにデプロイされている場合は、jboss-all.xml ファイル内に ある singleton-deployment.xml 記述子または singleton- deployment 要素を META-INF ディ レクトリーの最上位に移動します。
例
例
:シングルトンデプロイメント記述子 シングルトンデプロイメント記述子
アプリケーションデプロイメントを WAR ファイルまたは JAR ファイルとして追加するに は、singleton-deployment.xml 記述子をアプリケーションアーカイブの /META-INF ディレク トリーの最上位に移動します。
例
例
:特定のシングルトンポリシーを使用したシングルトンデプロイメント記述子 特定のシングルトンポリシーを使用したシングルトンデプロイメント記述子
オプション: jboss-all.xml ファイルで singleton-deployment を定義するには、jboss-all.xml 記述子をアプリケーションアーカイブの /META-INF ディレクトリーの最上位に移動します。
例
例
: jboss-all.xmlでの での
singleton-deploymentの定義 の定義
オプション: singleton ポリシーを使用して jboss-all.xml ファイルで singleton-deployment を 定義します。jboss-all.xml 記述子をアプリケーションアーカイブの /META-INF ディレクト リーの最上位に移動します。
例
例
:特定のシングルトンポリシーを使用した 特定のシングルトンポリシーを使用した
jboss-all.xmlでの での
singleton-deploymentの の 定義
定義
シングルトンデプロイメントの作成 シングルトンデプロイメントの作成
JBoss EAP は、以下の 2 つの選択ポリシーを提供します。
単純な選択ポリシー
simple-election-policy は position 属性で示された特定のメンバーを選択します (該当するア プリケーションがデプロイされます)。position 属性は、降順の経過時間でソートされた候補の リストから選択するノードのインデックスを決定します (0 は最も古いノード、1 は 2 番目に古
<?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 policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>
<?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 policy="my-new-policy" xmlns="urn:jboss:singleton-deployment:1.0"/>
</jboss>
いノード、-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を設定 を設定
ランダムな選択ポリシー
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-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-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ファイルでのクォーラム宣言 ファイルでのクォーラム宣言
例
例
:管理 管理
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"
] }