Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性 (HA) 管理ガイド

第 9 章 Java Message Service 負荷分散とフェイルオーバー

この章では、Application Server で使用するために Java Message Service (JMS) の負荷分散とフェイルオーバーを設定する方法について説明します。次のトピックが含まれています。

Java Message Service の概要

Java Message Service (JMS) API は、J2EE アプリケーションおよびコンポーネントに対して、メッセージの作成、送信、受信、および読み取りを可能にするメッセージング標準です。この API によって、緩やかに結合され、信頼性が高く、非同期の分散通信が可能となります。Sun Java System Message Queue 3 2005Q1 (MQ) は JMS を実装し、Application Server と密接に統合されているため、MQ を使用してメッセージ駆動型 Bean (MDB) などのコンポーネントを作成できます。

MQ はコネクタモジュールを使用して Application Server と統合されます。コネクタモジュールはリソースアダプタとしても知られており、J2EE Connector Architecture Specification 1.5 によって定義されています。Application Server に配備された J2EE コンポーネントは、コネクタモジュールを介して統合された JMS プロバイダを使用して、JMS メッセージをやり取りします。Application Server で JMS リソースを作成すると、バックグラウンドでコネクタリソースが作成されます。そのようにして、JMS 操作のたびにコネクタランタイムが呼び出され、バックグラウンドで MQ リソースアダプタが使用されます。

Java Message Service は、管理コンソールまたは asadmin コマンド行ユーティリティーから管理することができます。

アプリケーション例

mqfailover アプリケーション例では、JMS トピックからの着信メッセージを受け取るメッセージ駆動型 Bean を使用する MQ フェイルオーバーの例を示します。この例には、MDB とアプリケーションクライアントが含まれています。Application Server は MDB の可用性を高めます。あるブローカが停止すると、対話状態 (MDB によって受信されたメッセージ) はクラスタ内の別の使用可能なブローカインスタンスに透過的に移行します。

例は次のディレクトリにインストールされます。

install_dir/samples/ee-samples/failover/apps/mqfailover

詳細情報

JMS の詳細については『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide』の第 14 章「Using the Java Message Service」を参照してください。コネクタ (リソースアダプタ) の詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide』の第 9 章「Developing Connectors」を参照してください。

Sun Java System Message Queue の詳細については、Sun Java System Message Queue のマニュアルを参照してください。JMS API の概要については、JMS Web ページを参照してください。

Java Message Service の設定

「Java Message Service」設定は、Sun Java System Application Server クラスタまたはインスタンスへのすべてのインバウンドおよびアウトバウンド接続に使用できます。次にあげるものを使用して、Java Message Service を設定できます。

JMS 接続ファクトリの設定を使用して、Java Message Service の設定をオーバーライドできます。詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』「JMS 接続ファクトリに関する管理コンソールタスク」を参照してください。


注 –

Java Message Service の設定を変更した後には、Application Server インスタンスを再起動する必要があります。


JMS 管理の詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』の第 4 章「Java Message Service (JMS) リソースの設定」を参照してください。

Java Message Service の統合

MQ を Application Server に統合するにはLOCAL と REMOTE の 2 通りの方法があり、管理コンソールには Java Message Service の「型」属性で表されます。

LOCAL Java Message Service

「型」属性が LOCAL (スタンドアロン Application Server インスタンスのデフォルト) の場合、Application Server はデフォルト JMS ホストとして指定された MQ ブローカを起動および停止します。LOCAL 型はスタンドアロンの Application Server インスタンスに最適です。

Application Server インスタンスと Message Queue ブローカの間に 1 対 1 の関係を作成するには、型を LOCAL に設定し、各 Application Server インスタンスに異なるデフォルト JMS ホストを指定します。 この作業は、クラスタが Application Server と MQ のどちらに定義されているかに関係なく行えます。

LOCAL 型では、「起動引数」属性を使用して MQ ブローカの起動パラメータを指定します。

REMOTE Java Message Service

「型」属性が REMOTE の場合、MQ ブローカは別個に起動する必要があります。クラスタが Application Server 内に定義されている場合は、これがデフォルトです。ブローカの起動については、『 Sun Java System Message Queue 管理ガイド』を参照してください。

この場合、Application Server は外部的に設定されたブローカまたはブローカクラスタを使用します。また、MQ ブローカの起動と停止は Application Server とは別個に行い、MQ ツールを使用してブローカまたはブローカクラスタを設定および調整する必要があります。REMOTE 型は Application Server クラスタに最適です。

REMOTE 型では、MQ ツールを使用して MQ ブローカ起動パラメータを指定する必要があります。「起動引数」属性は無視されます。

JMS ホストリスト

JMS ホストは MQ ブローカを表します。Java Message Service には JMS ホストリスト (AddressList とも呼ばれる) が含まれており、このリストには Application Server が使用するすべての JMS ホストが含まれます。

