본문 바로가기

IBM

Creating a multi-instance queue manager for WebSphere MQ on UNIX with auto client reconnect

http://www.ibm.com/developerworks/websphere/library/techarticles/1104_murthy/1104_murthy.html?ca=drs-


MQ V7이상의 새로운 확장성 기능을 사용하여, multi-instance queue manager를 위한 구성정보 및 데이터(message / data)를 NAS에 위치하며, NFS(Network File System) 프로토콜 V4이상을 통해 접근하여 구성한다. multi instance는 active & Standby mode로 물리적으로 분리된 위치에 거주한다. active queue manager(qmgr) instance는 AP나 다른 qmgr로 부터의 connection 연결 또는 메시지 처리를 수행한다. 이 시점의 active QMGR은 NAS의 구성정보 및 데이터를 저장하고 있는 파일 시스템을 lock을 점유하고 있다. standby qmgr은 주기적으로 active qmgr instance가 running 상태인지 상태 점검을 하며, 만일 active qmgr의 상태가 fail이거나 연결되지 않는 경우, active qmgr이 공유 저장 공간에서 점유하고 있는 data를 release한 시점에 active 상태로 변경된다. 



 

Prerequisites

Prerequisites

  • Multi-instance가 구성될 두 장비에 MQ V7.0.1 이상을 설치 및 구성한다.
  • 해당 machine에는 mqm group의 mqm user를 생성.
  • 두 머신의 mqm user 및 mqm group은 uid / gid를 가져야 함..
  • Machine1:
    • id mqm: uid=301(mqm), gid=301(mqm)
  • Machine2:
    • id mqm: uid=301(mqm), gid=301(mqm)

Setting up NFS on AIX

In this example, NFS server = axion, exported directory = /HA, and NFS client = hurlqc.

 

28: root/root

29: administrator/root

 

http://www.ibm.com/developerworks/websphere/library/techarticles/1011_gupta/1011_gupta.html

mkdir -p /nas/WMQ/OZA/data

mkdir -p /nas/WMQ/OZA/logs

mkdir -p /nas/WMB/OZA

mkdir -p /nas/WMQ/OZB/data

mkdir -p /nas/WMQ/OZB/logs

 

1번 서버.

1) crtmqm -md /nas/WMQ/OZA/data -ld /nas/WMQ/OZA/logs -lp 5 -ls 3 -lc -lf 16384 OZA

2) wmb1:/var/mqm>dspmqinf -o command OZA
addmqinf -s QueueManager -v Name=OZA -v Directory=OZA -v Prefix=/var/mqm -v DataPath=/nas/WMQ/OZA/data/OZA

2번 서버

3) addmqinf -s QueueManager -v Name=OZA -v Directory=OZA -v Prefix=/var/mqm -v DataPath=/nas/WMQ/OZA/data/OZA

4) crtmqm -md /nas/WMQ/OZB/data -ld /nas/WMQ/OZB/logs -lp 5 -ls 3 -lc -lf 16384 OZB

5) dspmqinf -o command OZB
addmqinf -s QueueManager -v Name=OZB -v Directory=OZB -v Prefix=/var/mqm -v DataPath=/nas/WMQ/OZB/data/OZB

1번서버

6) addmqinf -s QueueManager -v Name=OZB -v Directory=OZB -v Prefix=/var/mqm -v DataPath=/nas/WMQ/OZB/data/OZB
WebSphere MQ configuration information added.

7) 확인

1번서버) dspmq

wmb1:/var/mqm>dspmq
QMNAME(TEST)                                              STATUS(Running)
QMNAME(OZA)                                               STATUS(Ended immediately)
QMNAME(OZB)                                               STATUS(Ended immediately)

2번서버) dspmq
QMNAME(OZA)                                               STATUS(Ended immediately)
QMNAME(OZB)                                               STATUS(Ended immediately)

* Start MI QMGR

1) 1번서버: strmqm -x OZA -> endmqm -si OZA

2) 2번서버: strmqm -x OZB

3) 1번서버: strmqm -x OZB

4) 2번 서버: strmqm -x OZA

* Create WMQ Cluster

1) 1번서버 OZA: define listener(OZALISTENER1) trptype(tcp) port(1414) control(qmgr) => start listener(OZALISTENER1)

2) 2번서버 OZB: define listener(OZBLISTENER2) trptype(tcp) port(1415) control(qmgr) => start listener(OZBLISTENER2)

1번/2번서버에서: ALTER QMGR REPOS(OZCLUSTER)

Create channels between full repository and partial repository queue managers

1번서버)

