English

実践習得 IBM MQの基本

パフォーマンス測定(1)トポロジー

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

これから数回に渡って、IBM MQのパフォーマンス測定の実施方法についてご説明します。
システムの検討/設計/開発のいくつかの段階で、それぞれの段階での要求に応じたパフォーマンスの評価が求められる場合があります。 その結果にしたがってシステム構成やアプリケーションの設計が再検討されます。 IBMからはいくつかのプラットフォームとワークロード・トポロジー(テスト構成)によるパフォーマンス・レポート「IBM MQ Family - Performance Reports」が公開されています。 これらを参照することによって予測を立てることも有用な作業ですが、可能であれば実機で検証したいという要求が発生することも多いはずです。 ここでは、mqpgf/mqpgfcを使用して、IBMで紹介されているいくつかのワークロード・トポロジーと、独自に追加したMQクラスター構成(IBMのパフォーマンス・レポートにはMQクラスター構成がありません)でパフォーマンス・テストを実施する例をご紹介します。

パフォーマンス・テストは2つのMQアプリケーション間で、リクエスト、リプライ形式でメッセージを指定件数送受信し、そのRound Trips/secを計測します。 リクエスター側、リプライ側ともMQIプログラムmqpgf(c)が使用されます。 もしも、mqpgf(c)以外のプログラムでテストを実施したい場合は、提供されるサンプル・スクリプトのお客様自身によるカスタマイズが必要になります。 テスト・ケースは、ローカル接続、サーバー間接続、クライアント接続、クラスター構成を網羅しています。 各テストで、送信データファイル、送信メッセージ長、送受信件数、アプリケーションの平行起動数 - プロセス数/スレッド数、持続/非持続メッセージなどを指定/選択できます。


パフォーマンス・テストを実施する上での注意事項


ダウンロード・モジュール

このテストで利用するテスト・スクリプトはWindows(PowerShell)、Linux(bash)、HPE NonStop(ksh)で検証済みで、ダウンロード・モジュールに含まれています。ただし、HPE NonStop版のmqpgf(c)/mqpcf(c)自体はダウンロード・モジュールには含まれていませんのでご注意ください。
LinuxとHPE NonStopのスクリプトは共通で、#!/bin/shが指定されています。 通常/bin/shはLinuxではbash、Unixではkshにリンクされていることが多く、bash/kshの両方で稼働確認済みです。 もし、検証する環境の/bin/shがbashまたはksh以外のシェルにリンクされている場合は、スクリプトの先頭をbashまたはkshを指すように変更してください。(例:#!/bin/bashや#!/bin/ksh)


テストに使用するデータ

(重要)尚、送受信するデータをファイルから読み込む機能はmqpgf(c)のフル・サポート版でのみ実施可能で、通常版では利用できません。 ファイルから読み込まない場合は引数に指定する「Workload名」がメッセージとして使用され、ダミー・データ(0x00)が別に指定する「メッセージ長」に達するまで後続に付加されます。 データ変換や圧縮、SSL/TLSを使用する場合等にこのようなデータを使用すると、実データを使用した場合とまったく異なるテスト結果になる可能性があります。 テストを実施する際には十分に注意してください。


スレッドの使用

アプリケーションの平行稼働に一部のテストではスレッドが使用できません。 また、特定のテストでのアプリケーションの平行起動の為に、提供される構成ファイル内では最大5つのキュー、チャネルが事前に定義されています。 これを超える起動数の指定が必要な場合は、構成ファイルにチャネル、キューの定義を追加する必要があります。


パフォーマンス・テストの構成

サンプルのスクリプトの全てを実行するには、複数のSDR/RCVRおよびCLUSSDR/CLUSRCVRチャネルで接続された2つのキューマネージャーと1つのMQクライアント・マシンを構成することが必要です。 これらを自動的に構成するスクリプトも提供されます。 提供されるテスト・スクリプトやキューマネージャー作成のスクリプトはとてもシンプルなので要件に合わせて容易にカスタマイズして使用することが可能です。 各マシンはWindows/Linux/HPE NonStopの任意の組み合わせで使用可能です。

fig 16.1

それぞれのチャネルをSSL/TLSチャネルとして構成することも可能です。

fig 16.2


ワークロード・トポロジー

ここで対象とするワークロード(テスト・ケース)は下表の通りです。 ローカル接続、クライアント接続、サーバー間接続、そして独自に追加したクラスター構成の4種類です。

これらの全てのケースでメッセージは下記の流れで送受信されます。

  1. ・ソース側からリクエスト・メッセージを送信
  2. ・レスポンス側でリクエスト・メッセージを受信
  3. ・レスポンス側から応答メッセージを送信
  4. ・ソース側で応答メッセージを受信

