Freewareで習得するIBM MQの基本

接続モード(4)クライアント接続(3)

※本連載は最新のmqpgf/mqpcfに基づいて改定されることがあります。常に最新バージョンをダウンロードしてご使用ください。

クライアント・チャネルのワークロード・バランシングの機能についてご説明します。 チャネルの「チャネルの加重(CLNTWGHT)」および「アフィニティー(AFFINITY)」パラメータと、クライアント・チャネル定義テーブル (CCDT) のキューマネージャー・グループを使用します。 動作モードはAFFINITYで指定します。 AFFINITYには"NONE"または"PREFERRED(デフォルト)"を指定します。 クライアントはAFFINITYとCLNTWGHTの設定に従って、チャネルのリストを内部に作成し、そのリストに従って接続を試行します。 CLNTWGHTが"0"(デフォルト)のものが常にリストの最上位に配置されます。 "0"が複数ある場合は、チャネル名のアルファベット順に並べられます。 "1"~"99"が指定された場合、"1"が最低で"99"が最高の優先順位です。 必ずこの優先順位にしたがってリストされるわけではなく、重みづけが大きいほど上位にリストされる可能性が高くなります。
※このリストをユーザーが直接参照することはできません。


AFFINITYの設定による動作の相違の概要

AFFINITY(NONE)の場合は、MQCONN()の発行事にリストが生成されます。 同一マシンの複数のアプリケーションからMQCONN()が呼び出される場合、それ毎に別々のリストが生成されます。
AFFINITY(PREFERRED)の場合は、同じマシン内で最初にMQCONN()が発行された時にリストが生成されます。 同じマシンで稼働するクライアント・アプリケーションは全て同じリストを使用します。 CLNTWGHTが"0"のものは、接続に失敗した場合もリストの上位にそのまま残りますが、"0"以外のチャネルは失敗するとリストの最後に移動されます。 これにより、接続できないサーバーへ接続を試行する可能性は減りますが、復旧後もリストの最後に配置され続けます。

前回作成したキューマネージャー・グループの検証環境のデフォルトのキューマネージャー・グループのCLNTWGHTとAFFINITYを設定して、挙動を確認してみます。


AFFINITYが"NONE"の場合の動作

AFFINITYには"NONE"から確認します。
下記、スクリプトを実行してパラメータをセットアップします。

チャネル・パラメータ設定スクリプト

>type alterChl.mqsc
alter CHANNEL(CG.DEF1.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(3) AFFINITY(NONE)
alter CHANNEL(CG.DEF2.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(5) AFFINITY(NONE)
alter CHANNEL(CG.DEF3.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(0) AFFINITY(NONE)
alter CHANNEL(CG.DEF4.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(2) AFFINITY(NONE)
alter CHANNEL(CG.DEF5.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(0) AFFINITY(NONE)

>

チャネル・パラメータ設定スクリプトの実行

>runmqsc -n < alterChl.mqsc 5724-H72 (C) Copyright IBM Corp. 1994, 2018. 'AMQCLCHL.TAB' .... 1 : alter CHANNEL(CG.DEF1.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(3) AFFINITY(NONE) AMQ8016I: IBM MQ .... 2 : alter CHANNEL(CG.DEF2.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(5) AFFINITY(NONE) AMQ8016I: IBM MQ .... 3 : alter CHANNEL(CG.DEF3.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(0) AFFINITY(NONE) AMQ8016I: IBM MQ .... 4 : alter CHANNEL(CG.DEF4.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(2) AFFINITY(NONE) AMQ8016I: IBM MQ .... 5 : alter CHANNEL(CG.DEF5.MQI) CHLTYPE(CLNTCONN) CLNTWGHT(0) AFFINITY(NONE) AMQ8016I: IBM MQ .... >


正しく設定されたか、念のため確認してみます。

>runmqsc -n 5724-H72 (C) Copyright IBM Corp. 1994, 2018. 'AMQCLCHL.TAB' dis chl(CG*) qmname conname clntwght affinity 1 : dis chl(CG*) qmname conname clntwght affinity AMQ8414I: .... CHANNEL(CG.DEF1.MQI) CHLTYPE(CLNTCONN) AFFINITY(NONE) CLNTWGHT(3) CONNAME(10.41.207.3(1414)) QMNAME( ) AMQ8414I: .... CHANNEL(CG.DEF2.MQI) CHLTYPE(CLNTCONN) AFFINITY(NONE) CLNTWGHT(5) CONNAME(10.41.207.3(1415)) QMNAME( ) AMQ8414I: .... CHANNEL(CG.DEF3.MQI) CHLTYPE(CLNTCONN) AFFINITY(NONE) CLNTWGHT(0) CONNAME(10.41.207.4(1414)) QMNAME( ) AMQ8414I: .... CHANNEL(CG.DEF4.MQI) CHLTYPE(CLNTCONN) AFFINITY(NONE) CLNTWGHT(2) CONNAME(10.41.207.4(1415)) QMNAME( ) AMQ8414I: .... CHANNEL(CG.DEF5.MQI) CHLTYPE(CLNTCONN) AFFINITY(NONE) CLNTWGHT(0) CONNAME(10.41.207.4(1416)) QMNAME( )

CG.DEF3.MQI(Server2:SampleQM)とCG.DEF5.MQI(Server2:PartialQM)はCLNTWGHT(0)なので、常にリストの先頭にアルファベット順に配置されるはずです。 この2つのキューマネージャー以外は、CLNTWGHTに"0"以外が設定されているので、その重み付けに従って、選択される確率が決められます。 具体的には、CG.DEF1.MQI(Server1:SampleQM)が30%、CG.DEF2.MQI(Server1:RemoteQM)が50%、CG.DEF4.MQI(Server2:RemoteQM)が20%です。


Ex. 9.1.1 AFFINITYが"NONE"の場合のワークロード・バランシング

クライアントから実行するコマンド・ラインは下記です。
MQCNO_RECONNECTを指定して、接続の異常が検出された場合、同じキューマネージャー・グループの他のキューマネージャーに接続させます。 規定のイベント・ハンドラーを呼び出すように指示します。 MQCONNは最初に1回のみ呼び出され、MQPUTを2秒間隔で100回繰り返します。 そして、それらの処理を10個のスレッドを起動して並列に行います。

mqpgfc -qm "*" -q LQ1 -m test -ni 10 -tr -n 100 -i 2000 -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT

*オプションの説明
-cf EventHandler: コールバック関数としてmqpgf/mqpgfc規定のイベント・ハンドラーを指定
-op MQOP_REGISTER: MQCB.OperationにMQOP_REGISTERを設定
MQCBT_EVENT_HANDLER: MQCBD.CallbackTypeにMQCBT_EVENT_HANDLERを設定
MQCNO_RECONNECT: MQCNO.OptionsにMQCNO_RECONNECTを指定
-ni: 指定された数のスレッドを起動(MQCONN()はスレッド毎に呼び出す)

下記手順で、テストを実施してみます。

  1. (a) 最初に全てのキューマネージャ-を起動しておきます。
  2. (b) クライアントからmqpgfcコマンドを実行します。
  3. (c) Server2:SampleQMに10個のスレッド全てが接続されていることを確認します。
  4. (d) Server2:SampleQMを"endmqm -r"で停止します。
  5. (e) Server2:PartialQMに10個のスレッド全てが再接続されたことを確認します。
  6. (f) Server2:PartialQMを"endmqm -r"で停止します。
  7. (g) 残りの3つのキューマネージャーへの接続数を確認します。
  8. 以上を5回繰り返します。

下記は1回分の実施例です。

※(a) 最初に全てのキューマネージャ-を起動しておきます。
Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Running)

※(b) クライアントからmqpgfcコマンドを実行します。

>mqpgfc -qm "*" -q LQ1 -m test -ni 10 -tr -n 100 -i 2000 -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT
[2018/10/23 11:29:37.252 tid=19980] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.253 tid=10356] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.256 tid=26552] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.266 tid=25972] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.267 tid=26564] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.269 tid=26484] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.271 tid=22516] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.276 tid=26568] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.278 tid=25564] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.280 tid=26560] MQCONNX start qmgr:* Options:0x01000000
[2018/10/23 11:29:37.482 tid=25972] MQCONNX stop hcon:33554440 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 11:29:37.482 tid=25972] MQCB start hcon:33554440
[2018/10/23 11:29:37.485 tid=25972] MQCB stop hcon:33554440 CompCd=00 ReasonCd=00
[2018/10/23 11:29:37.486 tid=25972] MQOPEN start hcon:33554440 ObjectName:LQ1 Options:0x00000010
[2018/10/23 11:29:37.507 tid=25972] MQOPEN stop hcon:33554440 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/10/23 11:29:37.508 tid=25972] 1: message length: 4 put message: test
....

