Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue 使用の手引


2.8.9 クラスタ環境の通信構成

クラスタ機能を使用する場合,ユーザはMQTプロセス構成に応じてシステム定義を作成します。

クラスタ環境でのMQTプロセス構成について,次の図に示します。

図2‒50 クラスタ環境でのMQTプロセス構成

[図データ]

クラスタセンダプロセスおよびクラスタレシーバプロセスは,開始時にリポジトリ管理サーバの開始を待ち合わせます。このため,リポジトリ管理サーバを開始しないかぎり,チャネルは動作できません。また,MQTのコマンドの多くは使用できません。該当するコマンドについては,6章の「TP1/Message Queueの運用コマンド」を参照してください。

オンライン中にリポジトリ管理サーバが終了すると,終了中には新しいクラスタセンダチャネルの開始はできません。リポジトリ管理サーバが再開始されると,クラスタセンダを開始します。

クラスタセンダプロセスが開始処理を完了したあとにリポジトリ管理サーバが終了した場合にも,チャネルの開始ができなくなったり,送信経路の再設定処理が完了したりしないことがあります。クラスタ構成でチャネルを動作させる場合は,リポジトリ管理サーバを必ず動作させてください。

〈この項の構成〉

(1) クラスタセンダチャネルの自動定義

一つのクラスタセンダプロセスで自動定義クラスタセンダチャネルは,MQAサービス定義のmqamqtnam定義コマンドでMCA数に指定した数まで自動的に定義されます。自動定義クラスタセンダチャネルのチャネル属性は,通常は接続先キューマネジャのクラスタレシーバチャネルで指定されたチャネル属性で動作します。ただし,TP1/Message Queueのクラスタセンダチャネルに固有の属性は,リポジトリ情報として管理されないため,次に示す属性値を使用します。

接続先キューマネジャのクラスタレシーバチャネルで指定されたチャネル属性で動作する属性,およびTP1/Message Queue独自の属性のデフォルト値については「3.3.2(3) チャネルデータ定義ブロック(dcmtcq_uoc_mqcd)」,および4章の「mqtalccha(チャネル定義)」を参照してください。

この値はメッセージ編集出口UOCによって変更できます。変更方法については,「2.8.9(3) クラスタチャネルの属性変更」を参照してください。

クラスタセンダチャネルの自動定義の概要について,次の図に示します。

図2‒51 クラスタセンダチャネルの自動定義の概要

[図データ]

  1. アプリケーションがあて先キュー名を指定して,メッセージを登録します。

  2. MQTサーバはメッセージの登録連絡を受けてチャネルを開始します。

  3. 接続するチャネルがメッセージの転送元キューマネジャにない場合,MQTサーバは転送先キューマネジャのクラスタレシーバチャネルのチャネル属性を問い合わせ,それを基に,クラスタセンダチャネルを自動作成して開始します。

  4. メッセージ編集出口UOCが登録されている場合,MCAはチャネルを確立する前にUOCを呼び出します。メッセージ編集出口UOCは,自動作成されたクラスタセンダチャネルのチャネル属性を変更できます。

  5. 自動作成されたクラスタセンダチャネルは,クラスタ転送キューからメッセージを取り出します。

  6. クラスタセンダチャネルはメッセージを転送します。

  7. クラスタレシーバチャネルは,受信したメッセージをあて先キューに登録します。

(2) クラスタレシーバチャネルのマルチインスタンス

同じクラスタ内のすべてのクラスタセンダチャネルからのメッセージ受信をクラスタレシーバチャネルが実行します。クラスタレシーバチャネルは,相手キューマネジャごとにチャネル接続情報を保持できます。この機能をクラスタレシーバチャネルのマルチインスタンス機能といいます。マルチインスタンス機能では,一つのクラスタレシーバチャネルのチャネル定義について,複数の接続情報(チャネルインスタンス)を保持します。

クラスタレシーバチャネルのチャネルインスタンスは,MQAサービス定義のmqamqtnam定義コマンドでMCA数に指定した数まで作成できます。

クラスタレシーバチャネルのチャネル属性はリポジトリ情報として相手キューマネジャに連絡され,相手キューマネジャのクラスタセンダチャネルのチャネル属性として使用されます。また,クラスタレシーバチャネルの属性値をチャネル開始時にメッセージ編集出口UOCによってチャネルインスタンス単位にユーザの任意の値に変更できます。

クラスタレシーバチャネルの属性変更方法については,「2.8.9(3) クラスタチャネルの属性変更」を参照してください。

クラスタレシーバチャネルのマルチインスタンスの概要について,次の図に示します。

図2‒52 クラスタレシーバチャネルのマルチインスタンスの概要

[図データ]

  1. クラスタセンダチャネルが,クラスタレシーバプロセスのポート(mqttcpcr定義コマンド-rオプション指定値)へチャネルの開始要求を送信します。

  2. チャネル接続情報を登録します。

    相手キューマネジャ名に該当するインスタンスを検索し,すでに登録されている場合は該当するインスタンスのMCAを起動します。

    インスタンス情報がない場合,新規にエントリを確保してMCAを起動します。

  3. メッセージ編集出口UOCが登録されている場合,MCAはUOCを呼び出します。

    メッセージ編集出口UOCは,クラスタレシーバチャネルの属性値を必要に応じて変更できます。

    MCAはUOCによって更新されたチャネル属性でチャネルを確立します。

  4. MCAは相手システムのクラスタセンダチャネルからメッセージを受信します。

  5. MCAは,クラスタセンダチャネルから受信したメッセージを,あて先キューに登録します。

(3) クラスタチャネルの属性変更

クラスタチャネルの属性値は,メッセージ編集出口UOCを使用することでユーザの任意の値に変更できます。メッセージ編集出口UOCで変更した属性値は,チャネルが確立している間で有効です。再接続する時に,値はリセットされUOCが変更する前の状態になります。このため,UOCで再度値を変更してください。

メッセージ編集出口UOCとその使用法については,「3. ユーザオウンコーディング」を参照してください。

クラスタ環境では,相手クラスタレシーバに指定したチャネル属性をクラスタセンダチャネルが使用して動作します。このためTP1/Message Queue以外のMQシステムで設定したチャネル属性をTP1/Message Queueのクラスタセンダチャネルが使用し,チャネル属性のサポート範囲の違いによって不正な動作をすることがあります。

TP1/Message Queue以外のMQシステムで,クラスタレシーバチャネルのチャネル属性を設定する場合の注意事項について,次に示します。

(4) クラスタチャネルの削除

特定のチャネルを使用するメッセージ送信が長期間にわたって発生しないで,キューマネジャ内でリポジトリ情報の要求が保持される期間を超えた場合,次に示すチャネルはTP1/Message Queueによって自動的に削除されます。

これらのチャネルの有無については,mqtlscha -n "*"コマンドを入力して確認できます。定義種別としてAUTOINSTまたはMULTINSTが出力されます。また相手システムのキューマネジャ名が出力されます。

例えば,あて先キューの名前を間違って指定したために不要なチャネルが作成された場合は,期間を超えてメッセージを送信しないことでチャネルを削除できます。リポジトリ情報の要求が保持される期間については,「2.8.10(2)(g) リポジトリ情報の保持期間」を参照してください。

事前定義定義クラスタセンダチャネルを削除する場合は,クラスタからキューマネジャを削除する必要があります。詳細については,「2.8.13(2) クラスタからキューマネジャを削除および再参加」を参照してください。