Sun Java ロゴ     前へ      目次      索引      次へ     

Sun ロゴ
Sun Java System Message Queue 3 2005Q4 技術の概要 

第 4 章
ブローカクラスタ

Message Queue Enterprise Edition は、連携動作してクライアントへのメッセージ配信サービスを提供する、ブローカクラスタをサポートしています。クラスタにより、管理者は、複数のブローカ間でクライアントコネクションを分散させ、メッセージトラフィックの量に応じてメッセージングの動作を拡張または縮小することができます。

この章では、ブローカクラスタのアーキテクチャーと内部の仕組みについて説明します。次のトピックが含まれます。

ブローカクラスタを使用すると、サービスの可用性は向上しますが、データの可用性は向上しません。クラスタ内の 1 つのブローカに障害が発生した場合、そのブローカに接続している複数のクライアントはクラスタ内の別のブローカに再接続できますが、代わりのブローカに再接続する間に一部のデータが失われることがあります。


クラスタのアーキテクチャー

図 4-1 に、ブローカクラスタの Message Queue のアーキテクチャーを示します。1 つのクラスタ内のブローカそれぞれは、他のすべてのブローカと直接接続されています。各クライアント (メッセージプロデューサまたはコンシューマ) には 1 つのホームブローカがあります。クライアントは、ホームブローカに直接通信し、そのブローカがクラスタ内の唯一のブローカであるかのようにメッセージを送受信します。背後では、そのホームブローカが他のブローカと協調動作し、接続されたすべてのクライアントに配信サービスを提供します。

クラスタ内では、サービスの可用性は送信先と永続サブスクライバに関する情報を共有できるブローカによって異なります。クラスタ化されたブローカに障害が発生した場合、この状態情報が同期されなくなる可能性があります。この危険性に対処するために、クラスタ内の 1 つのブローカをマスターブローカとして指定することができます。マスターブローカは、設定変更レコードを保持し、クラスタの持続エンティティー (送信先と永続サブスクリプション) への変更点を追跡します。このレコードを使用して、変更が加えられたときにオフラインだったブローカに変更情報を伝えます。

図 4-1 クラスタのアーキテクチャー

図は、クラスタ化された 3 つのブローカを示す。そのうち 1 つはマスターブローカを示す。図は文字で説明される。

以降の節では、クラスタ内でメッセージ配信が実行される仕組み、および 1 つまたは複数のブローカがオフラインになっていてもブローカを設定および同期する方法について説明します。


メッセージ配信

クラスタ構成では、ブローカが送信先とメッセージコンシューマに関する情報を共有します。各ブローカは次の情報を認識しています。

これにより、各ブローカは、直接接続されたメッセージプロデューサからのメッセージをリモートのメッセージコンシューマにルーティングすることができるようになります。プロデューサのホームブローカの役割は、コンシューマのホームブローカとは異なります。

クラスタ化されたブローカは、連係動作して、クラスタ内のメッセージトラフィックを最小限に抑えます。たとえば、リモートのブローカに同じトピック送信先への同一のサブスクリプションが 2 つある場合、メッセージは 1 回だけ送信されます。ローカルコンシューマへの配信がリモートコンシューマへの配信よりも優先されるように指定する送信先のプロパティーを設定することによってトラフィックをさらに減らすことができます。

クライアントとブローカの間で、暗号化によるセキュリティー保護されたメッセージ配信が必要な場合は、クラスタを設定して、ブローカ間でセキュリティー保護されたメッセージ配信を行うこともできます。

送信先の属性

クラスタ化されたブローカ上にある物理的な送信先の属性のセットは、クラスタ内にあるその送信先のすべてのインスタンスに適用されます。ただしこれらの属性によって指定された制限には、クラスタ全体に適用されるものもあれば、個々の送信先インスタンスに適用されるものもあります。表 4-1 に物理的な送信先に設定可能な属性の一覧とそれらの範囲を示します。

表 4-1 クラスタ化されたブローカ上の物理的な送信先のプロパティー

プロパティー名

範囲

maxNumMsgs