※(c) Server2:SampleQMに10個のスレッド全てが接続されていることを確認します。

Server2: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc
18: CONN(414D514353616D706C65514D202020205BCE866F20002311) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
32: CONN(414D514353616D706C65514D202020205BCE866F20002D01) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
34: CONN(414D514353616D706C65514D202020205BCE866F20002E02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
36: CONN(414D514353616D706C65514D202020205BCE866F20002C02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
40: CONN(414D514353616D706C65514D202020205BCE866F20002A02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
42: CONN(414D514353616D706C65514D202020205BCE866F20002902) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
44: CONN(414D514353616D706C65514D202020205BCE866F20002802) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
46: CONN(414D514353616D706C65514D202020205BCE866F20002702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
48: CONN(414D514353616D706C65514D202020205BCE866F20002602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
50: CONN(414D514353616D706C65514D202020205BCE866F20002502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

※(d) Server2:SampleQMを"endmqm -r"で停止します。

Server2: endmqm -r SampleQM
Waiting for queue manager 'SampleQM' to end.
Quiesce request accepted. The queue manager will stop when all outstanding work
is complete.

※クライアント・アプリケーションが自動再接続を開始します。
....
[2018/10/23 11:30:08.904 tid=26564] MQPUT start hcon:33554452 Options:0x00000000
[2018/10/23 11:30:08.910 tid=26564] MQPUT stop hcon:33554452 CompCd=00 ReasonCd=00
[2018/10/23 11:30:08.926 tid=25564] 16: message length: 4 put message: test
[2018/10/23 11:30:08.928 tid=25564] MQPUT start hcon:33554438 Options:0x00000000
[2018/10/23 11:30:08.933 tid=25564] MQPUT stop hcon:33554438 CompCd=00 ReasonCd=00
[2018/10/23 11:30:09.494] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.497] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.499] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.502] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.505] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.507] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.509] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.511] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.514] EVENT : Reconnecting (Delay: 97ms)
[2018/10/23 11:30:09.517] EVENT : Reconnecting (Delay: 97ms)
....
[2018/10/23 11:30:10.286] EVENT : Reconnected
....
[2018/10/23 11:30:11.401] EVENT : Reconnected
....
[2018/10/23 11:30:12.862] EVENT : Reconnected
....
[2018/10/23 11:30:13.928] EVENT : Reconnected
....
[2018/10/23 11:30:15.002] EVENT : Reconnected
....
[2018/10/23 11:30:16.131] EVENT : Reconnected
....
[2018/10/23 11:30:17.294] EVENT : Reconnected
....
[2018/10/23 11:30:18.408] EVENT : Reconnected
....
[2018/10/23 11:30:19.897] EVENT : Reconnected
[....
[2018/10/23 11:30:20.960] EVENT : Reconnected
....
[2018/10/23 11:30:20.961 tid=22516] 21: message length: 4 put message: test
[2018/10/23 11:30:20.970 tid=22516] MQPUT start hcon:33554448 Options:0x00000000

※(e) Server2:PartialQMに10個のスレッド全てが再接続されたことを確認します。

Server2: mqpcf con -qm PartialQM APPLTAG |grep mqpgfc
16: CONN(414D51435061727469616C514D2020205BCE868520002C02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
20: CONN(414D51435061727469616C514D2020205BCE868520002B02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
22: CONN(414D51435061727469616C514D2020205BCE868520002A02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
24: CONN(414D51435061727469616C514D2020205BCE868520002902) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
26: CONN(414D51435061727469616C514D2020205BCE868520002802) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
28: CONN(414D51435061727469616C514D2020205BCE868520002702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
30: CONN(414D51435061727469616C514D2020205BCE868520002602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
32: CONN(414D51435061727469616C514D2020205BCE868520002502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
34: CONN(414D51435061727469616C514D2020205BCE868520002402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
41: CONN(414D51435061727469616C514D2020205BCE868520002302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

※(f) Server2:PartialQMを"endmqm -r"で停止します。

Server2: endmqm -r PartialQM
Waiting for queue manager 'PartialQM' to end.
Quiesce request accepted. The queue manager will stop when all outstanding work
is complete.

※再度クライアント・アプリケーションが自動再接続を開始します。
....
[2018/10/23 11:30:41.565 tid=19980] MQPUT start hcon:33554444 Options:0x00000000
[2018/10/23 11:30:41.591 tid=19980] MQPUT stop hcon:33554444 CompCd=00 ReasonCd=00
[2018/10/23 11:30:41.705] EVENT : Reconnecting (Delay: 10ms)
[2018/10/23 11:30:41.714] EVENT : Reconnecting (Delay: 10ms)
[2018/10/23 11:30:41.726] EVENT : Reconnecting (Delay: 10ms)
[2018/10/23 11:30:41.738] EVENT : Reconnecting (Delay: 10ms)
[2018/10/23 11:30:41.748] EVENT : Reconnecting (Delay: 150ms)
....
[2018/10/23 11:30:43.867] EVENT : Reconnected
[2018/10/23 11:30:43.876] EVENT : Reconnecting (Delay: 0ms)
[2018/10/23 11:30:43.886] EVENT : Reconnecting (Delay: 0ms)
[2018/10/23 11:30:43.898] EVENT : Reconnecting (Delay: 0ms)
[2018/10/23 11:30:43.907] EVENT : Reconnecting (Delay: 0ms)
[2018/10/23 11:30:43.913] EVENT : Reconnecting (Delay: 0ms)
....
[2018/10/23 11:30:46.081] EVENT : Reconnected
....
[2018/10/23 11:30:48.215] EVENT : Reconnected
....
[2018/10/23 11:30:50.326] EVENT : Reconnected
....
[2018/10/23 11:30:52.731] EVENT : Reconnected
....
[2018/10/23 11:30:54.891] EVENT : Reconnected
....
[2018/10/23 11:30:57.017] EVENT : Reconnected
....
[2018/10/23 11:30:59.131] EVENT : Reconnected
....
[2018/10/23 11:31:01.246] EVENT : Reconnected
....
[2018/10/23 11:31:03.688] EVENT : Reconnected
[2018/10/23 11:31:04.605 tid=25564] MQPUT stop hcon:33554438 CompCd=00 ReasonCd=00
[2018/10/23 11:31:04.739 tid=26568] 37: message length: 4 put message: test
....

※(g) 残りの3つのキューマネージャーへの接続数を確認します。

*Server2:RemoteQM CLNTWGHT(2)
Server2: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
46: CONN(414D514352656D6F7465514D202020205BCE754A20002F02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

*Server1:SampleQM CLNTWGHT(3)
Server1: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc
31: CONN(414D514353616D706C65514D202020205BCE740020003202) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
35: CONN(414D514353616D706C65514D202020205BCE740020003102) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
39: CONN(414D514353616D706C65514D202020205BCE740020003002) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

*Server1:RemoteQM CLNTWGHT(5)
Server1: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
11: CONN(414D514352656D6F7465514D202020205BCE741220002F02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
15: CONN(414D514352656D6F7465514D202020205BCE741220002E02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
17: CONN(414D514352656D6F7465514D202020205BCE741220002D02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
19: CONN(414D514352656D6F7465514D202020205BCE741220002C02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
23: CONN(414D514352656D6F7465514D202020205BCE741220002B02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

下記が上記を5回繰り返して、残りの3つのキューマネージャーへの接続数を確認した結果です。 おおよそ重み付けに比例して接続されていることが確認できます。

Server2:RemoteQM Server1:SampleQM Server1:RemoteQM
(CLNTWGHT:2) (CLNTWGHT:3) (CLNTWGHT:5)
3 4 3
4 5 1
1 3 6
4 1 5
0 2 8
計12接続 計15接続 計23接続
24% 30% 46%

整理すると、このテストで下記が確認できました。

  1. 1.CLNTWGHTが"0"(デフォルト)のものが常にリストの最上位に配置される。
  2. 2."0"が複数ある場合は、チャネル名のアルファベット順に並べられる。
  3. AFFINITY(NONE)の場合:
  4. 3.MQCONN()の発行事にリストが生成される。
  5. 4.同一マシンの複数のアプリケーション(スレッド)からMQCONN()が呼び出される場合、接続毎に別々のリストが生成される。
  6. 5.重みづけが大きいほど上位にリストされる可能性が高くなる。

上記は、それぞれのスレッドからMQCONN()が発行させて確認しましたが、参考までに違うテスト方法についてご紹介しておきます。 色々と試してみてください。

fig 9.1


Ex. 9.1.2 AFFINITYが"NONE"の場合のワークロード・バランシング(その他のテスト方法1)

キューマネージャ名に'-qm "*,*,*"'の様に、複数回キューマネージャーグループを指定すると、その回数分接続が作成されます。 共用接続ハンドルの作成の為に、MQCNO_HANDLE_SHARE_BLOCKまたはMQCNO_HANDLE_SHARE_NO_BLOCKを指定するのを忘れないでください。

※CLNTWGHTが"0"のキューマネージャーは停止しておきます。
Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Ended normally)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Ended normally)

※デフォルトのキューマネージャー・グループを使用した接続を3つ作成します。
>mqpgfc -qm "*,*,*" -q LQ1 -m test -tr -n 100 -i 2000 -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT MQCNO_HANDLE_SHARE_BLOCK
[2018/10/23 15:11:04.023] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 15:11:06.171] MQCONNX stop hcon:33554437 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 15:11:06.171] MQCB start hcon:33554437
[2018/10/23 15:11:06.171] MQCB stop hcon:33554437 CompCd=00 ReasonCd=00
[2018/10/23 15:11:06.171] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 15:11:08.377] MQCONNX stop hcon:33554439 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 15:11:08.378] MQCB start hcon:33554439
[2018/10/23 15:11:08.379] MQCB stop hcon:33554439 CompCd=00 ReasonCd=00
[2018/10/23 15:11:08.380] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 15:11:10.482] MQCONNX stop hcon:33554441 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 15:11:10.483] MQCB start hcon:33554441
[2018/10/23 15:11:10.484] MQCB stop hcon:33554441 CompCd=00 ReasonCd=00
[2018/10/23 15:11:10.485] MQOPEN start hcon:33554437 ObjectName:LQ1 Options:0x00000010
[2018/10/23 15:11:10.489] MQOPEN stop hcon:33554437 ObjectName:LQ1 CompCd=00 ReasonCd=00
....

※接続先を確認します。
Server1: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc
12: CONN(414D514353616D706C65514D202020205BCE740020003C02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

Server1: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
12: CONN(414D514352656D6F7465514D202020205BCE741220004402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
18: CONN(414D514352656D6F7465514D202020205BCE741220004302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

Server2: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
Server2:

fig 9.2


Ex. 9.1.3 AFFINITYが"NONE"の場合のワークロード・バランシング(その他のテスト方法2)

MQCONN()からMQDISC()までを繰り返します。 "-c"オプションに繰り返し回数を指定します。 "-s"オプションを使用してMQDISC()の呼び出し前で停止させて、接続先を確認します。

>mqpgfc -qm "*" -q LQ1 -m test -tr -c 3 -s MQDISC -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT MQCNO_HANDLE_SHARE_BLOCK
[2018/10/23 16:12:30.759] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 16:12:33.576] MQCONNX stop hcon:33554437 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 16:12:33.577] MQCB start hcon:33554437
[2018/10/23 16:12:33.578] MQCB stop hcon:33554437 CompCd=00 ReasonCd=00
[2018/10/23 16:12:33.579] MQOPEN start hcon:33554437 ObjectName:LQ1 Options:0x00000010
[2018/10/23 16:12:33.643] MQOPEN stop hcon:33554437 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/10/23 16:12:33.643] 1: message length: 4 put message: test
[2018/10/23 16:12:33.648] MQPUT start hcon:33554437 Options:0x00000000
[2018/10/23 16:12:33.683] MQPUT stop hcon:33554437 CompCd=00 ReasonCd=00
[2018/10/23 16:12:33.691] MQCLOSE start hcon:33554437 Options:0x00000000
[2018/10/23 16:12:33.710] MQCLOSE stop hcon:33554437 CompCd=00 ReasonCd=00
stop before calling MQDISC().
Hit Any Key!!!

Server1: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
12: CONN(414D514352656D6F7465514D202020205BCE741220004602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

[2018/10/23 16:12:55.430] MQDISC start hcon:33554437
[2018/10/23 16:12:55.453] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
[2018/10/23 16:12:55.456] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 16:12:57.951] MQCONNX stop hcon:33554439 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 16:12:57.959] MQCB start hcon:33554439
[2018/10/23 16:12:57.965] MQCB stop hcon:33554439 CompCd=00 ReasonCd=00
[2018/10/23 16:12:57.970] MQOPEN start hcon:33554439 ObjectName:LQ1 Options:0x00000010
[2018/10/23 16:12:57.982] MQOPEN stop hcon:33554439 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/10/23 16:12:57.988] 1: message length: 4 put message: test
[2018/10/23 16:12:57.994] MQPUT start hcon:33554439 Options:0x00000000
[2018/10/23 16:12:58.015] MQPUT stop hcon:33554439 CompCd=00 ReasonCd=00
[2018/10/23 16:12:58.019] MQCLOSE start hcon:33554439 Options:0x00000000
[2018/10/23 16:12:58.032] MQCLOSE stop hcon:33554439 CompCd=00 ReasonCd=00
stop before calling MQDISC().
Hit Any Key!!!

Server2: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
6: CONN(414D514352656D6F7465514D202020205BCEBB9220002402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

[2018/10/23 16:13:16.699] MQDISC start hcon:33554439
[2018/10/23 16:13:17.053] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
[2018/10/23 16:13:17.061] MQCONNX start qmgr:* Options:0x01000040
[2018/10/23 16:13:19.286] MQCONNX stop hcon:33554441 qmgr:* CompCd=00 ReasonCd=00
[2018/10/23 16:13:19.289] MQCB start hcon:33554441
[2018/10/23 16:13:19.291] MQCB stop hcon:33554441 CompCd=00 ReasonCd=00
[2018/10/23 16:13:19.292] MQOPEN start hcon:33554441 ObjectName:LQ1 Options:0x00000010
[2018/10/23 16:13:19.299] MQOPEN stop hcon:33554441 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/10/23 16:13:19.302] 1: message length: 4 put message: test
[2018/10/23 16:13:19.304] MQPUT start hcon:33554441 Options:0x00000000
[2018/10/23 16:13:19.346] MQPUT stop hcon:33554441 CompCd=00 ReasonCd=00
[2018/10/23 16:13:19.349] MQCLOSE start hcon:33554441 Options:0x00000000
[2018/10/23 16:13:19.370] MQCLOSE stop hcon:33554441 CompCd=00 ReasonCd=00
stop before calling MQDISC().
Hit Any Key!!!

Server1: mqpcf con -qm RemoteQM APPLTAG |grep mqpgfc
17: CONN(414D514352656D6F7465514D202020205BCE741220004605) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

fig 9.3


AFFINITYが"PREFERRED"の場合の動作

次にAFFINITYには"PREFERRED"の挙動を確認します。
下記、スクリプトを実行してパラメータをセットアップします。 AFFINITYが"NONE"から"PREFERRED"に変わっただけです。

※AFFINITYが"PREFERRED"のテストは、MQ9.1.0.0(LTS)で実施しています。 テスト時に障害が見つかった為、このバージョンに下記2つの個別修正を適用しています。

APAR IT26964 後述する接続に失敗した接続先のデモートが行われないことへの修正
APAR IT26499 Windows版でコマンドプロンプトの日本語表示が文字化けすることへの対応

チャネル・パラメータ設定スクリプト

>type DefChlPreferred.mqsc:
* default queue manager group
def chl('CG.DEF1.MQI') CHLTYPE(CLNTCONN) CONNAME('16.147.169.58(18551)') CLNTWGHT(3) AFFINITY(PREFERRED) replace
def chl('CG.DEF2.MQI') CHLTYPE(CLNTCONN) CONNAME('16.147.169.58(18552)') CLNTWGHT(5) AFFINITY(PREFERRED) replace
def chl('CG.DEF3.MQI') CHLTYPE(CLNTCONN) CONNAME('16.147.169.198(18551)') CLNTWGHT(0) AFFINITY(PREFERRED) replace
def chl('CG.DEF4.MQI') CHLTYPE(CLNTCONN) CONNAME('16.147.169.198(18552)') CLNTWGHT(2) AFFINITY(PREFERRED) replace
def chl('CG.DEF5.MQI') CHLTYPE(CLNTCONN) CONNAME('16.147.169.198(18553)') CLNTWGHT(0) AFFINITY(PREFERRED) replace

スクリプトの読み込みと変更内容の確認の方法の説明は省略します。

CG.DEF3.MQI(Server2:SampleQM)とCG.DEF5.MQI(Server2:PartialQM)はCLNTWGHT(0)です。 これらは一旦接続異常が発生しても、常にリストの上位にあるはずです。 CLNTWGHTに"0"以外が設定されているキューマネージャーでもっとも重み付けの数値が高いCG.DEF2.MQI(Server1:RemoteQM)が50%で接続異常を発生させて、そのチャネルが接続の優先順位の下位に回されることを確認します。 また、同じマシンで稼働するクライアント・アプリケーションは全て同じリストが使用されることを確認します。


Ex. 9.2.1 AFFINITYが"PREFERRED"の場合のワークロード・バランシング(1)

下記手順で、テストを実施してみます。
まず、CLNTWGHT:0はリストの下位にならないことを確認します。
コマンドのオプションはAFFINITY "NONE"のテスト時と同じです。

  1. (a) 最初に全てのキューマネージャ-を起動しておきます。
  2. (b) クライアントから2つのmqpgfcコマンドを実行します。
  3. (c) Server2:SampleQM(CLNTWGHT:0最上位)に10*2個のスレッド全てが接続されていることを確認します。
  4. (d) Server2:SampleQMを"endmqm -r"で停止します。
  5. (e) Server2:PartialQMに10*2個のスレッド全てが再接続されたことを確認します。
  6. (f) Server2:SampleQMを起動します。
  7. (g) Server2:PartialQMを"endmqm -r"で停止します。
  8. (h) Server2:SampleQMに再度接続されていることを確認します。(CLNTWGHT:0はリストの下位にならない)

※(a) 最初に全てのキューマネージャ-を起動しておきます。
Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Running)

※(b) クライアントからmqpgfcコマンドを実行します。

Application1:
>mqpgfc -qm "*" -q LQ1 -m test -ni 10 -tr -n 100 -i 2000 -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT
[2018/11/21 13:03:36.556 tid=28020] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=30348] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=27528] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=17992] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=29800] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=1408] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=27500] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=28760] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=29640] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:36.556 tid=20244] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:37.041 tid=20244] MQCONNX stop hcon:33554440 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 13:03:37.041 tid=20244] MQCB start hcon:33554440
[2018/11/21 13:03:37.056 tid=20244] MQCB stop hcon:33554440 CompCd=00 ReasonCd=00
[2018/11/21 13:03:37.056 tid=20244] MQOPEN start hcon:33554440 ObjectName:LQ1 Options:0x00000010
[2018/11/21 13:03:37.119 tid=20244] MQOPEN stop hcon:33554440 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 13:03:37.119 tid=20244] 1: message length: 4 put message: test
....

