2.8.13 高度な作業
クラスタについての高度な作業として次の内容について説明します。
-
キューマネジャからクラスタキューを削除
-
クラスタからキューマネジャを削除および再参加
-
クラスタキューの属性を変更
-
クラスタチャネルの属性を変更
- 〈この項の構成〉
(1) キューマネジャからクラスタキューを削除
キューマネジャからクラスタキューを削除する方法を次に示します。
-
キューが空になるまでキューをモニタします。
mqainqコマンドを使用し,入力オープン数,出力オープン数,およびメッセージ登録数の三つの属性を監視します。
入力オープン数,出力オープン数,およびメッセージ登録数がすべてゼロの時,キューが空であることを確認できます。
-
チャネル状態を確認して,送達未確認メッセージがないことを確認します。
チャネルの送達未確認メッセージがないことを確認するには,mqtlschaコマンドで,クラスタセンダチャネルの状態を確認します。
それぞれのキューマネジャから,mqtlschaコマンドを実行します。
mqtlscha -n クラスタセンダチャネル名
送達未確認メッセージがある場合は,必ずそれを解決してから作業を進めてください。
-
クラスタキューを削除します。
削除するクラスタキューが存在するOpenTP1を正常終了して,mqadelqueコマンドでクラスタキューを削除します。
mqadelque 削除するクラスタキュー名 キューファイル名
(2) クラスタからキューマネジャを削除および再参加
クラスタからキューマネジャを削除し,再参加する方法を次に示します。IBM MQからRESET CLUSTERコマンドを実行できる場合とできない場合に分けて説明します。
キューマネジャの削除および再参加の手順一覧を次の表に示します。必要な参照先を確認してください。
手順 |
RESET CLUSTERコマンドを実行できる場合 |
RESET CLUSTERコマンドを実行できない場合 |
---|---|---|
クラスタからの削除 |
||
クラスタへの再参加 (キューファイルを再作成するとき) |
||
クラスタへの再参加 (キューファイルを再作成しないとき) |
||
(a) RESET CLUSTERコマンドを実行できる場合の削除
IBM MQからRESET CLUSTERコマンドを実行できる場合に,クラスタからキューマネジャを削除する方法を次に示します。
-
クラスタを管理しているフルリポジトリからRESET CLUSTERコマンドに自システムのキューマネジャ名を指定して実行します。
-
クラスタから削除するOpenTP1を正常終了します。
手順1.,2.の順序は逆でもかまいません。
-
MQAサービス定義からクラスタに関係する定義を削除します。
-
マルチクラスタでない場合,またはマルチクラスタですべてのクラスタから削除する場合
mqa_mqr_confオペランド
クラスタに関係するmqamqtnam定義コマンド
-
マルチクラスタで一部のクラスタから削除する場合
該当するクラスタに属するクラスタレシーバチャネルが定義されたmqamqtnam定義コマンド
該当するクラスタに属するクラスタセンダチャネル定義
-
-
OpenTP1を正常開始します。
マルチクラスタで一部のクラスタから削除する場合に,クラスタセンダチャネル定義を削除しなかったときは,削除後の最初のリポジトリ管理サーバ開始時に削除情報がフルリポジトリに送信されます。
送信を確認するには,OpenTP1の開始後にクラスタセンダチャネルを終了させ,SYSTEM.CLUSTER.TRANSMIT.QUEUEに登録されたメッセージの情報をmqalsmsgコマンドで表示します。クラスタセンダチャネルの名前が相関識別子に設定されているメッセージがないことを確認してください。
該当するメッセージがある場合はクラスタセンダチャネルを開始し,SYSTEM.CLUSTER.TRANSMIT.QUEUEに存在しないようにしてください。
(b) RESET CLUSTERコマンドを実行できる場合の再参加
IBM MQからRESET CLUSTERコマンドを実行した場合に,クラスタへキューマネジャを再参加させる方法を次に示します。
- ●キューファイルを再作成するとき
-
-
OpenTP1を正常終了します。
-
MQAサービス定義からクラスタに関係する定義を設定します。
・mqa_mqr_confオペランド
・クラスタに関係するmqamqtnam定義コマンド
-
システムキュー(SYSTEM.CLUSTER.XXXX.QUEUE)が登録されているキューファイルを再作成後※,再度クラスタキューを作成します。
XXXX:英字
-
OpenTP1を正常開始します。
- 注※
-
システムキューの登録されているキューファイルがmqaquegrp定義コマンドによって,複数のキューファイルで定義されている場合,mqaquegrp定義コマンドで定義されているすべてのキューファイルを再作成してください
-
- ●キューファイルを再作成しないとき
-
-
RESET CLUSTERコマンド実行後10秒以上経過してから,mqrrefreshコマンドを実行します。
-
(c) RESET CLUSTERコマンドを実行できない場合の削除
IBM MQからRESET CLUSTERコマンドを実行できない場合に,クラスタからキューマネジャを削除する方法を次に示します。
-
アプリケーションを終了します。
-
mqtstpchaコマンドでクラスタレシーバチャネルを終了します。
キューマネジャを削除する,クラスタに関係するすべてのクラスタレシーバチャネルを終了します。
-
mqrremoveコマンドを実行します。
KFCA31526-IおよびKFCA31527-Iが出力されることを確認してください。KFCA31526-Iが出力されない場合,コマンドが異常終了しているおそれがあります。原因を取り除き,再度mqrremoveコマンドを実行してください。
KFCA31527-Iが出力されない場合,リポジトリ管理サーバが開始していることを確認してください。
-
SYSTEM.CLUSTER.TRANSMIT.QUEUEにメッセージが滞留していないことを確認します。
-
mqtstpchaコマンドでクラスタセンダチャネルを終了します。
KFCA16350-I,KFCA16351-IまたはKFCA16352-Wが出力されることを確認してください。
クラスタセンダチャネルは,mqtstpchaコマンドを入力すると,該当チャネルに割り当てられたメッセージを別のチャネルで送信するため,メッセージ送信経路の再設定処理を行います。再設定処理では,クラスタ転送キューに登録されているメッセージを再登録します。
KFCA16350-I,KFCA16351-IまたはKFCA16352-Wが出力されない場合は,mqtstpcha -fコマンドを入力してチャネルを強制解放してください。
-
チャネル状態を確認して,送達未確認メッセージがないことを確認します。
チャネルの送達未確認メッセージがないことを確認するには,mqtlschaコマンドで,クラスタセンダチャネルの状態を確認します。
mqtlscha -n クラスタセンダチャネル名
送達未確認メッセージがある場合は,必ずそれを解決してから作業を進めてください。
-
OpenTP1を正常終了します。
-
MQAサービス定義からクラスタに関係する定義を削除します。
-
マルチクラスタでない場合,またはマルチクラスタですべてのクラスタから削除する場合
mqa_mqr_confオペランド
クラスタに関係するmqamqtnam定義コマンド
-
マルチクラスタで一部のクラスタから削除する場合
該当するクラスタに属するクラスタレシーバチャネルが定義されたmqamqtnam定義コマンド
該当するクラスタに属するクラスタセンダチャネル定義
-
-
OpenTP1を正常開始します。
マルチクラスタで一部のクラスタから削除する場合に,クラスタセンダチャネル定義を削除しなかったときは,削除後の最初のリポジトリ管理サーバ開始時に削除情報がフルリポジトリに送信されます。
送信を確認するには,OpenTP1の開始後にクラスタセンダチャネルを終了させ,SYSTEM.CLUSTER.TRANSMIT.QUEUEに登録されたメッセージの情報をmqalsmsgコマンドで表示します。クラスタセンダチャネルの名前が相関識別子に設定されているメッセージがないことを確認してください。
該当するメッセージがある場合はクラスタセンダチャネルを開始し,SYSTEM.CLUSTER.TRANSMIT.QUEUEに存在しないようにしてください。
(d) RESET CLUSTERコマンドを実行できない場合の再参加(オンライン)
クラスタへキューマネジャをオンラインで再参加させる方法を次に示します。「(c) RESET CLUSTERコマンドを実行できない場合の削除」の手順6から再参加します。
- ●キューファイルを再作成するとき
-
-
リポジトリ管理サーバ(mqrsup,mqrspp)を終了します。
-
システムキュー(SYSTEM.CLUSTER.XXXX.QUEUE)が登録されているキューファイルを切り離します。
XXXX:英字
-
システムキューを再作成※します。
-
キューファイルをオンラインに組み込みます。
-
キューファイルの閉塞を解除します。
-
リポジトリ管理サーバを開始します。
-
クラスタチャネルを開始します(mqtstachaコマンドを実行します)。
- 注※
-
システムキューの登録されているキューファイルがmqaquegrp定義コマンドによって,複数のキューファイルで定義されている場合,mqaquegrp定義コマンドで定義されているすべてのキューファイルを再作成してください。
-
- ●キューファイルを再作成しないとき
-
-
mqrremoveコマンドに-sオプションを指定して実行します。
KFCA31526-IおよびKFCA31527-Iが出力されることを確認してください。
KFCA31526-Iが出力されない場合,コマンドが異常終了しているおそれがあります。原因を取り除き,再度mqrremoveコマンドを実行してください。
KFCA31527-Iが出力されない場合,リポジトリ管理サーバが開始されていることを確認してください。
-
クラスタチャネルを開始します(mqtstachaコマンドを実行します)。
- 注
-
「(c) RESET CLUSTERコマンドを実行できない場合の削除」の手順8または手順9まで実行したあと再参加する場合は,MQAサービス定義にクラスタに関係する定義を追加し,OpenTP1の開始後-fオプションを指定したmqrrefreshコマンドを実行してください。
-
(e) RESET CLUSTERコマンドを実行できない場合の再参加(オフライン)
クラスタへキューマネジャをオフラインで再参加させる方法を次に示します。
- ●キューファイルを再作成するとき
-
-
OpenTP1を正常終了します。
-
MQAサービス定義からクラスタに関係する定義を設定します。
・mqa_mqr_confオペランド
・クラスタに関係するmqamqtnam定義コマンド
-
システムキュー(SYSTEM.CLUSTER.XXXX.QUEUE)が登録されているキューファイルを再作成後※,再度クラスタキューを作成します。
XXXX:英字
-
OpenTP1を正常開始します。
- 注※
-
システムキューの登録されているキューファイルがmqaquegrp定義コマンドによって,複数のキューファイルで定義されている場合,mqaquegrp定義コマンドで定義されているすべてのキューファイルを再作成してください。
-
- ●キューファイルを再作成しないとき
-
-
OpenTP1を正常終了します。
-
MQAサービス定義からクラスタに関係する定義を設定します。
・mqa_mqr_confオペランド
・クラスタに関係するmqamqtnam定義コマンド
-
MQT定義結合ユティリティでMQT定義オブジェクトを再作成します。
-
OpenTP1を正常開始します。
-
(3) クラスタキューの属性を変更
クラスタキューの属性を変更する方法を次に示します。
-
OpenTP1を正常終了します。
-
クラスタキューの属性を変更します。
-
OpenTP1を正常開始します。
この作業で次に示す点に注意してください。
-
必ず正常終了でOpenTP1を終了してください。
-
システムクラスタキューの属性は変更しないでください。
(4) クラスタチャネルの属性を変更
クラスタチャネルの属性を変更する方法を次に示します。
(a) クラスタセンダチャネルの属性の変更
クラスタセンダチャネルの属性を変更する場合,クラスタに参加済みであるかどうかによって変更できる属性が異なります。
クラスタに参加するまでの手順を次の図に示します。
-
クラスタ参加前の属性変更
クラスタに参加して「KFCA31509-I クラスタに参加しました」が出力される前に行った,事前定義クラスタセンダチャネルの全属性の変更は次回のOpenTP1開始時に反映されます。
-
OpenTP1を正常終了します。
-
事前定義クラスタセンダチャネルの属性を変更後,MQT定義オブジェクトファイルを再作成します。
-
OpenTP1を正常開始します。
事前定義クラスタセンダチャネルの属性がこの時点で反映されます。
-
クラスタ参加後の属性変更
クラスタ参加後の事前定義クラスタセンダチャネルおよび自動定義クラスタセンダチャネルは,接続先クラスタレシーバチャネルの属性で動作します。そのため,属性を変更する場合は接続先クラスタレシーバチャネルの属性を変更してください。ただし,TP1/Message Queue独自の属性については,事前定義クラスタセンダチャネルのクラスタセンダチャネル定義またはデフォルトチャネル定義を変更することで,次回のOpenTP1開始時に反映されます。
クラスタ参加後に変更可能な属性について次の表に示します。
定義コマンド |
オプション |
オペランド |
定義内容 |
備考 |
---|---|---|---|---|
mqtalccha (チャネル定義) |
-j |
なし |
バッチサイズ |
事前定義クラスタセンダチャネルの場合はmqtalccha定義コマンドの-jオプションで変更します。 自動定義クラスタセンダチャネルの場合はmqamqtnam定義コマンドで変更します。※1※2 |
-m |
maxmsg |
最大メッセージ長 |
事前定義クラスタセンダチャネルの場合はmqtalccha定義コマンドの-m maxmsgオペランドで変更します。 自動定義クラスタセンダチャネルの場合はバッファ方式がメッセージ方式のときだけmqttbuf定義コマンドの-g lengthオペランドで変更します。※2 |
|
maxseg |
最大セグメントサイズ※2 |
TP1/Message Queue独自の属性です。 事前定義クラスタセンダチャネルの場合はmqtalccha定義コマンドの-m maxsegオペランドで変更します。 自動定義クラスタセンダチャネルの場合はバッファ方式がセグメント方式のときだけmqttbuf定義コマンドの-g lengthオペランドで変更します。※2 |
||
-g |
sndbuf |
送信バッファグループ番号 |
TP1/Message Queue独自の属性です。 |
|
buftype |
バッファ方式 |
TP1/Message Queue独自の属性です。 |
||
-e |
medbuf |
メッセージ編集出口編集用バッファグループ番号 |
TP1/Message Queue独自の属性です。 |
|
medcnt |
メッセージ編集出口編集用バッファ数 |
TP1/Message Queue独自の属性です。 |
||
-i |
なし |
チャネルの確立方法 |
TP1/Message Queue独自の属性です。 |
|
-b |
bretrymcp |
MQプロトコル障害再試行の要否 |
TP1/Message Queue独自の属性です。 |
|
-r |
ipaddr |
自システムのIPアドレス |
TP1/Message Queue独自の属性です。 |
|
hostname |
自システムのホスト名 |
TP1/Message Queue独自の属性です。 |
||
portno |
自システムのポート番号 |
TP1/Message Queue独自の属性です。 |
||
servname |
自システムのサービス名 |
TP1/Message Queue独自の属性です。 |
||
portnum |
自システムのポート番号使用数 |
TP1/Message Queue独自の属性です。 |
||
-v |
tim1 |
チャネル確立応答受信監視タイマ値 |
TP1/Message Queue独自の属性です。 |
|
tim2 |
確認メッセージ受信監視タイマ値 |
TP1/Message Queue独自の属性です。 |
||
vretry |
タイムアウト時のチャネル確立再試行の要否 |
TP1/Message Queue独自の属性です。 |
||
-t |
tcpsndbuf |
TCP/IP出力用バッファサイズ |
TP1/Message Queue独自の属性です。 |
|
tcprcvbuf |
TCP/IP入力用バッファサイズ |
TP1/Message Queue独自の属性です。 |
||
tretrycnt |
TCP/IP確立確認回数 |
TP1/Message Queue独自の属性です。 |
||
tretryint |
TCP/IP確立確認間隔 |
TP1/Message Queue独自の属性です。 |
||
-d |
cnvccsid |
変換CCSID |
TP1/Message Queue独自の属性です。 |
|
-jn |
sndjnl |
送信チャネルジャーナル出力条件 |
TP1/Message Queue独自の属性です。 |
- 注※1
-
ネゴシエーション時の自動定義クラスタセンダチャネルのバッチサイズはmqamqtnam定義コマンド-bオプション指定値および事前定義クラスタセンダチャネルに指定したバッチサイズに依存します。詳細については,4章の「チャネルのネゴシエーション」を参照してください。
事前定義クラスタセンダチャネルのバッチサイズを変更すると,自動定義クラスタセンダチャネルのバッチサイズが小さくなることがあります。自動定義クラスタセンダチャネルのバッチサイズが0になった場合,MQTサーバ開始時に「KFCA16306-E 通信構成定義に誤りがあります。理由コード=01010004」が出力され,MQTサーバは異常終了します。この場合は変更したバッチサイズを再度修正するか,mqamqtnam定義コマンドの-bオプションの指定値を大きくしてください。
- 注※2
-
チャネル確立時にクラスタセンダチャネルは接続先クラスタレシーバチャネルとネゴシエーションします。その結果,「チャネル動作中」の状態では,チャネル属性値は定義コマンドの指定値より小さくなることがあります。
クラスタ参加後にTP1/Message Queue独自の属性を変更する方法を次に示します。
-
OpenTP1を正常終了します。
-
事前定義クラスタセンダチャネルまたはデフォルトチャネル定義の属性を変更後,MQT定義オブジェクトファイルを再作成します。
-
OpenTP1を正常開始します。
事前定義クラスタセンダチャネルまたは自動定義クラスタセンダチャネルの属性がこの時点で反映されます。
(b) クラスタレシーバチャネルの属性の変更
クラスタレシーバチャネルの属性を変更する場合,すべての属性の変更は次回のOpenTP1開始時に反映されます。クラスタレシーバチャネルの属性を変更する方法を次に示します。
-
OpenTP1を正常終了します。
-
クラスタレシーバチャネルの属性を変更後,MQT定義オブジェクトファイルを再作成します。
-
OpenTP1を正常開始します。
変更した属性がこの時点で反映されます。
-
リポジトリ管理サーバ(mqrsup,mqrspp)を開始します。
-
フルリポジトリに接続する事前定義クラスタセンダチャネルが開始していない場合は,mqtstachaコマンドで開始します。
フルリポジトリにクラスタレシーバチャネルの属性が連絡され,クラスタに参加している他キューマネジャのクラスタセンダチャネル属性に反映されます。
(5) クラスタ使用時の障害対策
クラスタ使用時の障害について現象と原因を示します。
(a) MQRC_UNKNOWN_OBJECT_NAMEのリターン
- 現象:
-
アプリケーションがクラスタキューをオープンする際にMQRC_UNKNOWN_OBJECT_NAME(2085L)がリターンされます。
- 原因:
-
オブジェクトのあるキューマネジャ,またはアプリケーションの動作するキューマネジャがクラスタに正常に参加できていません。これらのキューマネジャがクラスタ内のすべてのフルリポジトリを表示できることを確認してください。また,フルリポジトリに対応する手動定義クラスタセンダチャネルが再試行中でないことを確認してください。該当するキューがクラスタ内にあることを確認してください。
クラスタ内にキューがある場合は,適切なオープンオプションが指定されていることを確認してください。リモートのクラスタキューからはメッセージを取り出せないので,登録用のオープンオプションだけを指定できます。
(b) MQRC_CLUSTER_RESOLUTION_ERRORのリターン
- 現象:
-
アプリケーションがクラスタキューをオープンする際にMQRC_CLUSTER_RESOLUTION_ERROR(2189L)がリターンされます。
- 原因:
-
キューのオープンが初回であり,キューマネジャがフルリポジトリと通信できません。フルリポジトリに対応する手動定義クラスタセンダチャネルが再試行中でないことを確認してください。該当するキューがクラスタ内にあることを確認してください。
クラスタ内にキューがある場合は,適切なオープンオプションが指定されていることを確認してください。リモートのクラスタキューからはメッセージを取り出せないので,登録用オプションだけを指定できます。
(c) メッセージ不到達
- 現象:
-
メッセージがあて先キューにありません。
- 原因:
-
メッセージが登録元キューマネジャに滞留しています。SYSTEM.CLUSTER.TRANSMIT.QUEUEが空であり,あて先キューマネジャへのチャネルが動作していることを確認してください。
(d) 別名キューへのメッセージがデッドレターキューに登録される
- 現象:
-
アプリケーションが別名キューにメッセージを登録すると,別名キューのベースキューではなくデッドレターキューに登録されます。
- 原因:
-
別名キューがMQOO_BIND_NOT_FIXEDではなくMQOO_BIND_ON_OPENでオープンされています。MQOO_BIND_ON_OPENが指定された場合,メッセージの転送キューヘッダには,空白ではなくあて先キューマネジャ名が設定されます。
別名が定義されたキューマネジャにメッセージが到着するときに,そのキューマネジャ名が使用され,あて先キューを発見できません。そしてメッセージはデッドレターキューに登録されます。すべての別名キューの属性定義で,DefBind属性にMQOO_BIND_NOT_FIXEDを指定するよう変更するか,キューをオープンする際にMQOO_BIND_NOT_FIXEDを使用してください。
(e) キューマネジャの情報が古い
- 現象:
-
クラスタ内のキューおよびチャネルについての最新情報がキューマネジャにありません。コマンドを入力すると古いオブジェクトが表示されます。
- 原因:
-
オブジェクトのあるキューマネジャ,およびコマンドを入力したキューマネジャについて,クラスタに接続されていることを確認してください。これらのキューマネジャがクラスタ内のすべてのフルリポジトリを表示できることを確認してください。また,フルリポジトリに対応する手動定義クラスタセンダチャネルが再試行中でないことを確認してください。
次に,フルリポジトリを相互接続するのに十分な数のクラスタセンダチャネルがあることを確認してください。クラスタの更新は手動定義クラスタセンダチャネルを使ってフルリポジトリ間だけで通信されます。クラスタが作成されたあとで,これらはIBM MQ上でDEFTYPE(CLUSSDRB)チャネルとして表示されます。手動と自動の両方のチャネルがあるためです。すべてのフルリポジトリ間を接続するのに十分な数のチャネルが必要です。
(6) 事前定義クラスタセンダチャネルの接続先変更
事前定義クラスタセンダチャネルの接続先を変更するための方法を次に示します。
また,次の手順12を実施するまでは,事前定義クラスタセンダチャネルの接続先を変更する前の,フルリポジトリキューマネジャは停止させないでください。
-
アプリケーションを終了します。
-
SYSTEM.CLUSTER.TRANSMIT.QUEUEにメッセージが滞留していないことを確認してください。
-
チャネル状態を確認して,送達未確認メッセージがないことを確認してください。
-
OpenTP1を正常終了します。
-
変更したいフルリポジトリキューマネジャへの事前定義クラスタセンダチャネル定義を作成してください。
-
MQT定義オブジェクトファイルを作成してください。
-
OpenTP1を正常開始してください。
-
リポジトリ管理サーバ(mqrsup,mqrspp)を開始してください。
-
クラスタレシーバチャネルの状態がDISABLED以外の場合,mqtstpchaコマンドでクラスタレシーバチャネルを終了してください。クラスタに関係するすべてのクラスタレシーバチャネルを終了させ,定義種別がMULTINSTとなっているチャネルの状態がDISABLEDとなっていることを確認してください。
-
クラスタセンダチャネルの状態がDISABLEDの場合,mqtstachaコマンドでクラスタセンダチャネルを開始してください。
-
mqrremove -q -cクラスタ名を実行してください。
KFCA31526-IおよびKFCA31527-Iが出力されることを確認してください。KFCA31526-Iが出力されない場合,コマンドが異常終了しているおそれがあります。原因を取り除き,再度mqrremoveコマンドを実行してください。KFCA31527-Iが出力されない場合,リポジトリ管理サーバが開始していることを確認してください。
-
SYSTEM.CLUSTER.TRANSMIT.QUEUEにメッセージが滞留していないことを確認してください。
-
事前定義クラスタセンダチャネルを変更した後の接続先フルリポジトリキューマネジャを用意してください。
-
mqrremove -s -cクラスタ名を実行し,クラスタに再参加してください。
KFCA31526-Iが出力されない場合,コマンドが異常終了しているおそれがあります。原因を取り除き,再度mqrremoveコマンドを実行してください。KFCA31527-Iが出力されない場合,リポジトリ管理サーバが開始していることを確認してください。
-
フルリポジトリキューマネジャへ接続するクラスタセンダチャネルの状態がDISABLEDの場合,mqtstachaコマンドで開始してください。
-
クラスタレシーバチャネルの状態がDISABLEDの場合,mqtstachaコマンドでクラスタレシーバチャネルを開始してください。
-
mqrls -cを実行してください。
参加状態がJOIN,表示された参加時使用チャネル名が手順5で作成したチャネル名となっていることを確認してください。