ブローカごと。これにより、クラスタ全体にプロデューサを配信し、コンシュームされていないメッセージの総数に制限を設定することができます。

maxTotalMsgBytes

ブローカごと。これにより、クラスタ全体にプロデューサを配信し、コンシュームされていないメッセージ用に予約されているメモリーの総容量に制限を設定することができます。

lmitBehavior

グローバル。

maxBytesPerMsg

ブローカごと。

maxNumProducers

ブローカごと。

maxNumActiveConsumers

グローバル。

maxNumBackupConsumers

グローバル。

consumerFlowLimit

グローバル。

localDeliveryPreferred

グローバル。

isLocalOnly

グローバル。

useDMQ

ブローカごと。

クラスタ化と送信先

送信先が管理者作成、自動作成、一時のいずれかによって、クラスタ内で送信先が伝播される方法、およびコネクションまたはブローカに障害が発生した場合の送信先の処理方法が変わります。

図 4-2 に 4 つのクラスタ化されたブローカを示します。図は、ブローカ間の直接 (プライベート) 接続、およびクライアントとクライアントが接続されるブローカの間のコネクションを示しています。図に示したいくつかの可能な処理について、以下の節で説明します。

図 4-2 クラスタの例

クラスタ内の送信先の伝播を示す図。 詳細がテキストで説明される。

応答先モデルを使用したキューへのプロデュース

前の図は次のことを示しています。

  1. 管理者は、物理的な送信先 QW を作成します。キューは、作成時にクラスタ全体に複製されます。
  2. プロデューサ ProdQW がメッセージをキュー QW に送信し、応答先モデルを使用して、応答を一時キュー TempQ1W に送信します。一時キューは、アプリケーションが一時送信先を作成し、コンシューマを追加するときに作成および複製されます。
  3. ホームブローカ BrokerW は、QW に送信されたメッセージを保持し、このメッセージの選択条件を満たす最初のアクティブなコンシューマにメッセージをルーティングします。メッセージを受信する準備ができたコンシューマに応じて、メッセージは、コンシューマ C1QW (BrokerX 上) またはコンシューマ C2QW (BrokerY 上) に配信されます。メッセージを受信したコンシューマは、送信先 TempQ1W に応答を送信します。

自動作成の送信先へのプロデュース

前の図は次のことを示しています。

  1. プロデューサ ProdAutoQY がブローカ上に存在していない送信先 AutoQY にメッセージを送信します。
  2. ブローカは、メッセージを保持し、送信先 AutoQY を作成します。
  3. 自動作成の送信先は、クラスタ全体に自動的に複製されません。コンシューマがキュー AutoQY からのメッセージの受信を選択したときにのみ、コンシューマのホームブローカが送信先 AutoQY を作成して、コンシューマにメッセージを送信します。1 つのコンシューマが自動作成の送信先を作成した時点で、送信先がクラスタ全体に複製されます。

トピック送信先へのパブリッシュ

前の図は次のことを示しています。

  1. 管理者は、物理的なトピック送信先 TY を作成します。管理者作成の送信先 TY は、送信先が使用される前にブローカクラスタ全体に複製されます。
  2. パブリッシャー PubTY がメッセージを TY に送信します。
  3. ホームブローカ BrokerY は、TY にパブリッシュされたすべてのメッセージを保持し、それらのメッセージをこのメッセージの選択条件に一致するすべてのトピックサブスクライバにルーティングします。

コネクションまたはブローカに障害が発生した場合の送信先の処理

表 4-2 は、クラスタ内のさまざまな種類の送信先が複製および削除される方法を説明しています。

表 4-2 クラスタ内の送信先の処理 

送信先

伝播と削除

管理者作成

送信先は、作成時にクラスタ内に伝播され、各ブローカが送信先に関する情報を持続的に保存します。

送信先は、管理者が明示的に送信先を削除すると破棄されます。

マスターブローカがある場合は、クラスタ内のブローカが状態情報を同期できるように、作成と削除のレコードがマスターブローカ内に保存されます。

一時

送信先は、作成時にクラスタ全体に伝播されます。

