2.8.9 クラスタ環境の通信構成
クラスタ機能を使用する場合,ユーザはMQTプロセス構成に応じてシステム定義を作成します。
クラスタ環境でのMQTプロセス構成について,次の図に示します。
図2-50 クラスタ環境でのMQTプロセス構成
![[図データ]](figure/zu021130.gif)
- クラスタセンダプロセス
クラスタセンダチャネルが動作するプロセスです。TP1/Message Queueシステム内に一つ必要です。
TCP定義のmqttcpcs定義コマンドで定義します。
- 注意
- mqttcpcsuで始まるシステムサービス定義名またはmqttcpcsをプロトコル名称に指定する,mqamqtnam定義コマンドはMQAサービス定義に一つだけ指定してください。複数指定した場合,OpenTP1は開始できません。
- クラスタセンダチャネル
フルリポジトリキューマネジャにクラスタのメンバである自システムの情報を送信します。また,他キューマネジャへ送信するメッセージの通信路になるチャネルです。
事前定義クラスタセンダチャネルは,ユーザが事前に定義します。参加するクラスタごとに一つ以上をチャネル定義に指定(TCP定義のmqtalccha定義コマンドの-y typeオペランドにclussdrを指定)します。この場合,-oオプションにはフルリポジトリキューマネジャについて設定してください。フルリポジトリがない場合,リポジトリ情報を取得できないため,クラスタに参加できません。参加するクラスタ内に複数のフルリポジトリキューマネジャがある場合は,最低一つの事前定義クラスタセンダチャネル定義があれば十分です(必要に応じて自動定義クラスタセンダチャネルをシステムが自動的に作成します)。どのフルリポジトリキューマネジャに接続してもかまいません。
事前定義クラスタセンダチャネルのチャネル属性は,通常は,接続先キューマネジャのクラスタレシーバで指定されたチャネル属性で変更されます。ただし,TP1/Message Queueのクラスタセンダチャネルに固有の情報は,クラスタレシーバチャネルから入手できないため,TCP定義のmqtalccha定義コマンドの指定値を使用します。リポジトリ情報としてTP1/Message Queueが保持している期間は,変更されたチャネル属性が有効です。
このほかに,自動定義クラスタセンダチャネルがあります。詳細については,「2.8.9(1) クラスタセンダチャネルの自動定義」を参照してください。
- クラスタレシーバプロセス
クラスタレシーバチャネルが動作するプロセスです。TP1/Message Queueシステム内に一つ以上定義できます。
mqttcpcr定義コマンドで定義します。
- クラスタレシーバチャネル
フルリポジトリキューマネジャからクラスタにあるメンバの状態を受信します。また,他キューマネジャから受信するメッセージの通信路になるチャネルです。
クラスタレシーバは,クラスタレシーバプロセスごとに一つだけ事前に定義できます。
チャネル定義に指定(TCP定義のmqtalccha定義コマンドの-y typeオプションにclusrcvrを指定)します。
クラスタレシーバプロセスを複数動作させることによってクラスタレシーバチャネルを複数定義することもできます。クラスタレシーバチャネルはチャネルインスタンスという接続情報(メッセージシーケンス番号やチャネル状態)を複数保持できるため,一つのチャネル定義で複数のクラスタセンダチャネルからの確立要求を受け入れることができます。
クラスタセンダプロセスおよびクラスタレシーバプロセスは,開始時にリポジトリ管理サーバの開始を待ち合わせます。このため,リポジトリ管理サーバを開始しないかぎり,チャネルは動作できません。また,MQTのコマンドの多くは使用できません。該当するコマンドについては,6章の「TP1/Message Queueの運用コマンド」を参照してください。
オンライン中にリポジトリ管理サーバが終了すると,終了中には新しいクラスタセンダチャネルの開始はできません。リポジトリ管理サーバが再開始されると,クラスタセンダを開始します。
クラスタセンダプロセスが開始処理を完了したあとにリポジトリ管理サーバが終了した場合にも,チャネルの開始ができなくなったり,送信経路の再設定処理が完了しないことがあります。クラスタ構成でチャネルを動作させる場合は,リポジトリ管理サーバを必ず動作させてください。
- <この項の構成>
- (1) クラスタセンダチャネルの自動定義
- (2) クラスタレシーバチャネルのマルチインスタンス
- (3) クラスタチャネルの属性変更
- (4) クラスタチャネルの削除
(1) クラスタセンダチャネルの自動定義
一つのクラスタセンダプロセスで自動定義クラスタセンダチャネルは,MQAサービス定義のmqamqtnam定義コマンドでMCA数に指定した数まで自動的に定義されます。自動定義クラスタセンダチャネルのチャネル属性は,通常は接続先キューマネジャのクラスタレシーバチャネルで指定されたチャネル属性で動作します。ただし,TP1/Message Queueのクラスタセンダチャネルに固有の属性は,リポジトリ情報として管理されないため,次に示す属性値を使用します。
- デフォルトチャネル定義(mqtalccha定義コマンド)で指定があればその値
- 指定がなければTP1/Message Queue独自の属性のデフォルト値
接続先キューマネジャのクラスタレシーバチャネルで指定されたチャネル属性で動作する属性,およびTP1/Message Queue独自の属性のデフォルト値については「3.3.2(3) チャネルデータ定義ブロック(dcmtcq_uoc_mqcd)」,および4章の「mqtalccha(チャネル定義)」を参照してください。
この値はメッセージ編集出口UOCによって変更できます。変更方法については,「2.8.9(3) クラスタチャネルの属性変更」を参照してください。
クラスタセンダチャネルの自動定義の概要について,次の図に示します。
図2-51 クラスタセンダチャネルの自動定義の概要
![[図データ]](figure/zu021133.gif)
- アプリケーションがあて先キュー名を指定して,メッセージを登録します。
- MQTサーバはメッセージの登録連絡を受けてチャネルを開始します。
- 接続するチャネルがメッセージの転送元キューマネジャにない場合,MQTサーバは転送先キューマネジャのクラスタレシーバチャネルのチャネル属性を問い合わせ,それを基に,クラスタセンダチャネルを自動作成して開始します。
- メッセージ編集出口UOCが登録されている場合,MCAはチャネルを確立する前にUOCを呼び出します。メッセージ編集出口UOCは,自動作成されたクラスタセンダチャネルのチャネル属性を変更できます。
- 自動作成されたクラスタセンダチャネルは,クラスタ転送キューからメッセージを取り出します。
- クラスタセンダチャネルはメッセージを転送します。
- クラスタレシーバチャネルは,受信したメッセージをあて先キューに登録します。
(2) クラスタレシーバチャネルのマルチインスタンス
同じクラスタ内のすべてのクラスタセンダチャネルからのメッセージ受信をクラスタレシーバチャネルが実行します。クラスタレシーバチャネルは,相手キューマネジャごとにチャネル接続情報を保持できます。この機能をクラスタレシーバチャネルのマルチインスタンス機能といいます。マルチインスタンス機能では,一つのクラスタレシーバチャネルのチャネル定義について,複数の接続情報(チャネルインスタンス)を保持します。
クラスタレシーバチャネルのチャネルインスタンスは,MQAサービス定義のmqamqtnam定義コマンドでMCA数に指定した数まで作成できます。
クラスタレシーバチャネルのチャネル属性はリポジトリ情報として相手キューマネジャに連絡され,相手キューマネジャのクラスタセンダチャネルのチャネル属性として使用されます。また,クラスタレシーバチャネルの属性値をチャネル開始時にメッセージ編集出口UOCによってチャネルインスタンス単位にユーザの任意の値に変更できます。
クラスタレシーバチャネルの属性変更方法については,「2.8.9(3) クラスタチャネルの属性変更」を参照してください。
クラスタレシーバチャネルのマルチインスタンスの概要について,次の図に示します。
図2-52 クラスタレシーバチャネルのマルチインスタンスの概要
![[図データ]](figure/zu021136.gif)
- クラスタセンダチャネルが,クラスタレシーバプロセスのポート(mqttcpcr定義コマンド-rオプション指定値)へチャネルの開始要求を送信します。
- チャネル接続情報を登録します。
相手キューマネジャ名に該当するインスタンスを検索し,すでに登録されている場合は該当するインスタンスのMCAを起動します。
インスタンス情報がない場合,新規にエントリを確保してMCAを起動します。
- メッセージ編集出口UOCが登録されている場合,MCAはUOCを呼び出します。
メッセージ編集出口UOCは,クラスタレシーバチャネルの属性値を必要に応じて変更できます。
MCAはUOCによって更新されたチャネル属性でチャネルを確立します。
- MCAは相手システムのクラスタセンダチャネルからメッセージを受信します。
- MCAは,クラスタセンダチャネルから受信したメッセージを,あて先キューに登録します。
(3) クラスタチャネルの属性変更
クラスタチャネルの属性値は,メッセージ編集出口UOCを使用することでユーザの任意の値に変更できます。メッセージ編集出口UOCで変更した属性値は,チャネルが確立している間で有効です。再接続する時に,値はリセットされUOCが変更する前の状態になります。このため,UOCで再度値を変更してください。
メッセージ編集出口UOCとその使用法については,「3. ユーザオウンコーディング」を参照してください。
クラスタ環境では,相手クラスタレシーバに指定したチャネル属性をクラスタセンダチャネルが使用して動作します。このためTP1/Message Queue以外のMQシステムで設定したチャネル属性をTP1/Message Queueのクラスタセンダチャネルが使用し,チャネル属性のサポート範囲の違いによって不正な動作をすることがあります。
TP1/Message Queue以外のMQシステムで,クラスタレシーバチャネルのチャネル属性を設定する場合の注意事項について,次に示します。
- クラスタレシーバチャネルのためのリスナ用ポート番号には1024~65535の値を使用してください。
- MQシステムが動作するコンピュータのホスト名は英字で始まる英数字を使用してください。
- 他MQシステムのクラスタレシーバでサポートするチャネル属性の上限値や下限値がTP1/Message Queueのサポート範囲と一致しない場合,TP1/Message Queueで動作ができる限界値を使用して動作します。
(4) クラスタチャネルの削除
特定のチャネルを使用するメッセージ送信が長期間にわたって発生しないで,キューマネジャ内でリポジトリ情報の要求が保持される期間を超えた場合,次に示すチャネルはTP1/Message Queueによって自動的に削除されます。
- 自動定義クラスタセンダチャネル
- 対応するクラスタレシーバチャネルのチャネルインスタンス
これらのチャネルの有無については,mqtlscha -n "*"コマンドを入力して確認できます。定義種別としてAUTOINSTまたはMULTINSTが出力されます。また相手システムのキューマネジャ名が出力されます。
例えば,あて先キューの名前を間違って指定したために不要なチャネルが作成された場合は,期間を超えてメッセージを送信しないことでチャネルを削除できます。リポジトリ情報の要求が保持される期間については,「2.8.10(2)(g) リポジトリ情報の保持期間」を参照してください。
事前定義定義クラスタセンダチャネルを削除する場合は,クラスタからキューマネジャを削除する必要があります。詳細については,「2.8.13(2) クラスタからキューマネジャを削除および再参加」を参照してください。