全ケースでメッセージはMsgIdとCorrelIdによる要求メッセージと応答メッセージの紐づけの方法が使用されています。 要求側は要求メッセージのMsgIdと同じCorrelIdをもつメッセージのみを待ちます。 応答側は要求メッセージのMsgIdを応答メッセージのCorrelIdにコピーします。

ソース側で毎秒何件の送受信できたか(Round Trips/sec)が測定結果として最後に表示されます。


RR-1 ローカル接続

RR-1はローカル・キューマネージャーにリクエスターとリスポンダーの両方がバインド・モードで接続します。 Requester/Resonderからのそれぞれのキューマネージャーへの接続をスレッドにするスクリプト(mqpgfの -niオプション)と別々のプロセスで起動するスクリプト(接続毎にmqpgfを起動)の2種類が用意されています。

fig 16.3


RR-2 クライアント接続

RR-2はリクエスターがクライアント・モード、リスポンダーがバインド・モードでキューマネージャーに接続します。 Requester/Resonder双方について、それぞれのキューマネージャーへの接続をスレッドにするスクリプト(mqpgf(c)の -niオプション)と別々のプロセスで起動するスクリプト(接続毎にmqpgf(c)を起動)の2種類が用意されています。 任意の組み合わせで実施できます。

fig 16.4


RR-5 サーバー間接続

RR-5はリクエスター、リスポンダーがSNDR/RCVRチャネルで接続された別々のローカル・キューマネージャーにそれぞれ接続します。 接続をスレッド化するスクリプトは提供されません。 リクエスター、リスポンダーとも、それぞれのキューマネージャーへの接続は接続毎に別々のプロセスで起動され、チャネルもキューも別々のものが使用されます。

fig 16.5


PL-1 MQクラスター

PL-1はリクエスター、リスポンダーがクラスター内の別々のキューマネージャーにそれぞれ接続します。 接続をスレッド化するスクリプトは提供されません。 リクエスター、リスポンダーとも、それぞれのキューマネージャーへの接続は接続毎に別々のプロセスで起動され、キューも別々のものが使用されます。

fig 16.6


パフォーマンス・テストの為のファイル構成と配置

パフォーマンス・テストの為に提供されるファイルを格納するディレクトリの一覧を示します。 TLSチャネルを使用する場合と使用しない場合のパフォーマンス比較が容易になる様に、別々に構成ファイルを提供しています。 ディレクトリ名は変更して構いません。

Directory Type Default QMGR Name
script_s ソース側キューマネージャー PLQMS
script_s_TLS ソース側キューマネージャー(TLSチャネル使用) PLQMST
script_r レスポンス側キューマネージャー PLQMR
script_r_TLS レスポンス側キューマネージャー(TLSチャネル使用) PLQMST
script_c クライアント側 (PLQMSに接続)
script_c_TLS クライアント側(TLSチャネル使用) (PLQMSTに接続)

下記は提供ファイルの一覧です。 ファイル名が同一のものは、拡張子が".ini"や".bat"のものを除き同じものです。 クライアント・マシン上に配置されるスクリプトは全てクライアント接続で実行されます。 同時に必要なサブディレクトリも示します。 各サブディレクトリは名前の変更が可能です。

Machine Windows Linux/NonStop Description
Source QM cpfqmgr.ps1 cpfqmgr.sh QMGR作成スクリプト
dir:script_s(_TLS) PLQMS(T).mqsc.src PLQMS(T).mqsc.src QMGR構成ファイル
PLQMS(T).ini PLQMS(T).ini QMGR構成パラメータ
runpfmts.bat runpfmts.ini テスト実行パラメータ
runpfmts.ps1 runpfmts.sh テストリスト実行スクリプト
RR_1_s.ps1 RR_1_s.sh RR-1(プロセス)実施
RR_1_s_t.ps1 RR_1_s_t.sh RR-1(スレッド)実施
RR_2_s.ps1 RR_2_s.sh RR-2(プロセス)実施
RR_2_s_t.ps1 RR_2_s_t.sh RR-2(スレッド)実施
RR_5_s.ps1 RR_5_s.sh RR-5実施
PL_1_s.ps1 PL_1_s.sh PL-1実施
ckchl.ps1 ckchl.sh チャネルステータス確認
stachl.ps1 stachl.sh チャネル開始
ckque.ps1 ckque.sh キューステータス確認
clrque.ps1 clrque.sh キュークリア
dltmsg.ps1 dltmsg.sh キュー上のメッセージ削除
lib/libpfmts.ps1 lib/libpfmts.sh 共通関数ライブラリ
data/ data/ 送信データファイル
list/ list/ テスト実行リスト
logs/ logs/ 実行ログ
out/ out/ テストリスト実行結果ファイル
 