Application2:
>mqpgfc -qm "*" -q LQ1 -m test -ni 10 -tr -n 100 -i 2000 -cf EventHandler -op MQOP_REGISTER MQCBT_EVENT_HANDLER MQCNO_RECONNECT
[2018/11/21 13:03:39.447 tid=29516] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.447 tid=14832] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.447 tid=30676] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.447 tid=28788] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.447 tid=29852] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.447 tid=26964] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.462 tid=30632] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.462 tid=29624] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.462 tid=30104] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.462 tid=28976] MQCONNX start qmgr:* Options:0x01000000
[2018/11/21 13:03:39.619 tid=30676] MQCONNX stop hcon:33554444 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 13:03:39.619 tid=30676] MQCB start hcon:33554444
[2018/11/21 13:03:39.619 tid=30676] MQCB stop hcon:33554444 CompCd=00 ReasonCd=00
[2018/11/21 13:03:39.619 tid=30676] MQOPEN start hcon:33554444 ObjectName:LQ1 Options:0x00000010
[2018/11/21 13:03:39.634 tid=30676] MQOPEN stop hcon:33554444 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 13:03:39.634 tid=30676] 1: message length: 4 put message: test
....

※(c) Server2:SampleQM(CLNTWGHT:0最上位)に10*2個のスレッド全てが接続されていることを確認します。