DEFINE CHANNEL (TO.OZA) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('wmb1(1414), wmb2(1414)') CLUSTER(OZCLUSTER)

DEFINE CHANNEL(TO.OZB) CHLTYPE(CLUSSDR) TRPTYPE(TCP) CONNAME('wmb1(1415), wmb2(1415)') CLUSTER(OZCLUSTER)

2번서버)

DEFINE CHANNEL(TO.OZB) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('wmb1(1415), wmb2(1415)') CLUSTER(OZCLUSTER)

DEFINE CHANNEL(TO.OZA) CHLTYPE(CLUSSDR) TRPTYPE(TCP) CONNAME('wmb1(1414), wmb2(1414)') CLUSTER(OZCLUSTER)

 

Configuring WebSphere Message Broker

1) 1번서버: mqsicreatebroker OZA -q OZA -e /nas/WMB/OZA

2) 2번서버: mqsicreatebroker OZB -q OZB -e /nas/WMB/OZB

3) 2번서버: mqsiaddbrokerinstance OZA -e /nas/WMB/OZA

4) 1번 서버: mqsiaddbrokerinstance OZB -e /nas/WMB/OZB

* 시작

1) 1번서버: mqsistart OZA => 2번서버: mqsistart OZA

2) 2번서버: mqsistart OZB ==> 1번서버: mqsistart OZB

* Create DataFlowEngine

1번서버: mqsicreateexecutiongroup OZA -e OZEG

2번서버: mqsicreateexecutiongroup OZB -e OZEG
 

 

http://www.ibm.com/developerworks/websphere/library/techarticles/1108_gupta/1108_gupta.html?ca=drs-

 

define qlocal(NAME.IN) cluster(OZCLUSTER)

define qlocal(NAME.OUT) cluster(OZCLUSTER)

define qlocal(MST.IN) cluster(OZCLUSTER)

define qlocal(MST.OUT) cluster(OZCLUSTER)

define qlocal(ITN.IN) cluster(OZCLUSTER)

define qlocal(ITN.OUT) cluster(OZCLUSTER)

 

define qlocal(SRH.IN) cluster(OZCLUSTER)

define qlocal(SRH.OUT) cluster(OZCLUSTER)

define qlocal(SRH.RTN.IN) cluster(OZCLUSTER)

define qlocal(SRH.RTN.OUT) cluster(OZCLUSTER)

 

define qlocal(NAME.EVENT.IN) cluster(OZCLUSTER)

define qlocal(NAME.EVENT.OUT) cluster(OZCLUSTER)

 

define qlocal(FTP.NAME.IN)

define qlocal(FTP.NAME.OUT)

define qlocal(FTP.MST.IN)

define qlocal(FTP.MST.OUT)

define qlocal(FTP.ITN.IN)

define qlocal(FTP.ITN.OUT)

define qlocal(FTP.SSR.IN)

define qlocal(FTP.SSR.OUT)

 

Partially Cluster

1) crtmqm -lp 5 -ls 3 -lc -lf 16384 OZD

2) define listener(OZLISTENER4) trptype(tcp) port(1417) control(qmgr)

define listener(OZCLISTENER3) trptype(tcp) port(1416) control(qmgr)

start listener(OZCLISTENER3)

DEFINE CHANNEL(TO.OZC) CHLTYPE(CLUSRCVR) TRPTYPE(TCP) CONNAME('wmb3(1416)') CLUSTER(OZCLUSTER)

DEFINE CHANNEL(TO.OZA) CHLTYPE(CLUSSDR) TRPTYPE(TCP) CONNAME('wmb1(1414), wmb2(1414)') CLUSTER(OZCLUSTER)

start chl(TO.OZC)

dis clusqmgr(*)

DISPLAY CHSTATUS(*)

 

 

* Monitor QMGR 연계

1. OZA / OZB / OZC

def ql(EVENT.XQ) usage(XMITQ)

define qremote(EVENT.RQ) rname(EVENT.LQ) rqmname(OZM) xmitq(EVENT.XQ)

define channel(OZB.TO.OZM) chltype(SDR) conname('mon(1417)') trptype(TCP) xmitq(EVENT.XQ)

ping channel(OZA.TO.OZM)

//-----------

define qlocal(NAME.OUT) cluster(OZCLUSTER)

define qlocal(MST.OUT) cluster(OZCLUSTER)

define qlocal(ITN.OUT) cluster(OZCLUSTER)

//------------

OZA / OZB

define qremote(SRH.OUT.RQ) rname(SRH.OUT.ALQ) rqmname(OZM) xmitq(EVENT.XQ)