JMS ホストリストには指定された MQ ブローカのホストとポートが取り込まれ、JMS ホスト設定が変更になるたびに更新されます。JMS リソースを作成するかまたは MDB を配備すると、JMS リソースや MDB は JMS ホストリストを継承します。


注 –

Sun Java System Message Queue ソフトウェアでは、AddressList プロパティーは imqAddressList と呼ばれています。


デフォルト JMS ホスト

JMS ホストリスト内のホストの 1 つが、 Default_JMS_host という名前のデフォルト JMS ホストに指定されます。Application Server インスタンスは、Java Message Service の型が LOCAL に設定されている場合に、デフォルト JMS ホストを起動します。

Sun Java System Message Queue ソフトウェア内にマルチブローカクラスタを作成してある場合は、デフォルト JMS ホストを削除してから、その Message Queue クラスタのブローカを JMS ホストとして追加します。この場合、デフォルト JMS ホストが JMS ホストリスト内の最初のホストになります。

Application Server が Message Queue クラスタを使用する場合には、デフォルト JMS ホスト上で Message Queue 固有のコマンドが実行されます。たとえば、3 つのブローカを持つ Message Queue クラスタ用に物理送信先を作成する場合、物理送信先を作成するコマンドはデフォルトの JMS ホスト上で実行されますが、クラスタ内の 3 つのブローカすべてがその物理送信先を使用します。

JMS ホストの作成

追加の JMS ホストを、以下の方法で作成できます。

接続プールとフェイルオーバー

Application Server は JMS 接続プールとフェイルオーバーをサポートします。Sun Java System Application Server は JMS 接続を自動的にプールします。「アドレスリストの動作」属性が random (デフォルト) である場合、Application Server は主ブローカを JMS ホストリストからランダムに選択します。フェイルオーバーが発生すると、MQ は負荷を別のブローカに透過的に転送し、JMS セマンティクスを保持します。

接続が失われたときに Application Server が主ブローカへの再接続を試行するかどうかを指定するには、「再接続」チェックボックスを選択します。再接続を有効に設定した状態で、主ブローカが停止すると、Application Server は JMS ホストリストにある別のブローカへの再接続を試みます。

「再接続」を有効にする場合には、以下の属性も指定します。

これらの設定は、JMS 接続ファクトリ設定を使用してオーバーライドできます。詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 管理ガイド』「JMS 接続ファクトリに関する管理コンソールタスク」を参照してください。

負荷分散されたメッセージのインフロー

Application Server は同じ ClientID を持つ MDB にメッセージをランダムに配信します。ClientID は永続的なサブスクライバには必須です。

ClientID が設定されない非永続サブスクライバに対しては、同じトピックをサブスクライブする特定の MDB のすべてのインスタンスは同等であると見なされます。MDB が Application Server の複数のインスタンスに配備される場合、MDB のうちの 1 つだけがメッセージを受信します。複数の異なる MDB が同じトピックをサブスクライブすると、MDB ごとに 1 つのインスタンスがメッセージのコピーを受信します。

同じキューを使用する複数のコンシューマをサポートするには、物理送信先の maxNumActiveConsumers プロパティーを大きい値に設定します。このプロパティーを設定すると、MQ はプロパティーに設定した数の MDB まで同じキューからメッセージを消費することを許可します。メッセージはそれらの MDB にランダムに配信されます。maxNumActiveConsumers-1 に設定した場合は、コンシューマの数に制限はありません。

MQ クラスタと Application Server の併用

MQ Enterprise Edition は、ブローカクラスタと呼ばれる、相互に接続した複数のブローカインスタンスをサポートします。ブローカクラスタによって、クライアント接続はクラスタ内のすべてのブローカに分散されます。クラスタ化することで、水平方向のスケーラビリティーが提供され、可用性が向上します。

この節では、高可用性を備えた Sun Java System Message Queue クラスタを使用するために Application Server を設定する方法を説明します。また、Message Queue クラスタを開始および設定する方法も解説します。

Application Server および MQ 配備のトポロジの詳細については、『Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Deployment Planning Guide』「Planning Message Queue Broker Deployment」を参照してください。