Responder QM cpfqmgr.ps1 cpfqmgr.sh QMGR作成スクリプト
dir:script_r(_TLS) PLQMR(T).mqsc.src PLQMR(T).mqsc.src QMGR構成ファイル
PLQMR(T).ini PLQMR(T).ini QMGR構成パラメータ
runpfmts.bat runpfmts.ini テスト実行パラメータ
runpfmts.ps1 runpfmts.sh テストリスト実行スクリプト
RR_5_r.ps1 RR_5_r.sh RR-5実施
PL_1_r.ps1 PL_1_r.sh PL-1実施
ckchl.ps1 ckchl.sh チャネルステータス確認
stachl.ps1 stachl.sh チャネル開始
ckque.ps1 ckque.sh キューステータス確認
clrque.ps1 clrque.sh キュークリア
dltmsg.ps1 dltmsg.sh キュー上のメッセージ削除
lib/libpfmts.ps1 lib/libpfmts.sh 共通関数ライブラリ
data/ data/ 送信データファイル
list/ list/ テスト実行リスト
logs/ logs/ 実行ログ
out/ out/ テストリスト実行結果ファイル
 
MQ Client runpfmts.bat runpfmts.ini テスト実行パラメータ
dir:script_c(_TLS) runpfmts.ps1 runpfmts.sh テストリスト実行スクリプト
RR_2_c.ps1 RR_2_c.sh RR-2(プロセス)実施
RR_2_c_t.ps1 RR_2_c_t.sh RR-2(スレッド)実施
ckchl_c.ps1 ckchl_c.sh チャネルステータス確認
ckque_c.ps1 ckque_c.sh キューステータス確認
clrque_c.ps1 clrque_c.sh キュークリア
dltmsg_c.ps1 dltmsg_c.sh キュー上のメッセージ削除
lib/libpfmts.ps1 lib/libpfmts.sh 共通関数ライブラリ
data/ data/ 送信データファイル
list/ list/ テスト実行リスト
logs/ logs/ 実行ログ
out/ out/ テストリスト実行結果ファイル

※mqpgf(c)/mqpcf(c)をPATHで参照可能にしてください。


ソース/レスポンス・キューマネージャーの作成

作成に使用するファイルは、それぞれソース側はcpfqmgr.ps1/cpfqmgr.sh、PLQMS(T).mqsc.src、PLQMS(T).ini、レスポンス側はcpfqmgr.ps1/cpfqmgr.sh、PLQMR(T).mqsc.src、PLQMR(T).iniです。 cpfqmgr.ps1/cpfqmgr.shはソース側、レスポンス側で共通です。 ファイル名の"PLQMS(T)"、"PLQMR(T)"は作成するキューマネージャー名と一致している必要があり、変更可能です。 他の名前のキューマネージャーを使用する場合は、PLQMS(T).mqsc.srcとPLQMS(T).iniのファイル名も変更します。(<QMGR>.mqsc.src,<QMGR>.ini)


パラメーターファイルの編集

<QMGR>.iniファイル(デフォルト:PLQMS(R).ini)内のパラメータを編集します。 このパラメターは<QMGR>.mqsc.srcファイル(デフォルト:PLQM(S/R).mqsc.src)内の同名のプレースフォルダー内の値を変更する為に使用されます。 多くの場合、ソース側もレスポンス側も内容は同じになりますが、ネットワークの構成によってはCONNAME_(S/R)などに異なる値を設定する必要があります。 環境に合わせて適切な値に設定してください。 SSL/TLSチャネルで評価する場合は、CERTLABL、SSLCIPH、SSLKEYRにも適切な値を指定します。 MCAUSERとSSLKEYRは指定する値をシングルクォートで囲みます。 SSLKEYRはデフォルトではキューマネージャーのディレクトリ下になる為、キューマネージャーを削除するとSSLキーリポジトリも削除されてしまいます。 その為、他のディレクトリを使用することをお勧めします。 GSkit(Windows/Linux/Unix)とOpenssl(HPE NonStop)では指定方法が異なりますので、ご注意ください。 詳細は製品マニュアルをご確認ください。

下記はTLSチャネルを使用する場合の<QMGR>.iniファイルの例です。