一時送信先に関連付けられているコンシューマが再接続を許可されている場合、送信先はコンシューマのホームブローカ上に持続的に保存されます。再接続できない場合、送信先は保存されません。

コンシューマがコネクションを失った場合、送信先はすべてのブローカ上で削除されます。

コンシューマのホームブローカがクラッシュし、コンシューマが再接続を許可されている場合、このコンシューマに関連付けられている一時送信先が監視されます。コンシューミングクライアントが一定の時間内に再接続しない場合、クライアントに障害が発生したと見なされ、送信先が削除されます。

自動作成

プロデューサが作成され、送信先が存在しない場合、プロデューサのホームブローカ上に送信先が作成されます。

存在しない送信先用のコンシューマが作成された場合、コンシューマと送信先に関する情報がクラスタ全体に伝播されます。

自動作成の送信先は、管理者が明示的に削除することも、自動的に削除することもできます。

  • 一定の時間にわたりコンシューマまたはメッセージがない場合は、ブローカごとに削除される。
  • ブローカの再起動時、その送信先用のメッセージがない場合は、ブローカごとに削除される。


クラスタ設定

起動時にクラスタ内のブローカどうしでコネクションを確立するには、マスターブローカが存在する場合はそれも含め、それぞれのブローカに他のすべてのブローカのホスト名とポート番号を渡す必要があります。この情報は、クラスタ設定プロパティーのセットによって指定されます。このプロパティーセットは、クラスタ内のすべてのブローカで同じになっているべきです。それぞれのブローカの設定プロパティーは個別に指定できますが、この方法だと誤りが発生しやすく、クラスタ設定の一貫性が失われる可能性が高くなります。代わりに、設定プロパティーのすべてを、起動時に各ブローカが参照する中央の 1 つのクラスタ設定ファイルに記述する方法をお勧めします。これにより、すべてのブローカで確実に同じ設定情報を共有できます。

クラスタ設定プロパティーについての詳細は、『Message Queue 管理ガイド』を参照してください。


クラスタ設定ファイルは、クラスタを設定するために使用するのが本来の目的ですが、クラスタ内の他のすべてのブローカと共有する他のプロパティーを保管するためにも便利な場所です。



クラスタの同期化

クラスタの設定が変更されると、どんな場合でも変更に関する情報がクラスタ内のすべてのブローカに自動的に伝播されます。次のいずれかのイベントが発生した場合、クラスタの設定が変更されます。

こうした変更の情報は、変更が行われたときにオンラインになっている、クラスタ内のすべてのブローカに即座に伝播されます。ただし、クラッシュなどのためにオフラインになっているブローカは、変更が生じたときに変更の通知を受け取りません。オフラインブローカに対処するため、Message Queue はクラスタの設定変更記録を保持し、作成または破棄されたすべての持続エントリ (送信先および永続サブスクリプション) を記録します。オフラインからオンラインに戻ったブローカや、クラスタに新しく追加されたブローカは、この記録を参照して送信先および永続サブスクライバに関する情報を調べ、現在アクティブなメッセージコンシューマに関して他のブローカと情報を交換します。

マスターブローカに指定されたクラスタ内の 1 つのブローカは、設定変更記録を保守する役割を担います。他のブローカはマスターブローカなしで初期化を完了できないので、マスターブローカはクラスタ内で必ず最初に起動してください。マスターブローカがオフラインになると、他のブローカが設定変更記録にアクセスできないので、設定情報をクラスタ内全体に伝播できなくなります。このような状況では、送信先または永続サブスクリプションを作成、再設定、または破棄しようとしたり、永続サブスクリプションの再有効化のような関連性のある操作を実行しようとしたりすると、例外が生じます。ただし、非管理メッセージ配信は、通常どおり動作を続けます。マスターブローカと設定変更記録の使用はオプションです。これらが必要になるのは、クラスタの設定を変更したあとまたはブローカの障害が発生したあとにクラスタの同期化を行う場合のみです。



前へ      目次      索引      次へ     


Part No: 819-3564.   Copyright 2005 Sun Microsystems, Inc. All rights reserved.