define qremote(SRH.OUT.RQ) rname(SRH.OUT.BLQ) rqmname(OZM) xmitq(EVENT.XQ)

OZM

define ql(SRH.OUT.ALQ)

define ql(SRH.OUT.BLQ)

define ql(EVENT.ALQ)

define ql(EVENT.BLQ)

 

OZM

def ql(SRH.AXQ) usage(XMITQ)

def ql(SRH.BXQ) usage(XMITQ)

define qremote(SRH.RTN.ARQ) rname(SRH.RTN.IN) rqmname(OZA) xmitq(SRH.AXQ)

define qremote(SRH.RTN.BRQ) rname(SRH.RTN.IN) rqmname(OZB) xmitq(SRH.BXQ)

define channel(OZM.TO.OZA) chltype(SDR) conname('wmb1(1414)') trptype(TCP) xmitq(SRH.AXQ)

define channel(OZM.TO.OZA) chltype(SDR) conname('wmb2(1414)') trptype(TCP) xmitq(SRH.AXQ)

define channel(OZM.TO.OZB) chltype(SDR) conname('wmb2(1415)') trptype(TCP) xmitq(SRH.BXQ)

define channel(OZM.TO.OZB) chltype(SDR) conname('wmb1(1415)') trptype(TCP) xmitq(SRH.BXQ)

 

OZA

define channel(OZM.TO.OZA) chltype(RCVR)

OZB

define channel(OZM.TO.OZB) chltype(RCVR)

 

 

 

2. OZM

crtmqm -lp 5 -ls 3 -lc -lf 16384 -u OZM.DQ OZM

define qlocal(OZM.DQ)

define channel(OZA.TO.OZM) chltype(RCVR)

define channel(OZB.TO.OZM) chltype(RCVR)

define listener(OZMLISTENER) trptype(tcp) port(1417) control(qmgr)

define chl(SYSTEM.ADMIN.SVRCONN) chltype(SVRCONN)

 

* HttpListener

mqsichangeproperties OZB -b httplistener -o HTTPConnector -n maxKeepAliveRequests -v 30000

mqsichangeproperties OZB -b httplistener -o HTTPConnector -n port -v 7081

mqsichangeproperties OZA -b httplistener -o HTTPListener -n startListener -v true

mqsireportproperties  OZA  -b httplistener -o HTTPConnector -r

mqsireportproperties  OZB  -b httplistener -o HTTPConnector -r

mqsireportproperties OZB  -b httplistener -o HTTPListener -a
mqsichangeproperties OZA  -b httplistener -o HTTPConnector -n maxKeepAliveRequests -v 0
mqsichangeproperties OZA  -b httplistener -o HTTPConnector -n maxThreads -v 2000

qm.ini

 

Channels:
   MaxChannels=65535
   MaxActiveChannels=65535
   MQIBINDTYPE=FASTPATH
   AdoptNewMCA=ALL

*MB DB

mqsisetdbparms OZB -n OZORACLEODS -u bis_ods -p oracle

mqsichangebroker OZB -t

 

 

* Channel initiator

transmission Queue : QM4

트랜스미션 큐 작성 예
http://mqseries.net/manuals/intercommunication/csqzae064j.htm
DEFINE QLOCAL(QM2) DESCR('Transmission queue to QM2') USAGE(XMITQ)
채널(QM3.TO.QM4)을 시작하는 응용프로그램(프로세스 P1)을 트리거하기 위한 디폴트 이니시에이션 큐SYSTEM.CHANNEL.INITQ에 트리거 메시지를 기록하도록 지정하는 로컬 큐(QM4)를 정의하십시오.
DEFINE QLOCAL(QM4) TRIGGER INITQ(SYSTEM.CHANNEL.INITQ) PROCESS(P1) USAGE (XMITQ)
시작할 응용프로그램(프로세스 P1)을 정의하십시오.
DEFINE PROCESS(P1) USERDATA(QM3.TO.QM4)
 
/usr/mqm/bin/runmqchi

OZA to OZM                                  OZM

1) remote queue: EVENT.RQ                        -> local queue: EVENT.ALQ

2) transmission queue: EVENT.XQ                -> transmission queue:

3) sender channel: OZA.TO.OZM                  -> sender channel:

4) receiver channel: OZM.TO.OZA                -> recever channel:

5) reply to queue
 

'IBM' 카테고리의 다른 글

MQ & WAS(Websphere or weblogic)연동 가이드.  (0) 2011.09.26
WebSphere Application Server - SIBus Link  (0) 2011.09.21
WebLogic & WebSphere EJB 연동.  (0) 2011.08.17