#--------------------------------------------------------- # # MQSC parameter file # # History # # Date Create/Update Description # 2022.02.21 Pulsar Integration Inc. Initial Version # #--------------------------------------------------------- #place holder, value LISTENER_PORT_S,1414 LISTENER_PORT_R,1415 CLUSTER_NAME1,PLCT01 CONNAME_S,localhost CONNAME_R,localhost QMNAME_S,PLQMST QMNAME_R,PLQMRT MCAUSER,'mqm' CERTLABL,PLQMSA SSLCIPH,TLS_RSA_WITH_AES_256_CBC_SHA256 ※Gskitの場合は、SSLKEYRにキーリポジトリファイル名の拡張子を除いた部分までを指定 SSLKEYR,'C:\Users\pulsar\serverssl\PLQMST\key' ※Windowsの例 SSLKEYR,'/home/pulsar/serverssl/PLQMST/key' ※Linuxの例 ※Opensslの場合は、SSLKEYRにキーリポジトリのディレクトリ部分までを指定 SSLKEYR,'/home/pulsar/serverssl/PLQMST' ※HPE NonStopの例

パラメーター名 デフォルト値 Description
LISTENER_PORT_S 1414 ソース側リスナーポート
LISTENER_PORT_R 1415 レスポンス側リスナーポート
CLUSTER_NAME1 PLC01/PLCT01 クラスター名(Non-TLS/TLS Channel)
CONNAME_S localhost ソース側QMGRへのIPアドレスまたはホスト名(CLUSRCVRに設定)
CONNAME_R localhost レスポンス側QMGRへのIPアドレスまたはホスト名
QMNAME_S PLQMS(T) ソース側QMGR名
QMNAME_R PLQMR(T) レスポンス側QMGR名
MCAUSER ' ' MCAユーザー
CERTLABL PLQMSA 証明書ラベル(TLS Channel)
SSLCIPH TLS_RSA_WITH_AES_ CipherSpec(TLS Channel)
256_CBC_SHA256
SSLKEYR ' ' SSL/TLSキーリポジトリ(TLS Channel)

これらのパラメータはそれぞれ<QMGR>.mqsc.srcファイル内のプレースフォルダーを書き換えます。
注意点としては、CONNAME_S/Rに設定する値は、ip-addrかHost名のみで、ポートを含まない点です。 チャネルのCONNAMEパラメータに設定するポートはLISTENER_PORT_(S/R)が使用されます。

※パラメータファイルのパラメータと値の組み合わせは自由に追加することができます。 <QMGR>.mqsc.src内に、追加したパラメータを"<"と">"で囲ったプレースフォルダーを追加します。

下記はTLSチャネルを使用する場合の<QMGR>.mqsc.srcファイルの例です。

