Comments
Description
Transcript
チャネル接続 トピック 機能と構成 WebSphere
WebSphere MQ v7.0 機能と構成 チャネル接続 ISE エンタープライズ・ミドルウェア 2009年07月 トピック チャネル接続 MQクライアント MQシステムの構成 リモート・システムとの通信 MQクライアント接続 接続情報の与え方 チャネル数の制御 非同期メッセージ送信 メッセージ先読み キュー・マネージャー間接続 キュー・マネージャー間接続の構成要素 リモートのキューへの送信 リモート・キューの定義 チャネルのトリガリング 転送メッセージのバッチ化 チャネルのバッチ・インターバル FASTチャネル 文字コード変換 チャネルEXIT チャネルのハートビート メッセージの暗号化 チャネルのメッセージ圧縮 ローカル・アドレスの指定 MQクラスター MQクラスターとは MQクラスターの利点 MQクラスターの構成要素 MQクラスター関連コマンド クラスター・キューへの送信方法 ワークロード・バランシングの制御 MQクラスター構成での考慮点 2 チャネル接続 3 MQシステムの構成 サーバー環境 / クライアント環境 MQは2種類のコードを提供 サーバー・フィーチャー、クライアント・フィーチャー サーバー環境 サーバー・フィーチャーを導入した環境 キュー・マネージャーを作成し、稼働させることが可能 クライアント環境 クライアント・フィーチャーを導入した環境 リモートのキュー・マネージャーに接続してキューを読み書きするアプリケーションを稼働させることが可能 – MQクライアント接続 キュー・マネージャーを作成することはできない – 前提H/Wスペックの緩和、システム管理 / 運用コストが小さい キュー・マネージャー プログラムA (MQクライアント接続) プログラムB (ローカル接続) チャネル ローカル・キュー ローカル・キュー システムA(クライアント環境) 4 システムB(サーバー環境) リモート・システムとの通信 キュー・マネージャー間接続 アプリケーションは同一マシンのキュー・マネージャーとローカル接続してキューにメッセージを読み書きする チャネルがキュー・マネージャー間のメッセージの転送を保証 非同期通信 リモートのキュー・マネージャーが稼働していなくても、アプリケーションはメッセージの送信が可能 キュー・マネージャーA プログラムA (ローカル接続) キュー・マネージャーB チャネル ローカル・キュー トランスミッション・キュー システムA システムB キュー・マネージャー間接続 MQクライアント接続 アプリケーションはリモートのキュー・マネージャーとMQクライアント接続してキューにメッセージを読み書きする 同期通信 リモートのキュー・マネージャーが稼働していないと、アプリケーションはメッセージを送信できない キュー・マネージャーB プログラムB (MQクライアント接続) チャネル ローカル・キュー システムA システムB MQクライアント接続 5 リモート・システムとの通信 MQクラスター キュー・マネージャー間接続の1つ 論理的に関連付けられたキュー・マネージャーの集まりのこと MQクラスター内に複数存在するクラスター・キューへのメッセージ自動振り分けが可能 プログラムA (ローカル接続) キュー・マネージャーA キュー・マネージャーB チャネル ローカル・キュー トランスミッション・キュー システムA システムB ラウンド・ロビン チャネル キュー・マネージャーC MQクラスター ローカル・キュー システムC 6 キュー・マネージャー間接続 7 キュー・マネージャー間接続の構成要素 構成要素 キュー・マネージャー キュー、チャネルなどの管理 基本的に1筐体毎に1つ作成 –パフォーマンス / 運用要件により追加を検討 キュー メッセージを保持する論理的な箱 1キュー・マネージャーに複数作成 メッセージ・チャネル キュー・マネージャー間のコミュニケーション・リンク 両端でMCA(メッセージ・チャネル・エージェント)が稼働 –MCAはキューにメッセージを読み書きする通信プログラム キュー・マネージャー間上り下りで1対 プログラムA プログラムB プログラムC MQPUT MQGET MQGET MQI リモート・キュー MCA チャネル MCA ローカル・キューA トランスミッション・キュー キュー・マネージャーA 8 キュー・マネージャーB ローカル・キューB キュー キューの種類 ローカル・キュー 実体があり、メッセージを保持することができるキュー トランスミッション・キュー 宛先キュー・マネージャーへの転送メッセージをローカルで一時的に保持する転送用のキュー –特殊な属性をもつローカル・キュー 宛先キュー・マネージャー毎に作成 リモート・キュー リモートのキュー・マネージャーのキューを指し示す定義 –宛先キュー・マネージャー名、宛先キュー名、トランスミッション・キュー名の情報をもつ メッセージを書き込むと、トランスミッション・キューにメッセージが書き込まれる プログラムA MQPUT プログラムB リモート・キュー:AAA MQGET MCA チャネル MCA ローカル・キュー:BBB トランスミッション・キュー:QM2 キュー・マネージャー:QM1 キュー・マネージャー:QM2 9 メッセージ・チャネル キュー・マネージャー間のコミュニケーション・リンク 送信側、受信側のそれぞれでチャネル定義を作成(定義名を同じにすること) 単一方向のメッセージ転送 キュー・マネージャー間に双方向のメッセージ転送があれば、2対のチャネル定義が必要 受信側ではリスナーを起動 リスナーは送信チャネルから受信チャネルの起動要求を受け取って、受信チャネルを起動 MQ提供のリスナー・プログラムかinetdでの起動の2種類(UNIXの場合) チャネルの両端ではMCA(メッセージ・チャネル・エージェント)が稼動 MCAはメッセージをキューに読み書きする通信プログラム 送信側のMCAはトランスミッション・キューからメッセージを読み取り、ネットワークに送信 受信側のMCAは受信したメッセージを宛先キューに書き込む 宛先キューにメッセージが書き込めないとデッド・レター・キューに書き込む デッド・レター・キューにも書き込めないとメッセージを破棄、または、チャネル異常終了 起動要求 プログラムA リモート・キュー MCA (送信チャネル) MQPUT チャネル リスナー MCA (受信チャネル) デッド・レター・キュー プログラムB トランスミッション・キュー 宛先キュー チャネル定義 10 チャネル定義 MQGET メッセージ・チャネル チャネルの起動と停止 チャネルが起動している時のみメッセージ送信が行われる アプリケーションはチャネルの起動 / 停止に関わらず、メッセージの書き込みが可能 コマンドにより操作 START CHANNEL / STOP CHANNEL チャネルの自動起動 / 自動停止 トランスミッション・キューにメッセージが入るとチャネルを起動(後述) 指定時間トランスミッション・キューにメッセージがなければ自動的に停止 メッセージ・チャネルのタイプ SENDERチャネル(送信側チャネル) メッセージの送信を行ない、チャネルの起動、停止が可能 SERVERチャネル(サーバーチャネル) メッセージの送信を行ない、チャネルの起動(フル定義時)、停止が可能 RECEIVERチャネル(受信側チャネル) メッセージの受信を行い、チャネルの停止が可能(※) REQUESTERチャネル(要求側チャネル) メッセージの受信を行い、チャネルの起動、停止が可能(※) ※ 自分だけ停止。送信側がSENDER、フル定義のSERVERの場合、送信側は接続再試行状態になる 11 <参考> メッセージ・チャネル メッセージ・チャネルのタイプと組み合わせ SENDER – RECEIVER 最も一般的な組み合わせ START チャネル MCA [SENDERチャネル] トランスミッション・キュー メッセージ MCA [RECEIVERチャネル] 宛先ローカル・キュー SENDER – REQUESTER 両方向からの起動が可能 ただし、前回停止したチャネルから起動する必要があり、運用上の考慮が必要 START チャネル MCA [SENDERチャネル] トランスミッション・キュー START チャネル(コールバック) MCA [REQUESTERチャネル] 宛先ローカル・キュー メッセージ SERVER – REQUESTER START チャネル MCA [SERVERチャネル] トランスミッション・キュー メッセージ 12 MCA [REQUESTERチャネル] 宛先ローカル・キュー <参考> メッセージ・チャネル メッセージ・チャネルのタイプと組み合わせ(続き) SERVER(フル定義) – RECEIVER トランスミッション・キュー MCA [SERVERチャネル] (フル定義) START チャネル メッセージ MCA [RECEIVERチャネル] 宛先ローカル・キュー SERVER(フル定義) – REQUESTER 両方からの起動が可能 ただし、前回停止したチャネルから起動する必要があり、運用上の考慮が必要 トランスミッション・キュー MCA [SERVERチャネル] (フル定義) START チャネル メッセージ MCA [REQUESTERチャネル] 宛先ローカル・キュー ※ フル定義のSERVERチャネル定義とは、チャネルの開始可能に十分な属性定義(コネクション名)を定義したもの 13 リモートのキューへの送信 リモート・キューを経由した送信 MQOPEN(MQPUT1)時にMQODにローカル・システムのリモート・キュー名を指定 ローカル・キューマネージャー上にリモート・キューを定義 アプリケーションは宛先のキュー・マネージャー名とローカル・キュー名を意識しない 定義のみで宛先キューの変更が可能 ⇒ 柔軟性が高い アプリケーションは宛先のキュー・マネージャーやキューを意識する必要はない 宛先変更に対する柔軟性が高い アプリケーション アプリケーション MQOPEN QR2 MQPUT MQGET <ローカル・システム> DEFINE QREMOTE(QR2) RNAME(QL2) RQMNAME(QM2) XMITQ(QM2) <リモート・システム> リモート・キュー : QR2 MCA (送信チャネル) MCA (受信チャネル) ローカル・キュー : QL2 チャネル トランスミッション・キュー : QM2 キュー・マネージャー : QM1 14 キュー・マネージャー : QM2 リモートのキューへの送信 宛先のキュー・マネージャー / キュー名を直接指定した送信 MQOPEN(MQPUT1)時に、MQODに宛先システムの情報を指定 ObjectQMgrNameフィールドに宛先システムのキュー・マネージャー名を指定 ObjectNameフィールドに宛先システムのキュー名を指定 ローカル・キュー・マネージャー上にリモート・キューの定義は不要 宛先のキュー・マネージャー名と同一名のトランスミッション・キュー定義が必要 アプリケーションは宛先のキュー・マネージャー名とキュー名を意識 アプリケーション MQOPEN MQPUT アプリケーション MQOD: ObjectName = QL2 ObjectQMgrName = QM2 MQGET <ローカル・システム> <リモート・システム> MCA (送信チャネル) MCA (受信チャネル) ローカル・キュー : QL2 チャネル トランスミッション・キュー : QM2 キュー・マネージャー : QM1 キュー・マネージャー : QM2 15 リモート・キューの定義 リモート・キュー定義により、アプリケーションは宛先のキュー・マネージャーやキューを意 識する必要はない 宛先変更に対する柔軟性が高い リモート・キューに対する別名定義も可能 アプリケーション単位の別名定義により、アプリケーション単位でMQPUTの抑制ができる MQOD ObjectType : MQOT_Q ObjectName : QR2 ObjectQMgrName : <ブランク> リモート・キュー定義 QNAME RNAME RQMNAME XMITQ : : : : アプリケーション MQOPEN QR2 MQPUT QR2 QL2 QM2 QM2 MQXQH RemoteQName : QL2 RemoteQMgrName : QM2 MsgDesc : MQMD アプリケーション MQGET <ローカル・システム> <リモート・システム> リモート・キュー : QR2 MCA (送信チャネル) MCA (受信チャネル) ローカル・キュー : QL2 チャネル トランスミッション・キュー : QM2 キュー・マネージャー : QM1 16 キュー・マネージャー : QM2 <参考> マルチ・ホップ(ステージング) 1対1方式 キューの定義によって宛先のキュー・マネージャーへの転送も可能 宛先のキュー・マネージャー名と同一のトランスミッション・キューを最終宛先のキュー・マネージャー以外に作成 アプリケーション MQOPEN QR2 リモート・キュー定義 MQPUT QREMOTE : QR2 RNAME : QL2 RQMNAME : QM2 XMITQ : QM2 リモート・キュー: QR2 アプリケーション MQOPEN QR3 リモート・キュー定義 MQPUT QREMOTE : QR3 RNAME : QL3 RQMNAME : QM3 XMITQ : QM3 リモート・キュー: QR3 アプリケーション MQOPEN QR4 リモート・キュー定義 MQPUT QREMOTE : QR4 RNAME : QL4 RQMNAME : QM4 XMITQ : QM4 リモート・キュー: QR4 トランスミッション・キュー: QM2 MCA(送信チャネル) トランスミッション・キュー: QM3 MCA(送信チャネル) トランスミッション・キュー: QM4 MCA(送信チャネル) キュー・マネージャー:QM1 チャネル チャネル MCA(受信チャネル) MCA(受信チャネル) MCA(受信チャネル) トランスミッション・キュー: QM2 MCA(送信チャネル) トランスミッション・キュー: QM3 MCA(送信チャネル) トランスミッション・キュー: QM4 MCA(送信チャネル) チャネル チャネル MCA(受信チャネル) MCA(受信チャネル) 宛先ローカル・キュー: QL2 宛先ローカル・キュー: QL3 キュー・マネージャー:QM2 キュー・マネージャー:QM3 チャネル チャネル キュー・マネージャー:QMM MCA(受信チャネル) 宛先ローカル・キュー: QL4 キュー・マネージャー:QM4 17 <参考> マルチ・ホップ(ステージング) ハブ方式 中間のキュー・マネージャー(ハブ)を経由した宛先キュー・マネージャーへの転送も可能 チャネル・パスの最適化、資源管理の最適化 アプリケーション MQOPEN QR2 リモート・キュー定義 MQPUT QREMOTE : QR2 RNAME : QL2 RQMNAME : QM2 XMITQ : QMM リモート・キュー: QR2 アプリケーション MQOPEN QR3 リモート・キュー定義 MQPUT QREMOTE : QR3 RNAME : QL3 RQMNAME : QM3 XMITQ : QMM リモート・キュー: QR3 アプリケーション MQOPEN QR4 リモート・キュー定義 MQPUT QREMOTE : QR4 RNAME : QL4 RQMNAME : QM4 XMITQ : QMM リモート・キュー: QR4 トランスミッション・キュー: QMM MCA(送信チャネル) キュー・マネージャー:QM1 チャネル MCA(受信チャネル) トランスミッション・キュー: QM2 MCA(送信チャネル) トランスミッション・キュー: QM3 MCA(送信チャネル) チャネル チャネル MCA(受信チャネル) MCA(受信チャネル) 宛先ローカル・キュー: QL2 宛先ローカル・キュー: QL3 キュー・マネージャー:QM2 キュー・マネージャー:QM3 18 トランスミッション・キュー: QM4 MCA(送信チャネル) チャネル キュー・マネージャー:QMM MCA(受信チャネル) 宛先ローカル・キュー: QL4 キュー・マネージャー:QM4 <参考> マルチ・ホップ(ステージング) ハブ応用方式 中間のキュー・マネージャー(ハブ)での集中キュー管理 アプリケーション MQOPEN QR2 リモート・キュー定義 MQPUT QREMOTE : QR2 RNAME : QR21 RQMNAME : QMM XMITQ : QMM リモート・キュー: QR2 アプリケーション MQOPEN QR3 リモート・キュー定義 MQPUT QREMOTE : QR3 RNAME : QR31 RQMNAME : QMM XMITQ : QMM リモート・キュー: QR3 アプリケーション MQOPEN QR4 リモート・キュー定義 MQPUT QREMOTE : QR4 RNAME : QR41 RQMNAME : QMM XMITQ : QMM リモート・キュー: QR4 トランスミッション・キュー: QMM MCA(送信チャネル) リモート・キュー定義 チャネル QREMOTE : QR31 RNAME : QL3 RQMNAME : QM3 MCA(受信チャネル) XMITQ : QM3 リモート・キュー:QR31 リモート・キュー定義 QREMOTE : QR21 RNAME : QL2 RQMNAME : QM2 XMITQ : QM2 リモート・キュー:QR21 トランスミッション・キュー: QM2 MCA(送信チャネル) トランスミッション・キュー: QM3 MCA(送信チャネル) チャネル チャネル MCA(受信チャネル) MCA(受信チャネル) 宛先ローカル・キュー: QL2 キュー・マネージャー:QM1 リモート・キュー定義 QREMOTE : QR41 RNAME : QL4 RQMNAME : QM4 XMITQ : QM4 リモート・キュー:QR41 トランスミッション・キュー: QM4 MCA(送信チャネル) チャネル MCA(受信チャネル) 宛先ローカル・キュー: QL3 キュー・マネージャー:QM2 キュー・マネージャー:QMM 宛先ローカル・キュー: QL4 キュー・マネージャー:QM3 キュー・マネージャー:QM4 19 チャネルのトリガリング トリガリングの機能によりチャネルを自動的にスタートさせることが可能 トランスミッション・キューにトリガリングの設定をすることにより、転送用のメッセージが書き込ま れると自動的に対応するチャネルが開始 チャネルのトリガリングに必要な設定 トランスミッション・キューに以下の属性を指定 TRIGGER TRIGTYPE(FIRST) メッセージ INITQ(SYSTEM.CHANNEL.INITQ) –イニシエーション・キューは、 SYSTEM.CHANNEL.INITQ で固定 TRIGDATA(チャネル名) キュー・マネージャー :QM1 トリガー・メッセージ <トランスミッション・キュー定義> DEFINE QLOCAL(QM2) USAGE(XMITQ) TRIGGER TRIGTYPE(FAST) INITQ(SYSTEM.CHANNEL.INITQ) TRIGDATA(QM1.TO.QM2) トランスミッション・キュー: QM2 起動 チャネル イニシエーター MCA チャネル: QM1.TO.QM2 SYSTEM.CHANNEL. INITQ チャネルの停止に注意が必要 STOPPEDのステータスのチャネルにはトリガーは発生しない 切断間隔の満了やSTOP CHANNELのオプション指定でINACTIVEのステータスで停止さ せる 20 転送メッセージのバッチ化 チャネルは、複数のメッセージを1つのUOWとして転送 送受信MCA間で1UOW毎に同期がとられる 同期がとられるまでは受信側ではメッセージは取り出せない (Fastチャネル使用時のノン・パーシステント・メッセージを除く) バッチをコミットする前に受信側がActiveか確認することも可能(バッチ・ハートビート) チャネルのBATCHSZ属性で指定 幾つのメッセージを1UOWとして転送するかの指定 バッチ・サイズが大きいほど、メッセージ転送のスループットは高い トランスミッション・キューにバッチ・サイズ分のメッセージがない場合には、バッチ・インターバルに 指定された時間待ってそこまでで1UOWとして転送 BATCHSZ=5 送信 MCA 受信 MCA Confirm トランスミッション・キュー Ack/Nack BATCHSIZE=5 21 チャネルのバッチ・インターバル バッチ・サイズに到達しないメッセージの同期を、指定した間隔待つ機能 小さなバッチ毎の同期フローを減らすことによるメッセージのスループット向上 メッセージが断続的にくる場合に、ネットワーク・コストを削減 受信側がメッセージを受け取る時間は通常は遅くなる FASTチャネル上のノン・パーシステント・メッセージには影響しない(バッチサイズには数えられる) チャネルのBATCHINT属性で指定 SDR, SVR, CLUSSDR, CLUSRCVRチャネルのみ指定可能 最初のメッセージが来てからメッセージを待っている合計時間 メッセージをトランスミッション・キューから取り出して転送する時間は含まない バッチ・インターバルが0であれば、最後のメッセージ送信後すぐに同期処理 合計1秒 待つ BATCHINT=1000 送信 MCA 受信 MCA Confirm トランスミッション・キュー Ack/Nack BATCHSIZE=5 22 FASTチャネル ノン・パーシステント・メッセージをチャネル間の同期処理を行なわずに転送する機能 ノン・パーシステント・メッセージは、より速く宛て先のキューに配布される ノン・パーシステント・メッセージもチャネルのバッチ数にはカウントされる パーシステント・メッセージの転送は従来通りバッチ・サイズ毎に同期をとって配布される チャネルのNPMSPEED属性で設定 FASTチャネル障害時、転送途中のノン・パーシステント・メッセージはロストする パーシステント・メッセージ P-メッセージ P-メッセージ ノン・パーシステント・メッセージ NP-メッセージ 送信 MCA P-メッセージ P-メッセージ パーシステント・メッセージ 受信 MCA パーシステント・メッセージ NP-メッセージ P-メッセージ P-メッセージ トランスミッション・キュー NPMSPEED(FAST) BATCHSIZE=5 23 文字コード変換 メッセージの文字コード変換を行なう機能 CCSID(文字)とエンコーディング(数値)に基づいてコード変換を行う CCSIDとエンコーディングはキュー・マネージャーや個々のメッセージで指定 メッセージ・ヘッダー部(MQMD)の変換 MQMDコード変換はMCAが自動的に行なう –チャネル間でお互いのCCSIDとエンコーディングをやりとりし、接続可否を決定 –チャネル折衝時には両側のキュー・マネージャーのCCSIDとエンコーディング値が使用される コード変換の対象 –文字型フィールドはCCSIDに基づいてコード変換 –数値フィールドはエンコーディングに基づいて変換 –バイナリー・フィールド(メッセージIDや相関ID)は変換対象外 ユーザー・データ部の変換 全て文字で構成 : MQにより変換可能 ユーザー定義フォーマット : ユーザーEXITにより変換 メッセージ MQMD(メッセージの属性) ユーザー・データ部 メッセージ・ヘッダー MCAが必要に応じて変換(EBCDIC&ASCII) アプリケーション・データ MQでの変換、またはユーザーが必要に応じて変換 24 MQGET 文字コード変換 CCSIDの設定と影響範囲 キュー・マネージャーのCCSID属性に設定 メッセージ・ヘッダーのコード変換に使用される –チャネルでのユーザー・メッセージの変換先CCSIDとしても使用 転送メッセージの内容には関係しない キュー・マネージャー間の接続(チャネル)およびメッセージ転送可否に影響を与える メッセージ属性(MQMDのCodedCharsetId)に設定 ユーザー・データ部の文字型データのCCSIDを示す –アプリケーションで設定可能だが、特に指定しなければキュー・マネージャーのCCSIDがセットされる ユーザー・データ部のコード変換に使用 エンコーディングの設定と影響範囲 キュー・マネージャーが稼動するプラットフォームにより決定される MQヘッダー内の数値データはMCAが自動的に変換 メッセージ属性(MQMDのEncoding)に設定 デフォルトではキュー・マネージャーの稼動する環境の値がセットされる ユーザーが定義することも可能だが、デフォルトを使用することを推奨 25 文字コード変換 デフォルト・コードページ 変換をサポートしていないCCSIDのキューマネージャー間で接続を行う方法 デフォルト指定されたCCSIDを使用してチャネルを接続 デフォルト・コードページの利用により、DBCSとSBCSのキュー・マネージャー接続も可能 MQクライアント・チャネルでも使用可能 デフォルト・コードページの指定 ccsid.tblファイルにデフォルトのコードページを設定 DEFAULT DATA CONVERSIONのパートにてデフォルトEBCDIC CCSIDとデフォルトASCII CCSIDを指定 : # DEFAULT DATA CONVERSION : # # Default conversions are enabled by creating two lines similar to the # two following, but removing the # character which indicates a comment. # #default 0x1100 500 ← コメントを外す #default 0x2100 850 ← コメントを外す # # The first line sets the default for EBCDIC CCSIDs to 500 # and the second sets the default for ASCII and similar CCSIDs to 850. : ccsid.tblの配置先(デフォルト) UNIX : /var/mqm/conv/table Windows : C:¥Program Files¥IBM¥WebSphere MQ¥conv¥table 26 文字コード変換 ユーザー・データの変換場所 送信側でデータの変換を実施する場合 送信側でチャネルの属性をCONVERT(YES)に設定 基本的にはMQGET時に変換させるようにする。変換が送信側でしかサポートされないような場合は チャネルを使用する アプリケーション MCA (送信チャネル) ローカル・キュー : QL2 チャネル トランスミッション・キュー : QM2 キュー・マネージャー : QM1 MQGET MCA (受信チャネル) チャネル定義 CONVERT(YES YES) YES キュー・マネージャー : QM2 受信側でデータの変換を実施する場合 受信側のアプリケーションでMQGET時にMQGMO_CONVERTオプションを指定 アプリケーション MCA (送信チャネル) ローカル・キュー : QL2 チャネル トランスミッション・キュー : QM2 キュー・マネージャー : QM1 チャネル定義 CONVERT(NO NO) NO キュー・マネージャー : QM2 27 チャネルEXIT チャネル接続におけるユーザーEXIT MCAのチャネルEXIT MCAの処理サイクル中にスケジュール – – – – – – セキュリティーEXIT 送信EXIT 受信EXIT メッセージEXIT メッセージ・リトライEXIT 自動定義EXIT EXITの設定 チャネルの定義で指定 セキュリティーEXIT 送信EXIT 受信EXIT メッセージEXIT メッセージ・リトライEXIT : SCYEXIT : SENDEXIT : RCVEXIT : MSGEXIT : MREXIT キュー・マネージャーの定義で指定 自動定義EXIT MQGET (MQGMO_CONVERT) MCA (受信チャネル) : CHADEXIT 28 チャネルEXIT EXITタイプ スケジュール・ポイント 主な用途 セキュリティー チャネル開始時の初期データ交換後 EXIT内で定義した形式でのセキュリティー・メッセージの交換の起動 か可能 (両側のEXITが許可した場合にのみ後続の転送処理が可能) メッセージ [送信側] メッセージをXmitキューから取り出した直後で必要に応じて セグメント化する直前 MQXQH(MQMD、ユーザー・メッセージを含む)内のフィールドの変 更が可能 -暗号化/複合化 -入力ユーザーIDの検証 -ユーザー・メッセージ部のコード変換 -メッセージ部の宛先の変換 -MQMDのReply-to情報の変更 -MQMDのコンテキスト情報の変更 -ユーザー・ジャーナリング [受信側] メッセージを宛先のキューに書き出す直前 送信 各転送データの先頭8バイトを除いては全ての転送情報の変更が 可能 1つのセグメントを送信する直前(両側) (ユーザー・メッセージ以外(ステータス・データなど)のセグメ ント・データに対してもスケジュールされるが初期データの交 換、およびセキュリティー・チェック・フェーズではスケジュールさ れない) 受信 -暗号化/複合化 -データの圧縮/拡張 -ユーザー・ジャーナリング 1つのセグメントを受信した直後(両側) (ユーザー・メッセージ以外(ステータス・データなど)のセグメ ント・データに対してもスケジュールされるが初期データの交 換、およびセキュリティー・チェック・フェーズではスケジュールさ れない) メッセージ・リトライ 宛先キューへの書き込みが失敗した直後 MQXQH(MQMD、ユーザー・メッセージを含む)内のフィールドの変 更が可能 -自動的なリトライ機能の提供 29 <参考> チャネルEXIT チャネルEXITのスケジュールとタイミング <送信側MCA> <受信側MCA> START CHANNEL 初期データ交換 初期データ交換 チャネル セキュリティーEXIT セキュリティーEXIT MQGET メッセージ メッセージEXIT トランスミッション・キュー Form next segment IF last segment in batch THEN Record batch_id in doubt Set confirm_request and batch_id in header ENDIF Receive segment 受信EXIT Add to message 送信EXIT メッセージEXIT MQPUT message (MSGリトライEXIT) IF batch receive OK THEN Record batch_id Commit batch Set status_OK in header ELSE Rollback batch Set status_error in header Prepare error data ENDIF 送信EXIT Transmit status segment Transmit segment Receive status segment 受信EXIT CASE WHEN status_OK Record batch_id OK Commit batch WHEN status_error Rollback ENDCASE 30 宛先ローカルキュー チャネルのハートビート チャネル間でメッセージが転送されていない時にハートビートを行なう機能 送信側チャネルはハートビートを送信、受信側チャネルはハートビート応答を折り返す 送信側チャネルがネットワークや受信側チャネルの障害をより早く検知することができる 受信側チャネルがハートビートにより、MQリソース(オープンしているキューなど)を開放できる チャネルのHBINT属性で設定 全てのチャネル・タイプで設定可能 送信側と受信側の設定が異なる場合は、チャネル間の折衝で長い方の間隔がとられる 送信側チャネル キュー・マネージャー 受信側チャネル HeartBeat MQGET WAIT キュー・マネージャー HeartBeat応答 MQGET WAIT HeartBeat HeartBeat応答 : 31 メッセージの暗号化 チャネル接続でSSLプロトコルをサポート SSL 3.0をサポート クライアント認証も選択可能 全てのチャネル・タイプで使用することができる メッセージ・チャネル、MQIチャネル、クラスター・チャネル 証明書の識別名(DN)によるフィルタリングが可能 証明書のDNをもとに接続の許可 / 拒否を制御することができる 証明書失効リスト(CRL)への照会 SSLアクセラレータのサポート リモート・キュー プログラムA MCA (送信チャネル) MQPUT セキュアな通信 MCA (受信チャネル) プログラムB SSLチャネル トランスミッション・キュー 宛先キュー MQGET 証明書 証明書 SSLアクセラレータ 証明書失効リスト (LDAPサーバ) 32 SSLアクセラレータ チャネルのメッセージ圧縮 チャネル間でメッセージを圧縮して転送 ネットワーク資源を効率的に利用 簡易なメッセージ暗号化の手段としても利用可能 MQクライアント接続でも利用可能 チャネル毎にヘッダー部とメッセージ部に分けて、圧縮有無 / 圧縮方法を指定可能 チャネルのCOMPHDR、COMPMSG属性で設定 メッセージ・データ MQXQH ヘッダー部で指定可能なアルゴリズム NONE :なし SYSTEM :XOR+RLE メッセージ部で指定可能なアルゴリズム NONE :なし RLE :同じ文字が連続する場合に有効 ZLIBFAST/ZLIBHIGH :ZLIB圧縮関数を利用 ANY :送信側に従う 圧縮方法の決定 チャネル開始時に折衝を行い、同じ圧縮方法が設定されている時のみ圧縮を行なう 必ず、送信側チャネルの指定に従う場合は、受信側チャネルをANYに設定する 33 ローカル・アドレスの指定 アウトバウンドの通信に使用するIPアドレス、ポートを固定することが可能 トランスポート・タイプがTCPの以下のチャネルでのみ指定可能 SDR、SVR、 RQSTR、CLNTCONN、CLUSSDR、CLUSRCVR チャネルのLOCLADDR属性で指定 IPアドレスおよびポート(ポート範囲)で指定 ファイアウォールを介して通信を行っている場合などで有効 ローカル・アドレスを設定できるため、仮想IPアドレスを指定してファイアー・ウォールを通過させることが 可能 ファイアー・ウォール上での管理が減少 –複数キュー・マネージャー上で共通の仮想IPアドレスを使用することが可能 QM1 192.168.0.10 192.168.10.100(仮想IPアドレス) QM2 192.168.0.11 192.168.10.100(仮想IPアドレス) ファイアーウォール QM1/QM2共に共通の仮想IPアドレスを使用 34 <参考> キュー・マネージャー間接続環境の構築 キュー・マネージャー間接続環境の構築 作成する環境 キュー・マネージャー:QM1とQM2で構成されるキュー・マネージャー間接続環境を構築 チャネル・タイプはSENDER-RECEIVERで作成 QM1のアプリケーションから、QM2のローカル・キュー:QL2にメッセージを送信する アプリケーション アプリケーション MQPUT MQGET <ローカル・システム> <リモート・システム> リモート・キュー : QR2 MCA (送信チャネル) トランスミッション・キュー : QM2 チャネル : QM1.TO.QM2 MCA (受信チャネル) キュー・マネージャー : QM1 ローカル・キュー : QL2 キュー・マネージャー : QM2 IPアドレス/ポート番号:192.168.0.10(1414) IPアドレス/ポート番号:192.168.0.20(1414) 35 <参考> キュー・マネージャー間接続環境の構築 QM1での作業(前提:キュー・マネージャーは作成済み) リモート・キューの作成 DEFINE QREMOTE(QR2) RNAME(QL2) RQMNAME(QM2) トランスミッション・キューの作成 DEFINE QLOCAL(QM2) USAGE(XMITQ) 送信チャネルの作成 DEFINE CHL(QM1.TO.QM2) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME(192.168.0.20) XMITQ(QM2) 36 <参考> キュー・マネージャー間接続環境の構築 QM2での作業(前提:キュー・マネージャーは作成済み) ローカル・キューの作成 DEFINE QLOCAL(QL2) 受信チャネルの作成 DEFINE CHL(QM1.TO.QM2) CHLTYPE(RCVR) TRPTYPE(TCP) リスナーの作成 DEFINE LISTENER(LISTENER1414) TRPTYPE(TCP) 37 ブランク・ページ 38 MQクライアント 39 MQクライアント接続 MQクライアント接続の動作 MQCONNの発行により、キュー・マネージャー側でサーバー接続チャネルが起動 マルチスレッド・アプリケーションでは、スレッド間でTCP/IPソケットの共有も可能 アプリケーションの通信相手はサーバー接続チャネル サーバー接続チャネルがキュー・マネージャーと接続し、MQIコールを代替実行 アプリケーションとサーバー接続チャネルは同期処理(リクエスト / リプライ通信)を行う アプリケーションは、MQI実行要求を送信し、MQIの実行結果を応答として受信 起動 接続要求 MQクライアント・アプリ リスナー サーバー接続チャネル MQCONN MQCONN MQOPEN MQOPEN : MQクライアント・ライブラリ キュー・マネージャー : チャネル接続している間(MQCONN ~ MQDISC)はハートビートを送信 全てのタイミングでハートビートによる障害検知が可能 キュー・マネージャー⇔MQクライアントの双方向で送信し双方で早期に障害を検知 40 MQクライアント接続 MQクライアント環境でのアプリケーション ローカル接続のアプリケーションとコーディングは同等 C、C++、・・・ Java MQクライアント・ライブラリをリンクするとMQクライアント・アプリケーション MQEnvironmentクラス(MQ base Java)、接続ファクトリ(JMS)にローカル接続 / クライアント接続を記述 考慮点、その他 キュー・マネージャーをコーディネータとした2PhaseCommitは不可 (MQBEGINを発行できない) 明示的に同期点オプションを指定しないと、接続先プラットフォームのデフォルト値に従う – MQ/zOSに接続 – MQ/UNIX・PCに接続 --> 同期点処理に参加 --> 同期点処理に参加しない キュー・マネージャーへ接続するために、接続先情報が必要 (後述) 41 接続先情報の与え方 接続先情報の与え方 MQクライアントがキュー・マネージャーに接続するために下記の情報が必要 「クライアント接続チャネル名」、「ネットワーク・プロトコル」、「接続先アドレス情報」 接続先情報の与え方は3種類 接続先情報の与え方 Java以外(C、C++、COBOL、・・・) Java(MQ base Java、JMS) MQSERVER環境変数 ○ × チャネル定義テーブル ○ ○ (MQv6.0以降) プログラム内に記述 ○(MQCONNX) MQEnvironmentクラス(MQ base Java)、 接続ファクトリ(JMS) 接続先の障害を検知して、「接続先の自動切換え」を行うのはチャネル定義テーブルでの接続だけ 42 MQSERVER環境変数 MQSERVER環境変数 アプリケーションの起動環境に設定 「チャネル名」、「プロトコル」、「アドレス情報」を‘/’(スラッシュ)区切りで指定 (UNIX) export MQSERVER=クライアント接続チャネル名/プロトコル/アドレス情報 (Windows) set MQSERVER=クライアント接続チャネル名/プロトコル/アドレス情報 ・例. MQSERVER=TO.QMGR01/TCP/111.111.111.111(1111) ・クライアント接続チャネル名はキュー・マネージャー側のサーバー接続チャネルに合わせる Java(MQ base Java、JMS)からは使用できない クライアント接続チャネルの属性がデフォルト値になるため、チャネルの詳細オプションを利用できない SSLチャネル、チャネルのメッセージ圧縮機能を利用できない アプリケーション側でチャネルEXITを利用できない など 43 チャネル定義テーブル チャネル定義テーブル キュー・マネージャー側でクライアント接続チャネルを作成 対になるサーバー接続チャネルと同じ名前で作成 チャネル定義テーブル・ファイルにチャネル定義が保存される DEFINE CHANNEL(チャネル名) CHLTYPE(CLNTCONN) TRPTYPE(xxxx) CONNAME(xxxxx) QMNAME(xxxxxx) ・・・ ・QMNAMEは、アプリケーションが接続先を検索するためのキー(詳細はP46「チャネル定義の検索」を参照) チャネル定義テーブル・ファイルの位置 UNIX ・・・ /var/mqm/qmgrs/<QMgrName>/@ipcc/AMQCLCHL.TAB Windows ・・・ <inst_dir>¥qmgrs¥<QMgrName>¥@ipcc¥AMQCLCHL.TAB チャネル定義テーブル・ファイルをアプリケーション側に配布 QMGR01 ファイル転送を行う場合は、バイナリ・モードで転送 MQクライアント・アプリ 44 チャネル定義テーブル・ファイル チャネル定義テーブル アプリケーション側のチャネル定義テーブル・ファイルの指定 C、C++、・・・(Java以外) デフォルト UNIX ・・・ /var/mqm/AMQCLCHL.TAB Windows ・・・ <inst_dir>¥AMQCLCHL.TAB 環境変数の設定で任意の位置、名前に配置することも可能 AMQCHLLIB ・・・ 配置ディレクトリ AMQCHLTAB ・・・ チャネル定義テーブルのファイル名 Java MQ base Java –MQQueueManagerを作成するとき、チャネル定義テーブル・ファイルの位置をURL指定で渡す java.net.URL table = new URL("file:///home/admdata/ccdt1.tab"); MQQueueManager qmgr = new MQQueueManager("*QMGR_A", table); : ・file以外のftpプロトコルなども利用可能 JMS –コネクション・ファクトリのCCDTURL属性にチャネル定義テーブル・ファイルの位置をURL指定 45 チャネル定義テーブル チャネル定義の検索 チャネル定義テーブルには、複数のクライアント接続チャネルの定義を含めることが可能 MQCONNに指定したキュー・マネージャー名、クライアント接続チャネルのQMNAME属性から 接続に使用するチャネル定義を決定 クライアント接続チャネルのQMNAMEパラメータ MQCONNの指定 実際に接続するQMgr QMNAMEがQMgr名のチャネル定義を検索 QMgr名 ・複数のチャネル定義がマッチした場合、チャネル名で優先順位付け 数字 -> 英大文字 -> 英小文字 *QMgr名 *、無指定(ブランク) QMNAMEがブランクのチャネル定義を検索 指定したQMgrと同一の必 要あり チェックされない チェックされない チャネル定義テーブル クライアント接続チャネル名 CONNAME QMNAME TO.QMGR_A.01 QMGR_A TO.QMGR_B.01 QMGR_B TO.QMGR_A.02 QMGR_A MQCONN(QMGR_B) *なしのQMgr名で接続しているため、 QMGR_B以外は接続不可 TO.QMGR_A.03 MQCONN(*QMGR_A) 任意の名前のQMgrへ接続可能 接続が成功するまで該当するQMgrに順 番に接続を試みる MQCONN(*) MQCONN(‘ ’) 46 任意の名前のQMgrへ接続可能 チャネル定義テーブル グループ接続 チャネル接続が失敗した際に、次の条件にマッチするチャネル定義を使って自動で接続を試 行させることが可能 チャネル定義テーブルに複数のエントリを事前に定義しておく 接続先の切り替えは、アプリケーションに透過的に行われる MQクライアント・ライブラリは、内部的にチャネル定義テーブル内のエントリに対して接続を順番に試行 する 条件にマッチする全エントリへの接続が失敗すると、MQCONNがエラー (MQRC_Q_MGR_NOT_AVAILABLE) チャネル定義テーブル クライアント接続チャネル名 CONNAME QMNAME TO.QMGR_A.01 GROUP_A TO.QMGR_B.01 GROUP_B TO.QMGR_A.02 GROUP_A TO.QMGR_A.03 アプリケーション TCP.CONNECT ノードA MQCONN(*QMGR_A) 1番のエントリで接続 if(接続できない) 2番のエントリで接続 if(接続できない) 接続エラー TCP.CONNECT ノードB OK MQクライアント・ライブラリ 47 チャネル定義テーブル クライアント・チャネルの重み付け クライアント・チャネルに重み付けをし、接続先を分散させることが可能 チャネル定義テーブルでグループ化されているクライアント接続 チャネルが対象 CLNTCONNのAFFINITY属性がNONEの場合、CLNTWGHTに指定された値の割合で接続先を 分散 内部的に作成するチャネル・リストを基にチャネルを選択 プロセス(アプリケーション)内の初回MQCONN時に、チャネル定義テーブルを参照し チャネル・リストを作成 チャネル・リスト TO.QMGR_2 TO.QMGR_1 アプリA MQCONN( *ANY.QMGR) チャネル定義テーブル チャネル名 CLNT WGHT チャネル・リスト QMNAME TO.QMGR_1 1 ANY.QMGR TO.QMGR_2 2 ANY.QMGR 1本 が接続(※) キュー・マネージャー QMGR_1 TO.QMGR_2 TO.QMGR_1 アプリB MQCONN( *ANY.QMGR) チャネル・リスト TO.QMGR_1 : TO.QMGR_2 = 1 : 2 で接続 TO.QMGR_1 リストの上位 から接続を試行 48 TO.QMGR_2 アプリC MQCONN( *ANY.QMGR) キュー・マネージャー QMGR_2 2本 が接続(※) ※上記は AFFINITY(NONE) の場合で、 おおよそ 1:2 の割合で接続先が選択される (幕張でのテスト結果) プログラム内に記述 C、C++、・・・(Java以外) MQCD構造体でクライアント接続チャネルをプログラム内に定義 MQCONNXでキュー・マネージャーに接続 MQCONNX(QMgrName、&ConnectOpts、&hConn、&cc、&rc) 接続オプション(MQCNO) StructId Version Options ClientConnOffset ClientConnPtr ・ClientConnOffset、または、ClientConnPtrのいずれかでMQCD構造体のアドレスをポイント ClientConnOffset : MQCNO構造体の先頭からのオフセットを設定 ClientConnPtr : MQCD構造体のアドレスを設定 49 プログラム内に記述 Java MQ base Java MQEnvironmentクラスに接続先情報を設定 MQEnvironment.channel = “xxxxxxxxx”; MQEnvironment.hostname = “111.111.111.111”; MQEnvironment.port = 1111; MQQueueManager qmgr = new MQueueManager(“*”); : JMS コネクション・ファクトリのTRANSPORT属性をCLIENTに設定 CHANNEL、HOSTNAME、PORT属性に接続先情報を設定 50 チャネル定義(MQCD) ChannelName Version ChannelType TransportType : ConnectionName : <参考> プログラム内に記述 MQ base Java利用時の考慮点 MQEnvironmentはstaticクラス 複数スレッドが異なるキュー・マネージャーへの接続/切断を繰り返すと、 接続先情報が中途半端に書き換えられた状態で接続にいく可能性がある ・channel ノードB(スレッド2によって書き換えられた) ・hostname ノードA ・port ノードA ノードA スレッド1 スレッド2 ノードB 下記の方法で接続 java.util.Hashtable properties = new Hashtable(); properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT); properties.put(MQC.CHANNEL_PROPERTY, “xxxxxxxxx”); properties.put(MQC.HOST_NAME_PROPERTY, "111.111.111.111"); properties.put(MQC.PORT_PROPERTY, new Integer(1111)); MQQueueManager qmgr = new MQueueManager(“QMGR01”, properties); : 51 チャネル数の制御 SVRCONNチャネル毎にクライアントからのインスタンス数を制限可能 キュー・マネージャーが存在するマシンのリソースを制御 単一クライアントが接続を独占することを防止 プログラムの不具合 DoS(Denail of Service)攻撃 計画外MQクライアント・アプリケーションの接続 SVRCONNチャネルのMAXINST、MAXINSTC属性により動作を制御 MAXINST・・・最大チャネル・インスタンス数 MAXINSTC・・・クライアントあたりの最大チャネル・インスタンス数 IPアドレス単位でクライアントを認識 QMGRB クライアント1 クライアント1 MQCONN(QMGRA) ① クライアント2 MQCONN(QMGRA) ② クライアント3 MQCONN(QMGRA) ③ クライアントX MQCONN(QMGRA) QMGRA 【チャネル定義】 名称:TO.QMGRA タイプ:SVRCONN 最大インスタンス数:3 (MAXINST) アプリA MQCONN(QMGRB) ① アプリB MQCONN(QMGRB) ② アプリC MQCONN(QMGRB) ③ クライアント2 アプリA MQCONN(QMGRB) ④ 52 ■ □ 【チャネル定義】 名称:TO.QMGRB タイプ:SVRCONN 最大インスタンス数:6 (MAXINST) クライアント毎 最大インスタンス数:2 (MAXINSTC) ④ アプリB MQCONN(QMGRB) ⑤ アプリC MQCONN(QMGRB) ⑥ ■ □:MAXINSTの カウント対象 ■:MAXINSTCの カウント対象 非同期メッセージ送信 キュー・マネージャーからの応答を待つことなく、非同期にメッセージをキューに書き込む機能 MQPUTの応答時間が短縮 キューにメッセージが書き込まれた事をそのつど確認する必要のないアプリケーションのパフォーマンス が向上 MQクライアント・アプリ MQクライアント・ ライブラリ サーバー接続チャネル MQPUT 応答コードMQCC_OKは、メッセージがキュー・マネージャに 書き込まれる前に返される (非同期処理) キュー・マネージャー MQPUT MQCC_OK MQPUT MQCC_OK MQCC_OK MQPUT 非同期メッセージ送信の処理状況を取得 (MQSTATコール) MQCC_OK PUT状況 確認 非同期メッセージ送信を有効にするにはキューやアプリケーションでの設定が必要 キューのDEFPRESP属性で設定 アプリケーションで指定 MQI、BaseJavaアプリケーションはMQPMOで設定 –優先順位:MQPMOの設定 > キューのDEFPRESP属性の設定 JMSでの設定 –宛先オブジェクトにPUTASYCALLOWED(YES)を設定、かつ、キュー属性DEFPRESP(ASYNC)を設定 53 非同期メッセージ送信 非同期のMQPUTでは、即座に応答コード(正常終了)が返る メッセージがキューに正常に書き込まれたかどうかは判別できない キューにメッセージが書き込まれたかを確認するには、MQSTATコールを用いてキュー・マネー ジャーから応答コードを取得することが必要 MQクライアント・ ライブラリ MQクライアント・アプリ キュー・マネージャーに処理状況を 問い合わせる MQPUT ・・・ 実際にMQPUTが成功したかどうかは 分からない サーバー接続チャネル キュー・マネージャー MQCC_OK MQPUT MQCC_OK MQSTAT 54 非同期メッセージ送信の制限事項 ノン・パーシステントメッセージと同期点付きのパーシステントメッセージのみ、 非同期的にメッセージが送信される 同期点なしのパーシステント・メッセージを送信する場合、メッセージは同期的に送信される MQPUT(SYNCPOINT) MQPUT(NO_SYNCPOINT) パーシステント 非同期PUT可 同期(非同期PUT不可) ノン・パーシステント 非同期PUT可 非同期PUT可 MQPUT(SYNCPOINT)、MQPUT(NO_SYNCPOINT)を混ぜて発行することが可能 LOGICAL_ORDERを用いてのグループ・メッセージの非同期メッセージ送信は不可 自動的に同期通信に切り替わる MQクライアント側でGroupID、MsgSeqNumberを設定すれば非同期送信が可能 55 メッセージ先読み 一度のMQGETで複数のメッセージをキュー・マネージャーから先読みする機能 ノン・パーシステントメッセージがメッセージ先読みの対象 大量のノン・パーシステントメッセージを読み込む際のパフォーマンスが向上 MQクライアント・ ライブラリ MQクライアント・アプリ サーバー接続チャネル キュー・マネージャー MQGET MQGET バッファ (メモリ) メモリ) MQGETを呼び出すと、続くメッセージを先 読みする MQGET MQGET メッセージは一度メモリに格納され、 MQGETはメモリからメッセージを読み込 む メッセージ先読み有効にするにはキューやアプリケーションでの設定が必要 キューのDEFREADA属性で設定 アプリケーションの指定 MQI、BaseJavaアプリケーションはMQOO (MQ Open Option)で設定 –優先順位:MQOOの設定 > キューのDEFREADA属性の設定 JMSでの設定 –宛先オブジェクトにREADAHEADALLOWED(YES)を設定 56 メッセージ先読み 先読みするメッセージの量や頻度の調整が可能 mqclient.iniファイルのMessageBufferスタンザで値を設定 Maximumsize (K bytes) –メッセージを読み込むバッファサイズを指定。メッセージはMaximumサイズ分先読みされる UpdatePercentage (%) –バッファに入っているメッセージが残り何%になったら再び先読みを行うかを指定 PurgeTime( seconds) –バッファに入っているメッセージを何秒で削除するか 57 メッセージ先読みの制限事項 ノン・パーシステントメッセージのみメッセージ先読みが可能 パーシステント・メッセージの場合、メッセージ先読み機能は自動的にOFFになる 同期点つきのMQGETは不可 メッセージ先読み開始前、MQGMO_SYNCPOINTを指定した場合 メッセージ先読み機能は自動的にOFFになる メッセージ先読み開始後、MQGMO_SYNCPOINTを指定した場合 MQRC_OPTIONS_ERRORが返る MQGET(SYNCPOINT) MQGET(NO_SYNCPOINT) パーシステント 不可 不可 ノン・パーシステント 不可 可 MQクライアントで接続のみメッセージ先読みが可能 ローカル接続の場合、メッセージ先読み機能は自動的にOFFになる 58 MQクラスター 59 MQクラスターとは MQクラスターとは 論理的に関連付けられたキュー・マネージャーの集合 特徴 MQクラスターでは、キュー定義をMQクラスター内キュー・マネージャーに公開することが可能 公開されたクラスター・キューへは、リモート定義なしにメッセージ送信が可能 公開された情報は一元管理され、クラスター・キューへのメッセージ送信に必要なオブジェクトは自動定義 される 送信側アプリケーションは、宛先キューがどのキュー・マネージャーにあるのか意識する必要がない MQクラスター内では、キュー・マネージャー間のメッセージ・チャネルは自動作成される システムを停止させずにキュー・マネージャーやキューをクラスター環境に追加できる QM1 ラウンド・ロビン HA製品などと組み合わせることも可能 QM4 クラスター構成例 Q1 QM2 より高い可用性を実現 QM2 Q1 HA構成 QM3 送信側は、宛先キュー名 を意識するだけでよい 60 MQCONN QM4 MQOPEN Q1 MQPUT Q1 Q1 MQクラスターの利点 負荷分散 ワークロード管理アルゴリズムによって、同じ名前のキュー間でのメッセージ割り振りが可能 高可用性の実現 キュー・マネージャーが障害を受けると宛先候補から外され、残りの正常なキュー間で処理 キュー・マネージャーが使用可能な状態に戻ると、自動的に宛先対象となる システム管理作業の軽減 メッセージ送信に必要となるオブジェクトは自動定義される 構成の変更がより早く、簡単になり、定義ミスも削減 クラスター情報は一元管理される 61 負荷分散 WLM(ワークロード・マネージャー)によるメッセージの振り分けが可能 複数キュー・マネージャー上の同一名称のクラスター・キューへ宛先振り分け(ラウンド・ロビン) が可能 メッセージの最終宛先キュー・マネージャーは、WLM により決定 振分方法は2つあり、送信アプリケーションのMQOPEN時のBINDオプションにて指定 MQPUT単位(メッセージ単位)で振分 MQOPEN単位で複数メッセージを同一キューに振分 単純なラウンド・ロビンに加え、重み付けや優先順位を考慮した振り分けが可能(後述) 送信アプリケーション MQCONN QM1 MQOPEN Q1 MQPUT 受信アプリケーション QM2 WLMによる振り分け Q1 MQCONN QM2 MQOPEN Q1 MQGET クラスター・キュー Q1に送信 QM1 QM3 Q1 MQCONN QM3 MQOPEN Q1 MQGET クラスター・キュー QM4 Q1 クラスター・キュー 62 MQCONN QM4 MQOPEN Q1 MQGET 可用性向上 宛先キュー・マネージャーの障害発生時には、残りの正常稼働キュー・マネージャーで メッセージを振り分け キュー・マネージャーの障害を検知後、宛先対象から外れる 障害が復旧すれば、自動的にラウンド・ロビン対象に復帰 システム停止なしで、キュー・マネージャーやキューなどのリソースをクラスターに追加可能 キュー・マネージャーの障害発生時は宛先か ら外れる QM2 MQCONN QM1 MQOPEN Q1 MQPUT QM1 QM3 QM4 それ以外の条件でも宛先から外される ・キューのPUT(DISALBED) ・キュー・マネージャーのSUSPEND ・キュー・マネージャー・ダウン ・H/W、サーバー障害 ・ネットワーク障害 ・チャネル障害 Q1 Q1 Q1 新規追加する クラスター・キュー WLMによる振り分け QM5 Q1 キュー・マネージャーの再起動などは不 要、MQクラスター内キュー・マネージャー の処理を継続したまま新規定義を追加 可能 63 システム管理の軽減 メッセージ送信に必要なオブジェクトを自動定義 クラスター内のオブジェクト定義情報はフル・リポジトリを保持する・キュー・マネージャーが一元 管理 メッセージ送信に必要な情報は、リポジトリから取得 DQM構成で必要となるリモート・キュー、トランスミッション・キュー、宛先キュー・マネージャーに対する チャネルなどの定義が不要 構成の定義 / 変更がより早く、簡単になり、定義ミスも削減 CLUS QM1 QM4 フル・ フル・ リポジトリ Q1 QM2 リモート・キューなどの定義がなくても、 リポジトリからQ1の情報を受け取れ るので、メッセージング可能 リポジトリには、QM1、 QM2、QM4 のキューQ1 の情報などが含まれて いる Q1 QM3 64 フル・ フル・ リポジトリ Q1 Q1 ※用語に関しては後述 MQクラスターの構成要素 MQクラスター構成例 パーシャル・リポジトリ クラスター:CLUS_A クラスターキュー フル・リポジトリ QM3 QM1 クラスター・ トランスミッション・ キュー Q1 Q1 パーシャル・ リポジトリ クラスター・ トランスミッション・ キュー フル・ リポジトリ QM2 Q1 クラスター・ トランスミッション・ キュー 明示定義クラスター 受信チャネル QM4 Q1 フル・ リポジトリ Q1 パーシャル・ リポジトリ クラスター・ トランスミッション・ キュー 明示定義クラスター 送信チャネル 65 リポジトリ リポジトリ クラスターに参加するキュー・マネージャーは必ず1つ保持 MQクラスター内のキュー・マネージャー、キューに関する情報を保管 実体はキュー、情報はパーシステント・メッセージ – SYSTEM.CLUSTER.REPOSITORY.QUEUE (システム・デフォルト・オブジェクト) フル・リポジトリとパーシャル・リポジトリがある フル・リポジトリ MQクラスター内の全ての情報を保持するリポジトリ 可用性のもっとも高いシステムにフル・リポジトリを配置 (z/OS上など) フル・リポジトリを持つキュー・マネージャーをリポジトリ・キュー・マネージャーという 通常クラスター内に2つ構成する パーシャル・リポジトリ キュー・マネージャーが使用する情報のみを保持するリポジトリ 必要な情報は、フル・リポジトリ経由で受信 リポジトリ・キュー・マネージャー以外のキューマネージャーに存在 Q1へメッセージを送る ために必要な情報を 受信 MQOPEN Q1 全クラスター情報を 保持 MQクラスター QM1 QM2 フル・ リポジトリ Q1の 定義情報 パーシャル・ リポジトリ QM3 QM4 Q1 パーシャル・ フル・ リポジトリ リポジトリ 66 クラスター・キュー クラスター内で、キュー名だけでアクセス可能なキュー キュー属性CLUSTERにクラスター名を指定したキュー メッセージ送信に、リモート・キュー定義などが不要 ローカル・キュー、エイリアス・キュー、リモート・キューをクラスター・キュー化可能 送信アプリケーションはキューの存在する宛先キュー・マネージャー名を知らなくてもよい MQOPEN時にクラスター・キュー名を指定するだけ 複数キュー・マネージャー上に同一名のクラスター・キューを定義可能 WLMによる振り分けが可能 CLUSTER1 QM1 WLMによる振り分け QMa リモート定義なし でのアクセス CLQA クラスター・ クラスター・ キュー DEFINE QL(CLQA) CLUSTER(CLUSTER1) MQOPEN CLQA MQPUT QM2 CLQA クラスター・ クラスター・ キュー DEFINE QL(CLQA) CLUSTER(CLUSTER1) 67 クラスター・トランスミッション・キュー リモートにあるクラスター・キューへのメッセージ送信の際に使用される伝送キュー キュー・マネージャーにつき1つ定義される SYSTEM.CLUSTER.TRANSMIT.QUEUE(システム・デフォルト・オブジェクト) 全てのクラスター送信チャネルで共有 CLUSTER1 QM2 QM1 QC.QM2 MQPUT QC.QM2 MQPUT QC.QM3 クラスター・キュー SYSTEM.CLUSTER. TRANSMIT.QUEUE QM3 クラスター・キュー QC.QM3 68 クラスター・チャネル クラスターに参加しているキュー・マネージャー間で、クラスター情報やユーザー・データを やりとりするために使われるチャネル定義 各々のキュー・マネージャーでは、クラスター受信チャネル(CLUSRCVR)と クラスター送信チャネル(CLUSSDR)を1つずつ明示的に定義 クラスター送信チャネルはいずれか一方のフル・リポジトリ・キュー・マネージャーに向けて作成 クラスター受信チャネルは、CONNAMEに自身へ接続するための情報を設定してMQクラスターに公 開 クラスター内のキュー・マネージャーは、該当キュー・マネージャーへの接続が必要になると クラスター受信チャネルの情報を入手し、クラスター送信チャネルを自動定義して接続 69 クラスター・チャネル クラスター・チャネルは、明示的に定義するものと、自動定義されるものがある クラスター送信チャネル (CLUSSDR) クラスター受信チャネル (CLUSRCVR) 明示定義するチャネル 複数あるリポジトリ・キュー・マネージャーのうち、1つに対して1 本定義 Inbound用を1本定義 定義例 DEFINE CHL(TO.QM2) CHLTYPE(CLUSSDR) CONNAME(‘192.168.0.2(1414)’) CLUSTER(CLUS1) DEFINE CHL(TO.QM1) CHLTYPE(CLUSRCVR) CONNAME(‘192.168.0.1(1414)’) CLUSTER(CLUS1) 自動定義されるチャネル その他キュー・マネージャーに対して CLUSRCVR の情報を元 に、定義 クラスター内キュー・マネージャーからの接続要求に応じてクラス ター受信チャネル定義と同名のインスタンスが起動 - 同名のチャネル・インスタンスが複数起動することになる 備考 クラスター情報を送信するために、リポジトリ・キュー・マネー ジャーに対しては明示定義し、その他は自動定義 CLUSRCVR の情報がクラスター内に公開され、他キュー・マ ネージャーは、その情報を元に、CLUSSDR を自動定義可能 192.168.0.1 192.168.0.2 QM1 QM2 Q1 フル・ リポジトリ CLUS SDR CLUS SDR CLUS SDR CLUS CLUS RCVR RCVR CLUS CLUS RCVR RCVR CLUS SDR Q1 フル・ リポジトリ CLUS SDR CLUS SDR CLUS CLUS RCVR RCVR ※動的に作成された送信チャネルはDISPLAY CHANNEL コマンドでは見えないので注意 DISPLAY CLUSQMGRで確認する ステータスは参照可能(DISPLAY CHSTATUS) START、STOPは可能 192.168.0.3 QM3 明示定義 チャネル 自動定義 チャネル 70 MQクラスター関連コマンド クラスター構成情報を確認するコマンド DISPLAY CLUSQMGR クラスター内のキュー・マネージャー情報を出力 DISPLAY QCLUSTER クラスター内のキュー情報を出力 クラスター構成情報を管理するコマンド 通常はクラスター環境に問題が発生したり、リポジトリ情報に不整合が発生した場合に使用 通常のオペレーションでは使用しない REFRESH CLUSTER 保持しているクラスター情報の削除、およびフル・リポジトリに対して自身の情報の再送信 RESET CLUSTER 特定キュー・マネージャーのクラスター情報の削除、および、他のキュー・マネージャーへの使用不可通知 フル・リポジトリ・キュー・マネージャーでのみ実行可能 クラスター・キュー・マネージャーを一時停止 / 再開するコマンド SUSPEND QMGR キュー・マネージャーをクラスター内で一時停止状態にする RESUME QMGR 一時停止状態から復旧する 71 クラスター・キューへの送信方法 クラスター環境での、キューへの基本的な送信方法は3通り 1. 2. 3. 宛先の選択はQMGRにまかせ、各メッセージ(MQPUT)毎にメッセージを振り分け(①) 宛先の選択はQMGRにまかせ、MQOPEN単位でメッセージを振り分け(②) 特定のQMGRのクラスター・キューにメッセージを送信する(③) ① MQOPEN MQOO_BIND_NOT_FIXED MQOD.ObjectName=Q1 MQPUT(1) MQPUT(2) ② MQOPEN MQOO_BIND_ON_OPEN MQOD.ObjectName=Q1 MQPUT(1) MQPUT(2) MQCLOSE MQOPEN MQOO_BIND_ON_OPEN MQPUT(3) MQPUT(4) ③ MQOPEN MQOD.ObjectQMgrName=QM3 QM3 MQOD.ObjectName=Q1 MQPUT(1) MQPUT(2) WLM による振分 QM1 QM2 Q1 WLMにより 宛先決定 QM3 Q1 宛先明示 指定 72 方法 MQOD ObjectQMgrName MQPMO BINDオプション ① ブランク NOTFIXED ② ブランク OPEN ③ 指定(QM3) - 送信方法の指定 負荷分散の方法はアプリケーション内で指定 方法①、方法② ラウンド・ロビン MQOPEN - MQOO_BIND_*オプション で指定 オープン・オプション 選択されるキュー MQOO_BIND_ON_OPEN オープン時に宛先が決定され、同一オブジェクト・ハンドルを使用しPUTされた後続のメッセージ はすべて同一キューにPUTされる MQOO_BIND_NOT_FIXED MQPUT時にWLMによって動的に宛先が決定され、別のクラスター・キューに割り振られる MQOO_BIND_AS_Q_DEF (デフォルト) キューの属性DEFBIND(OPEN|NOTFIXED)に従う 方法③ 特定キュー・マネージャーへ送信 MQOD -ObjectQMgrName で指定 – 特定キュー・マネージャー上のクラスター・キューに送信する場合に指定 – ラウンドロビン対象にする場合はブランク 補足:MQOO_BIND_ON_OPEN 指定でQMGRによって選択された宛先が返されるMQODのフィールド MQOO_BIND_ON_OPEN指定時は、ResolvedQMgrNameに宛先Qmgr名がセットされる MQOO_BIND_NOT_FIXED指定時は、ResolvedQMgrName はブランクが返される -->最終宛先は、MQPUT時に動的に決定されるが、アプリケーションからは宛先の検知は不可能 フィールド名 入力 出力 (MQBYTE40) ○ × Windows NT SID用 ResolvedQName (MQCHAR48) × ○ 最終宛先キュー名 ResolvedQMgrName (MQCHAR48) × ○ 最終宛先キュー・マネージャー名 AlternateSecurityId 説明 73 MQODの指定と宛先の決定 MQODに指定するMQOD.ObjectName クラスター・キュー名を指定 MQOD.ObjectQMgrName ブランク、または宛先キュー・マネージャーを指定 ブランクの場合 MQOO_BIND_ON_OPENを指定すると、MQOPEN時に宛先キュー・マネージャーが決定される MQOO_BIND_NOT_FIXEDを指定すると、WLMによる振り分けが行われる MQODのObjectQMgrNameに明示的にキュー・マネージャー名をセットした場合 クラスター・キュー・マネージャーであれば、すべてクラスター・トランスミッション・キューに入れられる => ノン・クラスター・キューでもクラスター・チャネル経由でメッセージが送られる 入力されたMQOD 実際に設定される名前 ObjectQMgrName ObjectName ObjectQMgrName ObjectName 転送キュー名 ブランク ローカル・キュー (クラスター属性) WLMが設定したCLQMGR名 or MQPUT時に設定されるCLQMGR名 入力されたキュー名 SYSTEM.CLUSTER. TRANSMIT.QUEUE ローカル・キュー・マ ネージャー ローカル・キュー (クラスター属性) ローカル・キュー・マネージャー 入力されたキュー名 - ブランク ローカルにない クラスター・キュー WLMが設定したCLQMGR名 or MQPUT時に設定されるCLQMGR名 入力されたキュー名 SYSTEM.CLUSTER. TRANSMIT.QUEUE ローカルになく、 クラスター・QMまたは クラスターQMALIAS Not Resolved ObjectQMgrName or MQPUT時に設定されるCLQMGR名 入力されたキュー名 SYSTEM.CLUSTER. TRANSMIT.QUEUE 74 ワークロード・バランシングの制御 ラウンド・ロビンによる負荷分散(デフォルト) ローカルのキュー・マネージャーがキューを保持していればローカルのキューにPUT ローカルに存在しない場合、チャネルのステータス、キュー・マネージャー、キューのステータスを もとに宛先を決定 宛先候補が複数ある場合はラウンド・ロビンで決定 送信アプリケーション 受信アプリケーション QM2 MQCONN QM1 MQOPEN Q1 MQPUT Q1 MQCONN QM2 MQOPEN Q1 MQGET Q1 MQCONN QM2 MQOPEN Q1 MQGET Q1に送信 QM1 QM3 WLM によるラウン ドロビン QM4 MQCONN QM2 MQOPEN Q1 MQGET Q1 75 リモート・クラスター・キューを含めたラウンド・ロビン リモートにあるクラスター・キューも宛先として参加 クラスター内に定義してある同名のキューを対称にラウンド・ロビン デフォルトでは、接続するキュー・マネージャーに宛先クラスター・キューがあると、メッセージはすべてその キューに PUT キュー、またはキュー・マネージャーのCLWLANYQ属性で設定 デフォルト リモート・クラスター・キューを含める CLUS1 MQCONN(QM1) MQOPEN(CLQ) MQPUT MQPUT MQPUT CLQ CLQ CLUS1 CLQ CLQ MQCONN(QM1) MQOPEN(CLQ) MQPUT MQPUT MQPUT CLQ 76 CLUS.XMITQ CLQ 優先順位 キューやチャネルに付与された優先順位に従ってワークロード・バランシング 一番高いプライオリティーに設定されているチャネルやキューが使用される メッセージ送信時に、チャネルやキューのステータスを確認する 一番プライオリティーの高いものが使用不可になると、次点プライオリティーのキューやチャネルを使用 –復旧すると、再び振り分けの対象となる 優先順位は、チャネルの値が判断され、次に キュー の値が判断される チャネル、またはキューのCLWLPRTY属性で設定 チャネルの優先度 を先に参照 障害時 正常時 QM2 QM2 CLQ 優先度 1 MQCONN(QM1) MQOPEN(CLQ) MQPUT MQPUT MQPUT MQCONN(QM1) MQOPEN(CLQ) MQPUT MQPUT MQPUT TO.QM2 優先度 2 QM1 QM1 QM3 QM3 CLQ 優先度 2 CLQ 優先度 2 TO.QM3 優先度 1 CLQ 優先度 1 TO.QM2 優先度 2 TO.QM3 優先度 1 77 重み付け チャネルに設定された重み付けに応じてワークロード・バランシング チャネルがどのくらいの比重で使用されたかを判断し、送信先を決定 以下の例では、50:25:10 の割合で振分 チャネルのCLWLWGHT属性で設定 QM1 TO.QM1 重み 50 QM2 QM0 TO.QM2 重み 25 MQCONN(QM0) MQOPEN(CLQ) MQPUT ・・・・ TO.QM3 重み 10 QM3 補足 メッセージが送信されれば、その内容に関わりなく、チャネルは使用されたとみなされます。 たとえばクラスター内部情報を送受信するためにチャネルが使用されても、チャネルが使用されたと判断されます。したがって、 上記の例では重み付けが50、25、10と定義されていますが、必ずしもユーザー・メッセージが50:25:10で振り分けられるとは限 りません。 78 ランク キューやチャネルにランクの設定が可能 MQクラスターを跨ってReqest / Reply型のメッセージを行うような環境で使用 常に一番高いランクに設定されているキューやチャネルにメッセージを振分 一番ランクの高いものがすべて使用不可になっても、それよりも低いランクのものは使用されない ランクを高く設定することで、クラスター内のルートを固定することが可能 ランクは、まずチャネルの値が判断され、次に キュー の値が判断される チャネルやキューのCLWLRANK属性で設定 メッセージの経路 RANKが同じの場合のREPLYメッセージの経路 ここでのラウンド・ロビンを防ぐた め、QMG1⇔QMG2間のランク を下げ、経路を塞ぐ CLUS1 QMG1 CLUS2 QM1 (Qmgr Alias) 応答アプリ mqod.ObjectNam e=REPQ mqod.ObjectQMg rName=QM1 MQOPEN QM2 QM1 QMG2 REPQ CLUS.XMIT Q DEFINE QL(REPQ) CLUSTER() QM1 (Qmgr Alias) DEFINE QR(QM1) RNAME() RQMNAME(QM1) CLUSTER(CLUS2) 79 ネットワークの優先順位 ネットワークの二重化 ルーター障害などに備えて N/W を二重化 考慮点 デフォルトでは定義されたチャネル間でラウンド・ロビン 特定のネットワークを使用させる場合は、チャネルのNETPRTY属性を使用 同一宛先で NETPRTY の高いものが障害を受けると次の NETPRTY のを使用 NETPRTYの高いチャネ ルを使用 CLUS_A TO.QMGR1_A (NETPRYT=9) QMGRA TO.QMGR1_B (NETPRTY=0) QMGR1 フル・リポジトリ NETPRTYの高いチャネル が障害を受けると生きて いるチャネルを代替使用 error! TO.QMGR2_A (NETPRTY=0) ネットワークA QMGR2 フル・リポジトリ TO.QMGR2_B (NETPRTY=9) ネットワークB 80 ※ CLWLPRTY との違い CLWLPRTYは、宛先に関係なく最大 値を持つチャネルのみが使用される MQクラスター構成での考慮点 宛先キューが複数ある場合、メッセージは複数キュー・マネージャーにラウンド・ロビンさ れるので、メッセージの順序性は保証されない MQOPEN単位であれば、複数メッセージを同一宛先に送ることは可能 MQOPEN単位での追い越しは発生する 関連性のあるメッセージを同一宛先に送ったり、順序性を保証する必要がある場合は考慮 が必要 QM2 MQPUT単位でのラウンド・ロビンの例 CLQ QM1 MQOPEN Q1 MQPUT(1) MQPUT(2) MQPUT(3) ラウンド・ロビンされるので、 処理順序は保証されない CLQ QM3 受信側アプリケーションから参照可能なのは、接続先キュー・マネージャーがローカルに 保持するキューのみ クラスター・キューは、共用キューとは異なる QM2 CLQ QM1 CLQ QM3 81 <参考> MQクラスター環境の構築 新たなクラスター環境の作成 作成する環境 CLUS_A を構成 フル・リポジトリを持つキュー・マネージャーはQM1、QM2とする QM1とQM2で新たなクラスター環境 CLUS_A 192.168.0.1 QM1 フル・ フル・ リポジトリ TO.QM2 QM2 TO.QM1 フル・ フル・ リポジトリ Q1 192.168.0.2 82 MQCONN QM2 MQOPEN CLQ MQGET アクセスするには 別途接続が必要 <参考> MQクラスター環境の構築 作成手順 (前提:キュー・マネージャーは作成済み) キュー・マネージャーをフル・リポジトリに変更 ALTER QMGR REPOS(CLUS_NAME) CLUS_NAME クラスター名 CHL_NAME CLUS_NAME CONNAME チャネル名 クラスター名 自分のIPアドレスやホスト名(※) クラスター受信チャネルの定義 DEFINE CHL(CHL_NAME) CHLTYPE(CLUSRCVR) CLUSTER(CLUS_NAME) CONNAME(HOST_NAME) ※クラスター受信チャネルは、RECEIVERチャネルなどのin-boundチャネルとは異なり、自身のCONNAMEを定 義する。この定義情報を元に、リモートのキュー・マネージャーはクラスター送信チャネルを自動定義する。 クラスター送信チャネルの定義 DEFINE CHL(CHL_NAME) CHLTYPE(CLUSSDR) CLUSTER(CLUS_NAME) CONNAME(HOST_NAME) CHL_NAME CLUS_NAME CONNAME チャネル名 クラスター名 自分のIPアドレスやホスト名 83 <参考> MQクラスター環境の構築 クラスター構成手順 作業内容 作業場所 1. フル・リポジトリに変更 ALTER QMGR REPOS(CLUS_A) QM1、QM2 2. クラスター受信チャネルの作成 DEFINE CHL(TO.QM1) CHLTYPE(CLUSRCVR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.1(1414)’) QM1 3. クラスター受信チャネルの作成 DEFINE CHL(TO.QM2) CHLTYPE(CLUSRCVR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.2(1414)’) QM2 4. クラスター送信チャネルの作成 DEFINE CHL(TO.QM2) CHLTYPE(CLUSSDR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.2(1414)’) QM1 5. クラスター送信チャネルの作成 DEFINE CHL(TO.QM1) CHLTYPE(CLUSSDR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.1(1414)’) QM2 クラスター送信チャネルから定義すると警告メッセージが出力されるため、クラスター受信チャネルから定 義することを推奨 「AMQ9419:クラスター受信チャネルがありません。」 チャネル(TO.QM1、TO.QM2)は自動起動される チャネルが接続されるとクラスターに参加し、クラスター・キューを使用可能 84 <参考> MQクラスター環境の構築 両方のキュー・マネージャーで、クラスター構成ができたことを確認 以下は、QM1上での確認例 MQクラスター(CLUS_A)に属しているキュー・マネージャーの情報の表示 DISPLAY CLUSQMGR(*) AMQ8441: クラスター・キュー・マネージャーの詳細を表示します。 CLUSQMGR(QM1) CHANNEL(TO.QM1) CLUSTER(CLUS_A) AMQ8441: クラスター・キュー・マネージャーの詳細を表示します。 CLUSQMGR(QM2) CHANNEL(TO.QM2) CLUSTER(CLUS_A) チャネル状況の稼動状況の確認 DISPLAY CHSTATUS(*) AMQ8417: チャネル状況の内容を表示します。 CHANNEL(TO.QM2) CHLTYPE(CLUSSDR) CONNAME(192.168.0.2 (1414)) CURRENT RQMNAME(QM2) STATUS(RUNNING) SUBSTATE(MQGET) XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE) AMQ8417: チャネル状況の内容を表示します。 CHANNEL(TO.QM1) CHLTYPE(CLUSRCVR) CONNAME(192.168.0.1) CURRENT RQMNAME(QM1) STATUS(RUNNING) SUBSTATE(RECEIVE) XMITQ( ) 85 <参考> MQクラスター環境の構築 パーシャル・リポジトリを持つキュー・マネージャーをクラスターに追加 追加する定義 QM3 をクラスター CLUS_A に追加 クラスター・キューをキュー・マネージャー QM3 上に追加 追加する定義 CLQ1をクラスター・キューとして、CLUS_A に公開 CLUS_A 定義する クラスター 送信チャネル 192.168.0.1 QM1 フル・ フル・ リポジトリ 192.168.0.3 QM3 QM2 CLQ1 フル・ フル・ リポジトリ Q1 192.168.0.2 追加する クラスター キュー 定義する クラスター 受信チャネル 86 <参考> MQクラスター環境の構築 パーシャル・リポジトリを持つキュー・マネージャーの追加手順 明示的に接続するリポジトリ・キュー・マネージャーの決定 明示的に接続するキュー・マネージャーは1つでよい ここではQM1とする クラスター受信チャネルの定義 → 83ページ参照 クラスター送信チャネルの定義 → 83ページ参照 両チャネルを定義した時点でチャネルが自動起動 チャネルが接続されると自分の情報を送信し、フル・リポジトリからクラスター情報を受信 クラスター・キューの定義 DEFINE QL(QUEUE_NAME) CLUSTER(CLUS_NAME) QUEUE_NAME CLUS_NAME キュー名 クラスター名 実際の追加作業 クラスター受信 / 送信チャネルの定義 (QM3上で定義) 1. クラスター受信チャネルの作成 DEFINE CHL(TO.QM3) CHLTYPE(CLUSRCVR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.3(1414)’) 2. クラスター送信チャネルの作成 DEFINE CHL(TO.QM1) CHLTYPE(CLUSSDR) CLUSTER(CLUS_A) CONNAME(‘192.168.0.1(1414)’) クラスター・キュー CLQ1 の追加 (QM3上で定義) 1. クラスター・キューの作成 DEFINE QL(CLQ1) CLUSTER(CLUS_A) 87 <参考> MQクラスター環境の構築 キュー・マネージャーがクラスターに追加されたかを確認 85ページ参照 クラスター・キューが追加されたかを確認 リポジトリ・キュー・マネージャー QM1、QM2 上で確認 リポジトリ・キュー・マネージャー上では、クラスター・キュー定義が見える DISPLAY QCLUSTER(*) CLUSQMGR PUT AMQ8409: キューの内容を表示します。 QUEUE(CLQ) TYPE(QCLUSTER) CLUSQMGR(QM3) PUT(ENABLED) 88