Server2: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc
/home/okaqm9: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc 29: CONN(414D514353616D706C65514D202020205BF4C54C20003702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
31: CONN(414D514353616D706C65514D202020205BF4C54C20003602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
33: CONN(414D514353616D706C65514D202020205BF4C54C20003502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
37: CONN(414D514353616D706C65514D202020205BF4C54C20003402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
40: CONN(414D514353616D706C65514D202020205BF4C54C20003302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
45: CONN(414D514353616D706C65514D202020205BF4C54C20003202) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
49: CONN(414D514353616D706C65514D202020205BF4C54C20003102) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
53: CONN(414D514353616D706C65514D202020205BF4C54C20003002) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
57: CONN(414D514353616D706C65514D202020205BF4C54C20002F02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
59: CONN(414D514353616D706C65514D202020205BF4C54C20002E02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
63: CONN(414D514353616D706C65514D202020205BF4C54C20002C01) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
65: CONN(414D514353616D706C65514D202020205BF4C54C20002D02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
69: CONN(414D514353616D706C65514D202020205BF4C54C20002B02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
71: CONN(414D514353616D706C65514D202020205BF4C54C20002902) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
73: CONN(414D514353616D706C65514D202020205BF4C54C20002802) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
75: CONN(414D514353616D706C65514D202020205BF4C54C20002702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
77: CONN(414D514353616D706C65514D202020205BF4C54C20002602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
79: CONN(414D514353616D706C65514D202020205BF4C54C20002502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
81: CONN(414D514353616D706C65514D202020205BF4C54C20002402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
88: CONN(414D514353616D706C65514D202020205BF4C54C20002302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

※(d) Server2:SampleQMを"endmqm -r"で停止します。

Server2: endmqm -r SampleQM
Waiting for queue manager 'SampleQM' to end.
Quiesce request accepted. The queue manager will stop when all outstanding work
is complete.

※クライアント・アプリケーションが自動再接続を開始します。
Application1:
[2018/11/21 13:04:03.806 tid=30348] MQPUT start hcon:33554456 Options:0x00000000
[2018/11/21 13:04:03.822 tid=30348] MQPUT stop hcon:33554456 CompCd=00 ReasonCd=00
[2018/11/21 13:04:04.165 tid=20244] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.165 tid=29640] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.181 tid=28020] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.181 tid=30348] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.197 tid=17992] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.212 tid=29800] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.212 tid=28760] EVENT : Reconnecting (Delay: 31ms)
....
[2018/11/21 13:04:04.228 tid=27528] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.228 tid=1408] EVENT : Reconnecting (Delay: 31ms)
[2018/11/21 13:04:04.243 tid=27500] EVENT : Reconnecting (Delay: 31ms)
....
[2018/11/21 13:04:05.197 tid=27500] EVENT : Reconnected
....
[2018/11/21 13:04:06.369 tid=1408] EVENT : Reconnected
....
[2018/11/21 13:04:07.572 tid=27528] EVENT : Reconnected
....
[2018/11/21 13:04:08.759 tid=28760] EVENT : Reconnected
....
[2018/11/21 13:04:10.384 tid=29800] EVENT : Reconnected
....
[2018/11/21 13:04:11.775 tid=17992] EVENT : Reconnected
....
[2018/11/21 13:04:13.103 tid=30348] EVENT : Reconnected
....
[2018/11/21 13:04:14.275 tid=28020] EVENT : Reconnected
....
[2018/11/21 13:04:15.462 tid=29640] EVENT : Reconnected
....
[2018/11/21 13:04:16.665 tid=20244] EVENT : Reconnected
[2018/11/21 13:04:16.697 tid=27528] 18: message length: 4 put message: test
[2018/11/21 13:04:16.697 tid=27528] MQPUT start hcon:33554442 Options:0x00000000
....

Application2:
[2018/11/21 13:04:04.165 tid=30676] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.165 tid=29624] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.165 tid=28788] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.181 tid=28976] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.197 tid=30632] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.197 tid=14832] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.212 tid=29852] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.228 tid=26964] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.228 tid=30104] EVENT : Reconnecting (Delay: 240ms)
[2018/11/21 13:04:04.228 tid=29516] EVENT : Reconnecting (Delay: 240ms)
....
[2018/11/21 13:04:05.634 tid=29516] EVENT : Reconnected
....
[2018/11/21 13:04:06.822 tid=30104] EVENT : Reconnected
....
[2018/11/21 13:04:07.978 tid=26964] EVENT : Reconnected
....
[2018/11/21 13:04:09.165 tid=29852] EVENT : Reconnected
....
[2018/11/21 13:04:10.384 tid=14832] EVENT : Reconnected
....
[2018/11/21 13:04:11.775 tid=30632] EVENT : Reconnected
....
[2018/11/21 13:04:13.103 tid=28976] EVENT : Reconnected
....
[2018/11/21 13:04:14.275 tid=28788] EVENT : Reconnected
....
[2018/11/21 13:04:15.462 tid=29624] EVENT : Reconnected
....
[2018/11/21 13:04:16.665 tid=30676] EVENT : Reconnected
[2018/11/21 13:04:16.790 tid=26964] 17: message length: 4 put message: test
[2018/11/21 13:04:16.790 tid=26964] MQPUT start hcon:33554440 Options:0x00000000
....