<QMGR>.mqsc.src: *********************************************************** * * MQSC command scripts for TLS for source QMGR * * History * * Date Create/Update Description * 2022.02.22 Pulsar Integration Inc. Initial Version * *********************************************************** ********************* * Listener ********************* def listener(listener) trptype(tcp) port(<LISTENER_PORT_S>) control(qmgr) replace sta listener(listener) ********************* * Queue manager ********************* *============================= * DESABLE SEQURITY *============================= alter qmgr chlauth(disabled) connauth(' ') certlabl(<CERTLABL>) sslkeyr(<SSLKEYR>) ********************* * Channels ********************* *============================= * SERVER CONNECTION CHANNELS *============================= def chl(PLQMS.MQICHL) chltype(svrconn) mcauser(<MCAUSER') certlabl(<CERTLABL>) + sslciph(<SSLCIPH>) replace *======================== * SDR and RCVR channels *======================== def ql(PLQMR) usage(xmitq) replace def chl(PLQMS.PLQMR) chltype(sdr) conname('<CONNAME_R>(<LLISTENER_PORT_R>') + xmitq(PLQMR) discint(0) certlabl(<CERTLABL>) sslciph() replace def chl(PLQMR.PLQMS) chltype(rcvr) certlabl(<CERTLABL>) sslciph() replace def ql(PLQMR2) usage(xmitq) replace def chl(PLQMS.PLQMR.2) chltype(sdr) conname('<CONNAME_R>(<LISTENER_PORT_R>)') + xmitq(PLQMR2) discint(0) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def chl(PLQMR.PLQMS.2) chltype(rcvr) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def ql(PLQMR3) usage(xmitq) replace def chl(PLQMS.PLQMR.3) chltype(sdr) conname('<CONNAME_R>(<LISTENER_PORT_R>)') + xmitq(PLQMR3) discint(0) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def chl(PLQMR.PLQMS.3) chltype(rcvr) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def ql(PLQMR4) usage(xmitq) replace def chl(PLQMS.PLQMR.4) chltype(sdr) conname('<CONNAME_R>(<LISTENER_PORT_R>)') + xmitq(PLQMR4) discint(0) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def chl(PLQMR.PLQMS.4) chltype(rcvr) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def ql(PLQMR5) usage(xmitq) replace def chl(PLQMS.PLQMR.5) chltype(sdr) conname('<CONNAME_R>(<LISTENER_PORT_R>)') + xmitq(PLQMR5) discint(0) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def chl(PLQMR.PLQMS.5) chltype(rcvr) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace *************************** * Set up full repository *************************** *================================ * Cluster name *================================ alter qmgr repos(<CLUSTER_NAME1>) *================================ * CLUSSDR and CLUSRCVR channels *================================ def chl(TO.PLQMS) chltype(clusrcvr) conname('<CONNAME_S>(<LISTENER_PORT_S>)') + cluster(<CLUSTER_NAME1>) discint(0) certlabl(<CERTLABL>) sslciph(<SSLCIPH>) replace def chl(TO.PLQMR) chltype(clussdr) conname('<CONNAME_R>(<LISTENER_PORT_R>)') + cluster(<CLUSTER_NAME1>) discint(0) sslciph(<SSLCIPH>) replace *************************** * Queues *************************** *================================ * Local queues *================================ def ql(REQ1) replace def ql(REP1) replace def ql(REP2) replace def ql(REP3) replace def ql(REP4) replace def ql(REP5) replace *================================ * Cluster queues *================================ def ql(CQS1) cluster(<CLUSTER_NAME1>) replace def ql(CQS2) cluster(<CLUSTER_NAME1>) replace def ql(CQS3) cluster(<CLUSTER_NAME1>) replace def ql(CQS4) cluster(<CLUSTER_NAME1>) replace def ql(CQS5) cluster(<CLUSTER_NAME1>) replace *======================================== * Local definitions of remote queues *======================================== def qr(REQR1) rname(REQ1) rqmname(<QMNAME_R>) XMITQ(PLQMR) replace def qr(REQR2) rname(REQ2) rqmname(<QMNAME_R>) XMITQ(PLQMR2) replace def qr(REQR3) rname(REQ3) rqmname(<QMNAME_R>) XMITQ(PLQMR3) replace def qr(REQR4) rname(REQ4) rqmname(<QMNAME_R>) XMITQ(PLQMR4) replace def qr(REQR5) rname(REQ5) rqmname(<QMNAME_R>) XMITQ(PLQMR5) replace ******************************* * Enabling TLS configuration ******************************* refresh security type(ssl) *************************** * exit runmqsc *************************** *end


キューマネージャー作成スクリプトの実行

スクリプトの実行はMQ管理ユーザーで行います。 実行前にMQ環境を読み込んでおいてください。

ソース側、レスポンス側ともオペレーションは同じです。 Windowsの場合はコマンド・プロンプトから実行し、コマンド・プロンプトは管理者として起動する必要がある場合があります。
コマンドの実行方法は下記です。 この場合は、自動的に<QMGR>.mqsc.srcファイルが読み込まれます。

Windowsの場合: Cmd> PowerShell -File ./cpfqmgr.ps1 -m <QMGR> Linux/HPE NonStopの場合: $ ./cpfqmgr.sh <QMGR>

*オプションの説明
-mまたは第一引数: キューマネージャー名

デフォルト以外のネーミングのスクリプト・ファイルを指定したい場合は下記の様にします。

スクリプト・ファイルとして<QMGR>.mqsc.src.testを指定する例: Windowsの場合: Cmd> PowerShell -File ./cpfqmgr.ps1 -m <QMGR> -f <QMGR>.mqsc.src.test Linux/HPE NonStopの場合: $ ./cpfqmgr.sh <QMGR> <QMGR>.mqsc.src.test

*オプションの説明
-f: キューマネージャー作成スクリプト・ファイル名

下記は、Linuxのレスポンス側のTLSチャネルを使用する場合のスクリプトを実行した例ですが、ソース側、Windows/HPE NonStopの場合でも全て同様です。

$ ./cpfqmgr.sh PLQMRT remove PLQMRT.mqsc FOLDER: <LISTENER_PORT_S> VALUE: 1414 FOLDER: <LISTENER_PORT_R> VALUE: 1415 FOLDER: <CLUSTER_NAME1> VALUE: PLCT01 FOLDER: <CONNAME_S> VALUE: 111.111.111.111 FOLDER: <CONNAME_R> VALUE: 999.999.999.999 FOLDER: <QMNAME_S> VALUE: PLQMST FOLDER: <QMNAME_R> VALUE: PLQMRT FOLDER: <MCAUSER> VALUE: 'mqm' FOLDER: <CERTLABL> VALUE: PLQMRA FOLDER: <SSLCIPH> VALUE: TLS_RSA_WITH_AES_256_CBC_SHA256 FOLDER: <SSLKEYR> VALUE: '/home/mqm/serverssl/PLQMR/key' Command: crtmqm PLQMRT Are you sure you want to run above command? [y/n]:

最初に<QMGR>.iniを読み込んだ内容が出力されます。 問題なければ"y"を入力します。

IBM MQ queue manager 'PLQMRT' created. Directory '/var/mqm/qmgrs/PLQMRT' created. The queue manager is associated with installation 'Installation2'. Creating or replacing default objects for queue manager 'PLQMRT'. Default objects statistics : 83 created. 0 replaced. 0 failed. Completing setup. Setup completed.

キューマネージャーが作成されると、続いてキューマネージャーが開始されます。

Starting Qmgr: PLQMRT Command: strmqm PLQMRT IBM MQ queue manager 'PLQMRT' starting. The queue manager is associated with installation 'Installation2'. 6 log records accessed on queue manager 'PLQMRT' during the log replay phase. Log replay for queue manager 'PLQMRT' complete. Transaction manager state recovered for queue manager 'PLQMRT'. Plain text communication is enabled. IBM MQ queue manager 'PLQMRT' started using V9.2.4.0. Waiting queue manager startup 5 sec ... Waiting command server startup 3 sec ...

キューマネージャーが開始後、PLQMRT.mqsc.srcをPLQMRT.iniで変更したPLQMST.mqsc構成定義ファイルが読み込まれます。

Command: mqpcf mqsc -qm PLQMRT -wi 60 -f ./PLQMRT.mqsc MQSC Command [1] : def listener(listener) trptype(tcp) port(1415) control(qmgr) replace 1: AMQ8626I: IBM MQ listener created. MQSC Command [2] : sta listener(listener) 1: AMQ8021I: Request to start IBM MQ listener accepted. MQSC Command [3] : alter qmgr chlauth(disabled) connauth(' ') certlabl(PLQMRA) sslkeyr('/home/mqm/serverssl/PLQMR/key') 1: AMQ8005I: IBM MQ queue manager changed. MQSC Command [4] : def chl(PLQMR.MQICHL) chltype(svrconn) mcauser('mqm') certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [5] : def ql(PLQMS) usage(xmitq) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [6] : def chl(PLQMR.PLQMS) chltype(sdr) conname('111.111.111.111(1414)') xmitq(PLQMS) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [7] : def chl(PLQMS.PLQMR) chltype(rcvr) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [8] : def ql(PLQMS2) usage(xmitq) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [9] : def chl(PLQMR.PLQMS.2) chltype(sdr) conname('111.111.111.111(1414)') xmitq(PLQMS2) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [10] : def chl(PLQMS.PLQMR.2) chltype(rcvr) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [11] : def ql(PLQMS3) usage(xmitq) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [12] : def chl(PLQMR.PLQMS.3) chltype(sdr) conname('111.111.111.111(1414)') xmitq(PLQMS3) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [13] : def chl(PLQMS.PLQMR.3) chltype(rcvr) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [14] : def ql(PLQMS4) usage(xmitq) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [15] : def chl(PLQMR.PLQMS.4) chltype(sdr) conname('111.111.111.111(1414)') xmitq(PLQMS4) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [16] : def chl(PLQMS.PLQMR.4) chltype(rcvr) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [17] : def ql(PLQMS5) usage(xmitq) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [18] : def chl(PLQMR.PLQMS.5) chltype(sdr) conname('111.111.111.111(1414)') xmitq(PLQMS5) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [19] : def chl(PLQMS.PLQMR.5) chltype(rcvr) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [20] : alter qmgr repos(PCLT01) 1: AMQ8005I: IBM MQ queue manager changed. MQSC Command [21] : def chl(TO.PLQMR) chltype(clusrcvr) conname('999.999.999.999(1415)') cluster(PCLT01) discint(0) certlabl(PLQMRA) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [22] : def chl(TO.PLQMS) chltype(clussdr) conname('111.111.111.111(1414)') cluster(PCLT01) discint(0) sslciph(TLS_RSA_WITH_AES_256_CBC_SHA256) replace 1: AMQ8014I: IBM MQ channel created. MQSC Command [23] : def ql(REQ1) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [24] : def ql(REQ2) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [25] : def ql(REQ3) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [26] : def ql(REQ4) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [27] : def ql(REQ5) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [28] : def ql(CQR1) cluster(PCLT01) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [29] : def ql(CQR2) cluster(PCLT01) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [30] : def ql(CQR3) cluster(PCLT01) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [31] : def ql(CQR4) cluster(PCLT01) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [32] : def ql(CQR5) cluster(PCLT01) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [33] : def qr(REPS1) rname(REP1) rqmname(PLQMST) XMITQ(PLQMS) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [34] : def qr(REPS2) rname(REP2) rqmname(PLQMST) XMITQ(PLQMS2) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [35] : def qr(REPS3) rname(REP3) rqmname(PLQMST) XMITQ(PLQMS3) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [36] : def qr(REPS4) rname(REP4) rqmname(PLQMST) XMITQ(PLQMS4) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [37] : def qr(REPS5) rname(REP5) rqmname(PLQMST) XMITQ(PLQMS5) replace 1: AMQ8006I: IBM MQ queue created. MQSC Command [38] : refresh security type(ssl) 1: AMQ8560I: IBM MQ security cache refreshed. $


チャネルの開始

ソース側、レスポンス側ともキューマネージャーの作成が完了したら、送信側チャネルを開始します。

Windowsの場合: Cmd> PowerShell -File ./stachl.ps1 -m <QMGR> または PS> ./stachl -m <QMGR> Linux/HPE NonStopの場合: $ ./stachl.sh <QMGR>

*オプションの説明
-mまたは第一引数: キューマネージャー名

下記は、Linuxのレスポンス側で実行した例ですが、ソース側、Windows/HPE NonStopの場合でも全て同様です。

$ ./stachl.sh PLQMRT mqpcf sta -qm PLQMRT -c PLQMR.PLQMS Channel Start Success. Channel Name : PLQMR.PLQMS mqpcf sta -qm PLQMRT -c PLQMR.PLQMS.2 Channel Start Success. Channel Name : PLQMR.PLQMS.2 mqpcf sta -qm PLQMRT -c PLQMR.PLQMS.3 Channel Start Success. Channel Name : PLQMR.PLQMS.3 mqpcf sta -qm PLQMRT -c PLQMR.PLQMS.4 Channel Start Success. Channel Name : PLQMR.PLQMS.4 mqpcf sta -qm PLQMRT -c PLQMR.PLQMS.5 Channel Start Success. Channel Name : PLQMR.PLQMS.5 mqpcf sta -qm PLQMRT -c TO.PLQMS MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[4031] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] $ mqrc 4031 4031 0x00000fbf MQRCCF_CHANNEL_IN_USE $ ※理由コード 4031 MQRCCF_CHANNEL_IN_USE はCLUSSDRチャネルが既に自動的に開始されていた為に表示されています。

チャネルが正常に開始されたかステータスを確認します。

Windowsの場合: Cmd> PowerShell -File ./ckchl.ps1 -m <QMGR> または PS> ./ckchl -m <QMGR> Linux/HPE NonStopの場合: $ ./ckchl.sh <QMGR>

*オプションの説明
-mまたは第一引数: キューマネージャー名

$ ./ckchl.sh PLQMRT mqpcf chs -qm PLQMRT -c PLQMR.MQICHL STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c PLQMR.PLQMS STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS) CHLTYPE(SDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMS) mqpcf chs -qm PLQMRT -c PLQMS.PLQMR STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c PLQMR.PLQMS.2 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS.2) CHLTYPE(SDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMS2) mqpcf chs -qm PLQMRT -c PLQMS.PLQMR.2 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c PLQMR.PLQMS.3 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS.3) CHLTYPE(SDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMS3) mqpcf chs -qm PLQMRT -c PLQMS.PLQMR.3 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c PLQMR.PLQMS.4 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS.4) CHLTYPE(SDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMS4) mqpcf chs -qm PLQMRT -c PLQMS.PLQMR.4 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c PLQMR.PLQMS.5 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS.5) CHLTYPE(SDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMS5) mqpcf chs -qm PLQMRT -c PLQMS.PLQMR.5 STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMRT -c TO.PLQMR STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(TO.PLQMR) CHLTYPE(CLUSRCVR) CONNAME(172.21.10.50) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) mqpcf chs -qm PLQMRT -c TO.PLQMS STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(TO.PLQMS) CHLTYPE(CLUSSDR) CONNAME(111.111.111.111(1414)) CHLINSTYPE(CURRENT) RQMNAME(PLQMST) SECPROT(TLSV12) SSLCERTI(E=support@sd.pulsarintegration.com, CN=www.sd.pulsarintegration.com,O=Pulsar Integration SD Inc.,ST=Sydney,C=AU) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=03, CN=www.sd.pulsarintegration.PLQMSA.com,O=Pulsar Integration PLQMSA Inc.,ST=Sydney,C=AU) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE) $ mqrc 3065 3065 0x00000bf9 MQRCCF_CHL_STATUS_NOT_FOUND $ ※理由コード 3065 MQRCCF_CHL_STATUS_NOT_FOUND はRCVRチャネルがINACTIVEであることを示しています。

