20.3. HAPartition サービス
HAPartition は、Enterprise Application Platform クラスタリングでのさまざまなタスクに使用される汎用的なサービスです。要するに、HAPartition は、1 つまたは複数のクラスタメンバに対する RPC 呼び出しの実行/受信をサポートする JGroups
Channel
の上部に構築された抽象層です。 HAPartition を使用するサービスは単一の Channel
や多重 RPC 呼び出しを共有できるため、設定を簡易化することができ、各サービスが独自の Channel
を作成するランタイムオーバーヘッドが発生しなくなります。 また、HAPartition はどのクラスタリングサービスがどのクラスタメンバで実行されているかを記録する分散レジストリもサポートし、クラスタメンバーシップやクラスター化されたサービスレジストリが変更されたときに該当するリスナに通知します。さらに、HAPartition は、スマートなクライアントサイドクラスタプロキシ、EJB 2 SFSB レプリケーションおよびエンティティキャッシュ管理、ファーミング、HA-JNDI、HA シングルトンなどの、本書でこれから説明する多くの重要なクラスタリングサービスを形成します。
次のスニペットは標準の JBoss Enterprise Application Platform ディストリビューションにパッケージされた
HAPartition
サービスの定義を表しています。 この設定は、 server/production/deploy/cluster/hapartition-jboss-beans.xml
ファイルにあります。
上記の多くは定型的な定義ですが、 次にエンドユーザーに適切な主なポイントについて説明します。 上記では、
HAPartitionCacheHandler
と HAPartition
の 2 つの Bean が定義されています。
HAPartition
Bean は次の設定プロパティを公開します。
- PartitionName はクラスター名を指定する任意の属性です。 デフォルト値は
DefaultPartition
です。-g
(または --partition) コマンドラインスイッチを使用して、 サーバー起動時にこの値を設定します。注記
MCBean:ServerConfig プロファイルサービスコンポーネントにあるpartitionName を使う場合、システムは当プロパティに対して null 値を返します。MCBean:HAPartition 管理のコンポーネントからのPartionName を使い正しい値を取得します。 - nodeAddress は未使用のため、 無視しても問題ありません。
- stateTransferTimeout は初期のアプリケーションステート転送のタイムアウト値 (ミリ秒単位) を指定します。 ステート転送は、 サービスの起動時にすでに実行されているクラスタメンバから初期のアプリケーションステートのシリアライズされたコピーを取得するプロセスを意味します。 デフォルト値は
30000
です。 - methodCallTimeout は、 別のクラスターメンバーからグループ RPC への応答を取得する時のタイムアウト値( ミリ秒単位) を指定します。 デフォルト値は
60000
です。
HAPartitionCacheHandler
は HAPartition とJBoss Cache の統合を手助けする小さなユーティリティサービスです (「JBoss Enterprise Application Platform の CacheManager サービス」 を参照)。 HAPartition はJBoss Cache を使用する DistributedState と呼ばれる子サービスを公開します (「DistributedState サービス」参照)。 HAPartitionCacheHandler
は、 DistributedState のキャッシュが使用する JGroups Channel
と HAPartition が直接使用する Channel
間の設定が一貫性を保つようにします。
- cacheConfigName は、 HAPartition 関連のキャッシュに使用する JBoss Cache 設定の名前になります。 HAPartition が使用するべきである JGroups プロトコルスタック設定の名前も間接的に指定します。 JGroups プロトコルスタックの設定方法は、 「JGroups の統合」 を参照してください。
ノードがクラスターを形成するには、 ノードの
PartitionName
が同じでなければなりません。 また、 HAPartitionCacheHandler
の cacheConfigName
が同じ JBoss Cache 設定を指定しなければなりません。 どちらかの要素を一部のノードで変更すると、クラスターが適切に動作しなくなります。
ご使用のブラウザーでクラスター内いずれかの JBoss インスタンスの JMX コンソール (
http://hostname:8080/jmx-console/
など) にアクセスしてから jboss:service=HAPartition,partition=DefaultPartition
MBean (-g 起動スイッチを使用する場合はご使用のパーティション名が反映されるよう MBean 名を変更) をクリックすると現在のクラスタ情報を表示することができます。 現在のクラスターメンバーの IP アドレス一覧は CurrentView フィールドに表示されます。
注記
1 つの JBoss サーバーインスタンスを複数の HAPartitions に同時に置くことは技術的には可能ですが、 管理が複雑になるため一般的には推奨されません。
20.3.1. DistributedReplicantManager サービス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
DistributedReplicantManager
(DRM) サービスは、 HAPartition.getDistributedReplicantManager()
メソッドにより HAPartition ユーザーが使用できる HAPartition サービスのコンポーネントの 1 つです。 通常、 JBoss Enterprise Application Platform のユーザーは直接 DRM を利用することはありません。 ここでは、 Enterprise Application Platform のクラスタリング内部がどのように動作するかを詳しく知りたいユーザー向けに説明します。
DRM は HAPartition ユーザーが特定のキーでオブジェクトを登録できるようにします。 これにより、 クラスターのメンバーによりそのキーで登録したオブジェクトのセットを呼び出し側が利用できるようにします。 DRM は通知のメカニズムも提供するため、 レジストリの内容が変更された時にリスナへ通知を行うこともできます。
JBoss Enterprise Application Platform の DRM には主に 2 つの使用法があります。
- クラスター化されたスマートプロキシクラスター化された EJB の名前など、クラスター化されたスマートプロキシを必要とするサービスの名前がキーとなります (「クライアント側インターセプターアーキテクチャー」 を参照)。 各ノードが DRM に保存する値オブジェクトは「ターゲット」と呼ばれます。 スマートプロキシのトランスポート層はこのターゲットを使用してノードへコンタクトします (RMI スタブ、 HTTP URL、 JBoss Remoting の
InvokerLocator
など)。 クラスター化されたスマートプロキシを構築するファクトリが DRM にアクセスして、プロキシに挿入するべきである「ターゲット」のセットを取得し、クラスター内のすべてのノードと通信できるようにします。 - HASingleton高可用シングルトンとして機能する必要があるサービスの名前がキーとなります (HASingleton の章を参照)。 各ノードが DRM に保存する値オブジェクトは、 トークンとして動作するストリングで、 ノードにサービスがデプロイされていることを示します。 そのため、 HA シングルトンサービスの「マスター」ノードの候補になります。
両方の場合で、 オブジェクトが登録されたキーが特定のクラスタ化サービスを識別します。 クラスタ内のすべてのノードがすべてのキーでオブジェクトを登録する必要はありません。 特定ノードにデプロイされたサービスのみがサービスのキーを用いて登録を行います。 サービスがクラスター全体で均一にデプロイされる必要はありません。 そのため、 サービスがデプロイされたノードの認識など、 DRM はクラスター関連のサービスの「トポロジ」を理解するメカニズムとして有用です。