※(e) Server2:PartialQMに10*2個のスレッド全てが再接続されたことを確認します。

Server2: mqpcf con -qm PartialQM APPLTAG |grep mqpgfc
1: CONN(414D51435061727469616C514D2020205BF4C57120002702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
3: CONN(414D51435061727469616C514D2020205BF4C57120002602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
5: CONN(414D51435061727469616C514D2020205BF4C57120002502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
7: CONN(414D51435061727469616C514D2020205BF4C57120002402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
14: CONN(414D51435061727469616C514D2020205BF4C57120002302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
44: CONN(414D51435061727469616C514D2020205BF4C57120003602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
46: CONN(414D51435061727469616C514D2020205BF4C57120003502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
50: CONN(414D51435061727469616C514D2020205BF4C57120003402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
53: CONN(414D51435061727469616C514D2020205BF4C57120003302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
58: CONN(414D51435061727469616C514D2020205BF4C57120003202) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
62: CONN(414D51435061727469616C514D2020205BF4C57120003102) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
66: CONN(414D51435061727469616C514D2020205BF4C57120003002) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
70: CONN(414D51435061727469616C514D2020205BF4C57120002F02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
74: CONN(414D51435061727469616C514D2020205BF4C57120002E02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
76: CONN(414D51435061727469616C514D2020205BF4C57120002D02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
78: CONN(414D51435061727469616C514D2020205BF4C57120002C02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
82: CONN(414D51435061727469616C514D2020205BF4C57120002B02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
84: CONN(414D51435061727469616C514D2020205BF4C57120002A02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
86: CONN(414D51435061727469616C514D2020205BF4C57120002902) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
88: CONN(414D51435061727469616C514D2020205BF4C57120002802) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
....

※(f) Server2:SampleQMを起動します。
....
Server2: strmqm SampleQM
IBM MQ queue manager 'SampleQM' starting.
IBM MQ queue manager 'SampleQM' started using V8.0.3.0.

※(g) Server2:PartialQMを"endmqm -r"で停止します。
Server2: endmqm -r PartialQM
Waiting for queue manager 'PartialQM' to end.
Quiesce request accepted. The queue manager will stop when all outstanding work
is complete.

※クライアント・アプリケーションが再度自動再接続を開始します。
Application1:
[2018/11/21 13:05:06.009 tid=17992] EVENT : Reconnecting (Delay: 252ms)
[2018/11/21 13:05:06.009 tid=30348] EVENT : Reconnecting (Delay: 252ms)
[2018/11/21 13:05:06.024 tid=28020] EVENT : Reconnecting (Delay: 252ms)
[2018/11/21 13:05:06.056 tid=29640] EVENT : Reconnecting (Delay: 252ms)
[2018/11/21 13:05:06.056 tid=20244] EVENT : Reconnecting (Delay: 252ms)
[2018/11/21 13:05:06.087 tid=29800] EVENT : Reconnecting (Delay: 86ms)
[2018/11/21 13:05:06.087 tid=28760] EVENT : Reconnecting (Delay: 172ms)
[2018/11/21 13:05:06.087 tid=27528] EVENT : Reconnecting (Delay: 172ms)
[2018/11/21 13:05:06.087 tid=1408] EVENT : Reconnecting (Delay: 148ms)
[2018/11/21 13:05:06.103 tid=27500] EVENT : Reconnecting (Delay: 251ms)
....
[2018/11/21 13:05:07.712 tid=29800] EVENT : Reconnected
[2018/11/21 13:05:07.821 tid=20244] EVENT : Reconnected
[2018/11/21 13:05:07.884 tid=29640] EVENT : Reconnected
[2018/11/21 13:05:07.962 tid=28020] EVENT : Reconnected
....
[2018/11/21 13:05:08.384 tid=30348] EVENT : Reconnected
[2018/11/21 13:05:08.446 tid=17992] EVENT : Reconnected
....
[2018/11/21 13:05:08.509 tid=28760] EVENT : Reconnected
[2018/11/21 13:05:08.587 tid=27528] EVENT : Reconnected
....
[2018/11/21 13:05:08.696 tid=1408] EVENT : Reconnected
[2018/11/21 13:05:08.899 tid=27500] EVENT : Reconnected
[2018/11/21 13:05:09.165 tid=17992] MQPUT stop hcon:33554450 CompCd=00 ReasonCd=00
[2018/11/21 13:05:09.181 tid=28760] MQPUT stop hcon:33554448 CompCd=00 ReasonCd=00
....

Application2:
[2018/11/21 13:05:06.009 tid=29624] EVENT : Reconnecting (Delay: 177ms)
[2018/11/21 13:05:06.009 tid=30676] EVENT : Reconnecting (Delay: 177ms)
[2018/11/21 13:05:06.024 tid=28788] EVENT : Reconnecting (Delay: 33ms)
[2018/11/21 13:05:06.056 tid=28976] EVENT : Reconnecting (Delay: 142ms)
....
[2018/11/21 13:05:07.712 tid=28788] EVENT : Reconnected
[2018/11/21 13:05:07.728 tid=29516] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.728 tid=30104] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.728 tid=26964] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.743 tid=29852] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.743 tid=14832] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.743 tid=30632] EVENT : Reconnecting (Delay: 0ms)
[2018/11/21 13:05:07.853 tid=30676] EVENT : Reconnected
....
[2018/11/21 13:05:07.962 tid=29624] EVENT : Reconnected
....
[2018/11/21 13:05:08.415 tid=28976] EVENT : Reconnected
[2018/11/21 13:05:08.493 tid=30632] EVENT : Reconnected
[2018/11/21 13:05:08.571 tid=14832] EVENT : Reconnected
....
[2018/11/21 13:05:08.681 tid=29852] EVENT : Reconnected
[2018/11/21 13:05:08.853 tid=26964] EVENT : Reconnected
[2018/11/21 13:05:08.946 tid=30104] EVENT : Reconnected
[2018/11/21 13:05:09.181 tid=29516] EVENT : Reconnected
[2018/11/21 13:05:09.306 tid=30632] MQPUT stop hcon:33554438 CompCd=00 ReasonCd=00
[2018/11/21 13:05:09.337 tid=28976] MQPUT stop hcon:33554456 CompCd=00 ReasonCd=00
....

※(h) Server2:SampleQMに再度接続されていることを確認します。(CLNTWGHT:0はリストの下位にならない)
Server2: mqpcf con -qm SampleQM APPLTAG |grep mqpgfc
3: CONN(414D514353616D706C65514D202020205BF4D96A20002B02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
5: CONN(414D514353616D706C65514D202020205BF4D96A20002902) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
7: CONN(414D514353616D706C65514D202020205BF4D96A20002802) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
9: CONN(414D514353616D706C65514D202020205BF4D96A20002702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
11: CONN(414D514353616D706C65514D202020205BF4D96A20002602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
13: CONN(414D514353616D706C65514D202020205BF4D96A20002502) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
15: CONN(414D514353616D706C65514D202020205BF4D96A20002402) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
22: CONN(414D514353616D706C65514D202020205BF4D96A20002302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
52: CONN(414D514353616D706C65514D202020205BF4D96A20003702) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
54: CONN(414D514353616D706C65514D202020205BF4D96A20003501) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
56: CONN(414D514353616D706C65514D202020205BF4D96A20003602) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
61: CONN(414D514353616D706C65514D202020205BF4D96A20003302) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
63: CONN(414D514353616D706C65514D202020205BF4D96A20003403) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
68: CONN(414D514353616D706C65514D202020205BF4D96A20003101) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
70: CONN(414D514353616D706C65514D202020205BF4D96A20003202) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
78: CONN(414D514353616D706C65514D202020205BF4D96A20002F02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
80: CONN(414D514353616D706C65514D202020205BF4D96A20003003) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
84: CONN(414D514353616D706C65514D202020205BF4D96A20002E02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
86: CONN(414D514353616D706C65514D202020205BF4D96A20002C01) TYPE(ALL) APPLTAG(....\mqpgfc.exe)
88: CONN(414D514353616D706C65514D202020205BF4D96A20002D02) TYPE(ALL) APPLTAG(....\mqpgfc.exe)

fig 9.4


Ex. 9.2.2 AFFINITYが"PREFERRED"の場合のワークロード・バランシング(2)

下記手順で、テストを実施します。
CLNTWGHT:0以外がリストの下位になることを確認します。

  1. 1.CLNTWGHTが"0"以外のキューマネージャ-(Server1:SampleQM, Server1:RemoteQM, Server2:RemoteQM)のみを起動しておきます。
  2. 2.クライアントからmqpgfcコマンドを実行します。
  3. 3.最初の接続がCLNTWGHTに最も高い値"5"が設定されているServer1:RemoteQMに対して行われたことを確認します。
  4. 4.Server1:RemoteQMを停止します。
  5. 5.2回目の接続が次に高いCLNTWGHTを持つServer1:SampleQMに対して行われたことを確認します。
  6. 6.Server1:RemoteQMを起動します。
  7. 7.3回目の接続がやはり2番目に高いCLNTWGHTを持つServer1:SampleQMに対して行われたことを確認します。(Server1:RemoteQMがデモートされた)
  8. 8・Server1:SampleQMを停止します。
  9. 9.4回目の接続がCLNTWGHTに最も低い値"2"が設定されているServer2:RemoteQMに対して行われたことを確認します。(Server1:SampleQMもデモートされた)

実行するコマンドは下記です。 MQCONN...MQOPEN...MQPUT...MQCLOSE...MQDISCまでを10回繰り返します。 MQCONN呼び出し前に一旦停止します。

mqpgfc -qm "*" -q LQ1 -m test -c 5 -tr -s MQCONN

*オプションの説明
-tr: 簡易APIトレース
-c: MQCONN()からMQDISC()までを指定された回数繰り返す。
-s: 指定されたMQI関数の直前で停止して入力待ちの状態にする。

※1.CLNTWGHTが"0"以外のキューマネージャ-(Server1:SampleQM, Server1:RemoteQM, Server2:RemoteQM)のみを起動しておきます。
Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Ended normally)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Ended normally)

※2.クライアントからmqpgfcコマンドを実行します。
>mqpgfc -qm "*" -q LQ1 -m test -c 5 -tr -s MQCONN
stop before calling MQCONN().
Hit Any Key!!!
[2018/11/21 14:00:28.861] MQCONN start qmgr:*
[2018/11/21 14:00:31.205] MQCONN stop hcon:33554438 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 14:00:31.220] MQOPEN start hcon:33554438 ObjectName:LQ1 Options:0x00000010
[2018/11/21 14:00:31.220] MQOPEN stop hcon:33554438 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 14:00:31.220] 1: message length: 4 put message: test
[2018/11/21 14:00:31.236] MQPUT start hcon:33554438 Options:0x00000000
[2018/11/21 14:00:31.251] MQPUT stop hcon:33554438 CompCd=00 ReasonCd=00
[2018/11/21 14:00:31.251] MQCLOSE start hcon:33554438 Options:0x00000000
[2018/11/21 14:00:31.267] MQCLOSE stop hcon:33554438 CompCd=00 ReasonCd=00
[2018/11/21 14:00:31.283] MQDISC start hcon:33554438
[2018/11/21 14:00:31.298] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
stop before calling MQCONN().
Hit Any Key!!!

※3.最初の接続がCLNTWGHTに最も高い値"5"が設定されているServer1:RemoteQMに対して行われたことを確認します。
Server1: mqpgf -qm RemoteQM -q LQ1 -r
[18/11/21 14:01:44.283964] 1: message length: 4 get message : test
no message available : LQ1 CompCd=02 ReasonCd=2033

※4.Server1:RemoteQMを停止します。
$ endmqm RemoteQM
Quiesce request accepted. The queue manager will stop when all outstanding work is complete.

Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Ended normally)

※5.2回目の接続が次に高いCLNTWGHTを持つServer1:SampleQMに対して行われたことを確認します。
[2018/11/21 14:07:50.509] MQCONN start qmgr:*
[2018/11/21 14:08:02.509] MQCONN stop hcon:33554440 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 14:08:02.509] MQOPEN start hcon:33554440 ObjectName:LQ1 Options:0x00000010
[2018/11/21 14:08:02.509] MQOPEN stop hcon:33554440 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 14:08:02.509] 1: message length: 4 put message: test
[2018/11/21 14:08:02.509] MQPUT start hcon:33554440 Options:0x00000000
[2018/11/21 14:08:02.525] MQPUT stop hcon:33554440 CompCd=00 ReasonCd=00
[2018/11/21 14:08:02.525] MQCLOSE start hcon:33554440 Options:0x00000000
[2018/11/21 14:08:02.540] MQCLOSE stop hcon:33554440 CompCd=00 ReasonCd=00
[2018/11/21 14:08:02.540] MQDISC start hcon:33554440
[2018/11/21 14:08:02.556] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
stop before calling MQCONN().
Hit Any Key!!!

Server1: mqpgf -qm SampleQM -q LQ1 -r
[18/11/21 14:08:25.168192] 1: message length: 4 get message : test
no message available : LQ1 CompCd=02 ReasonCd=2033

※6.Server1:RemoteQMを起動します。
Server1: strmqm RemoteQM
IBM MQ queue manager 'RemoteQM' starting.
IBM MQ queue manager 'RemoteQM' started using V8.0.3.0.

Server1: dspmq
QMNAME(SampleQM) STATUS(Running)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Ended normally)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Ended normally)

※7.3回目の接続がやはり2番目に高いCLNTWGHTを持つServer1:SampleQMに対して行われたことを確認します。(Server1:RemoteQMがデモートされた)
[2018/11/21 14:14:19.405] MQCONN start qmgr:*
[2018/11/21 14:14:21.780] MQCONN stop hcon:33554442 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 14:14:21.780] MQOPEN start hcon:33554442 ObjectName:LQ1 Options:0x00000010
[2018/11/21 14:14:21.780] MQOPEN stop hcon:33554442 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 14:14:21.780] 1: message length: 4 put message: test
[2018/11/21 14:14:21.795] MQPUT start hcon:33554442 Options:0x00000000
[2018/11/21 14:14:21.795] MQPUT stop hcon:33554442 CompCd=00 ReasonCd=00
[2018/11/21 14:14:21.795] MQCLOSE start hcon:33554442 Options:0x00000000
[2018/11/21 14:14:21.811] MQCLOSE stop hcon:33554442 CompCd=00 ReasonCd=00
[2018/11/21 14:14:21.826] MQDISC start hcon:33554442
[2018/11/21 14:14:21.826] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
stop before calling MQCONN().
Hit Any Key!!!

Server1: mqpgf -qm SampleQM -q LQ1 -r
[18/11/21 14:14:38.254752] 1: message length: 4 get message : test
no message available : LQ1 CompCd=02 ReasonCd=2033

※8・Server1:SampleQMを停止します。
Server1: endmqm SampleQM
Quiesce request accepted. The queue manager will stop when all outstanding work is complete.
Server1: dspmq
QMNAME(SampleQM) STATUS(Ended normally)
QMNAME(RemoteQM) STATUS(Running)

Server2: dspmq
QMNAME(SampleQM) STATUS(Ended normally)
QMNAME(RemoteQM) STATUS(Running)
QMNAME(PartialQM) STATUS(Ended normally)

※9.4回目の接続がCLNTWGHTに最も低い値"2"が設定されているServer2:RemoteQMに対して行われたことを確認します。(Server1:SampleQMもデモートされた)
[2018/11/21 14:18:37.272] MQCONN start qmgr:*
[2018/11/21 14:18:49.585] MQCONN stop hcon:33554444 qmgr:* CompCd=00 ReasonCd=00
[2018/11/21 14:18:49.585] MQOPEN start hcon:33554444 ObjectName:LQ1 Options:0x00000010
[2018/11/21 14:18:49.600] MQOPEN stop hcon:33554444 ObjectName:LQ1 CompCd=00 ReasonCd=00
[2018/11/21 14:18:49.616] 1: message length: 4 put message: test
[2018/11/21 14:18:49.616] MQPUT start hcon:33554444 Options:0x00000000
[2018/11/21 14:18:49.647] MQPUT stop hcon:33554444 CompCd=00 ReasonCd=00
[2018/11/21 14:18:49.663] MQCLOSE start hcon:33554444 Options:0x00000000
[2018/11/21 14:18:49.678] MQCLOSE stop hcon:33554444 CompCd=00 ReasonCd=00
[2018/11/21 14:18:49.678] MQDISC start hcon:33554444
[2018/11/21 14:18:49.710] MQDISC stop hcon:-1 CompCd=00 ReasonCd=00
stop before calling MQCONN().
Hit Any Key!!!

Server2: mqpgf -qm RemoteQM -q LQ1 -r
[18/11/21 14:18:52.337385] 1: message length: 4 get message : test
no message available : LQ1 CompCd=02 ReasonCd=2033

接続のデモートは、アプリケーションを再起動すると解消されます。 また、デモートの動作は平行稼働している他のアプリケーションには影響しません。

fig 9.5


接続リストの生成のされ方について

この「クライアント・チャネルのワークロード・バランシングの機能」の説明の最初でも若干触れましたが、接続リストの作成順は、必ずしもCLNTWGHTの順になるわけではありません。 CLNTWGHTの値の比にしたがって、上位にリストされる"確率"が高くなります。 その為、同じチャネル定義テーブルを使用するクライアント・マシン間でも作成されるリストが相違することとなり、ワークロード・バランスが可能になります。 また、一旦リストが作成されると、CLNTWGHTのパラメータが変更されるなどが無い限りは、そのマシンで固定されます。 接続リストはユーザーが参照することはできません。 最後にチャネル定義テーブルを削除/再作成しても、同じパラメータの場合はリストは再作成されないことにご注意ください。(今回のテストの結果)

このページの先頭へ

このページの先頭へ