同様に対向側からもチャネルを開始し、全てのチャネルが開始されたことを確認します。

$ ./stachl.sh PLQMST mqpcf sta -qm PLQMST -c PLQMS.PLQMR Channel Start Success. Channel Name : PLQMS.PLQMR mqpcf sta -qm PLQMST -c PLQMS.PLQMR.2 Channel Start Success. Channel Name : PLQMS.PLQMR.2 mqpcf sta -qm PLQMST -c PLQMS.PLQMR.3 Channel Start Success. Channel Name : PLQMS.PLQMR.3 mqpcf sta -qm PLQMST -c PLQMS.PLQMR.4 Channel Start Success. Channel Name : PLQMS.PLQMR.4 mqpcf sta -qm PLQMST -c PLQMS.PLQMR.5 Channel Start Success. Channel Name : PLQMS.PLQMR.5 mqpcf sta -qm PLQMST -c TO.PLQMR MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[4031] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] $ $ mqrc 4031 4031 0x00000fbf MQRCCF_CHANNEL_IN_USE $ $ ./ckchl.sh PLQMST mqpcf chs -qm PLQMST -c PLQMS.MQICHL STATUS SECPROT SSLCERTI SSLCIPH SSLPEER MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3065] MQExecute : Command Server Error. mqExecuteCC=[2], mqExecuteRC=[3008], mqCommandCC=[2], mqCommandRC=[3008] mqpcf chs -qm PLQMST -c PLQMS.PLQMR STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMS.PLQMR) CHLTYPE(SDR) CONNAME(172.21.10.147(1425)) CHLINSTYPE(CURRENT) RQMNAME(PLQMRT) SECPROT(TLSV12) SSLCERTI(E=support@ny.pulsarintegration.com, CN=www.ny.pulsarintegration.com,O=Pulsar Integration NY Inc.,ST=New York,C=US) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=02, CN=www.pulsarintegration.PLQMR.com,O=Pulsar Integration PLQR Inc.,ST=New York,C=US) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(MQGET) XMITQ(PLQMR) mqpcf chs -qm PLQMST -c PLQMR.PLQMS STATUS SECPROT SSLCERTI SSLCIPH SSLPEER 1: CHANNEL(PLQMR.PLQMS) CHLTYPE(RCVR) CONNAME(172.21.10.147) CHLINSTYPE(CURRENT) RQMNAME(PLQMRT) SECPROT(TLSV12) SSLCERTI(E=support@ny.pulsarintegration.com, CN=www.ny.pulsarintegration.com,O=Pulsar Integration NY Inc.,ST=New York,C=US) SSLCIPH(TLS_RSA_WITH_AES_256_CBC_SHA256) SSLPEER(SERIALNUMBER=02, CN=www.pulsarintegration.PLQMR.com,O=Pulsar Integration PLQMR Inc.,ST=New York,C=US) STATUS(RUNNING) STOPREQ(NO) SUBSTATE(RECEIVE) ... (以下省略) $ mqrc 3065 3065 0x00000bf9 MQRCCF_CHL_STATUS_NOT_FOUND $ ※クライアント接続チャネル(SVRCONN)にはこの時点でクライアントからの接続がないのでこの理由コードが表示さ れています。

※ckchl.ps1(sh), stachl.ps1(.sh), ckque.ps1(.sh), clrque.ps1(.sh), dltmsg.ps1(.sh)は<QMGR>.mqscを参照します。 同様にクライアント接続テスト用のckchl_c.ps1(.sh), ckque_c.ps1(.sh), clrque_c.ps1(.sh), dltmsg_c.ps1(.sh)も接続先の<QMGR>.mqscを参照します。 その為、クライアントのディレクトリには接続先ソースQMGRの<QMGR>.mqscをコピーして配置しておくことが必要です。 <QMGR>.mqscを参照する理由は処理の対象をパフォーマンス・テスト用のオブジェクトに限定する為です。

このページの先頭へ

このページの先頭へ