ProcedureApplication Server クラスタで MQ クラスタを使用可能にするには

  1. Application Server クラスタを作成します (まだクラスタがない場合)。

    クラスタの作成については、「クラスタを作成するには」を参照してください。

  2. MQ ブローカクラスタを作成します。

    まず、ドメイン管理サーバーによって起動されるブローカを参照するデフォルト JMS ホストを削除してから、MQ ブローカクラスタに 3 つの外部ブローカ (JMS ホスト) を作成します。

    JMS ホストの作成は、管理コンソールまたは asadmin コマンド行ユーティリティーのいずれかを使用して行います。

    asadmin を使用する場合は、たとえば次のコマンドを実行します。


    asadmin delete-jms-host --target cluster1 default_JMS_host
    asadmin create-jms-host --target cluster1
         --mqhost myhost1 --mqport 6769
         --mquser admin --mqpassword admin broker1
    asadmin create-jms-host --target cluster1
         --mqhost myhost2 --mqport 6770
         --mquser admin --mqpassword admin broker2
    asadmin create-jms-host --target cluster1
         --mqhost myhost3 --mqport 6771
         --mquser admin --mqpassword admin broker3

    管理コンソールを使用してホストを作成するには、次のようにします。

    1. 「JMS ホスト」ノードに移動します (「設定」> config-name >「Java メッセージサービス」>「JMS ホスト」)。

    2. デフォルトのブローカ (default_JMS_host) を削除します。

      そのブローカの横にあるチェックボックスを選択して、「削除」をクリックします。

    3. 「新規」をクリックして、各 JMS ホストを作成し、それぞれにプロパティー値を入力します。

      ホスト名、DNS 名または IP アドレス、ポート番号、管理ユーザー名、パスワードの値を指定します。

  3. マスター MQ ブローカと他の MQ ブローカを起動します。

    JMS ホストマシン上で起動する 3 つの外部ブローカに加えて、任意のマシン上で 1 つのマスターブローカを起動します。このマスターブローカは、ブローカクラスタの一部である必要はありません。次に例を示します。


    /usr/bin/imqbrokerd -tty -name brokerm -port 6772
     -cluster myhost1:6769,myhost2:6770,myhost2:6772,myhost3:6771
     -D"imq.cluster.masterbroker=myhost2:6772"
  4. クラスタ内の Application Server インスタンスを起動します。

  5. クラスタ上に JMS リソースを作成します。

    1. JMS 物理送信先を作成します。

      たとえば、次の asadmin を使用します。


      asadmin create-jmsdest --desttype queue --target cluster1 MyQueue
      asadmin create-jmsdest --desttype queue --target cluster1 MyQueue1

      管理コンソールを使用する場合は、次のようにします。

      1. 「JMS ホスト」ページに移動します (「設定」> config-name >「Java メッセージサービス」>「物理送信先」)。

      2. 「新規」をクリックして、各 JMS 物理送信先を作成します。

      3. 各送信先に対して名前と型 (キュー) を入力します。

    2. JMS 接続ファクトリを作成します。

      たとえば、次の asadmin を使用します。


      asadmin create-jms-resource --target cluster1
      --restype javax.jms.QueueConnectionFactory jms/MyQcf
      asadmin create-jms-resource --target cluster1
      --restype javax.jms.QueueConnectionFactory jms/MyQcf1

      管理コンソールを使用する場合は、次のようにします。

      1. 「JMS 接続ファクトリ」ページに移動します (「リソース」>「JMS リソース」> 「接続ファクトリ」)。

      2. それぞれの接続ファクトリを作成するために、「新規」をクリックします。

        「JMS 接続ファクトリを作成」ページが開きます。

      3. 各接続ファクトリについて、「JNDI 名」(jms/MyQcf など) を入力し、「型」に javax.jms.QueueConnectionFactory を指定します。

      4. ページ最下部にリストされた利用可能なターゲットからクラスタを選択して、「追加」をクリックします。

      5. 「了解」をクリックして、接続ファクトリを作成します。

    3. JMS 送信先リソースを作成します。

      たとえば、次の asadmin を使用します。


      asadmin create-jms-resource --target cluster1
           --restype javax.jms.Queue
           --property imqDestinationName=MyQueue jms/MyQueue
      asadmin create-jms-resource --target cluster1
           --restype javax.jms.Queue
           --property imqDestinationName=MyQueue1 jms/MyQueue1

      管理コンソールを使用する場合は、次のようにします。

      1. 「JMS 送信先リソース」ページに移動します (「リソース」>「JMS リソース」> 「接続ファクトリ」)。

      2. それぞれの送信先リソースを作成するために、「新規」をクリックします。

        「JMS 送信先リソースを作成」ページが開きます。

      3. 各送信先リソースについて、「JNDI 名」(jms/MyQueue など) を入力し、「型」に javax.jms.Queue を指定します。

      4. ページ最下部にリストされた利用可能なターゲットからクラスタを選択して、「追加」をクリックします。

      5. 「了解」をクリックして、送信先リソースを作成します。

  6. – retrieve オプションを指定して、アプリケーションをアプリケーションクライアント用に配備します。次に例を示します。


    asadmin deploy --target cluster1 
    --retrieve /opt/work/MQapp/mdb-simple3.ear
  7. アプリケーションにアクセスして、期待どおりの動作をするかテストします。

  8. Application Server をデフォルトの JMS 設定に戻す場合は、作成した JMS ホストを削除して、デフォルトを作成し直します。次に例を示します。


    asadmin delete-jms-host --target cluster1 broker1
    asadmin delete-jms-host --target cluster1 broker2
    asadmin delete-jms-host --target cluster1 broker3
    asadmin create-jms-host --target cluster1
     --mqhost myhost1 --mqport 7676
     --mquser admin --mqpassword admin
     default_JMS_host

    管理コンソールを使用して、これに相当する操作を実行することもできます。

注意事項

問題が起きた場合は、次の点を考慮してください。