IBM MQ HA

MQ项目IBM MQ 安装

144.131.254.177 A机)和144.131.254.178(B) 两台机器上安装MQ Cluster环境.配置共享磁盘 /mqha

  1. 安装前检查环境

df –h

保证有足够的空间

2. 创建mqm用户和组

Groupadd –g 1000 mqm

Useradd –u 1000 –g mqm –d /home/mqm –m mqm

保证AB用户和组id相同

3. 软链接到共享磁盘

1)先挂载共享盘到A

在共享盘上创建文件系统/mqha

在文件系统/mqha目录下创建2个文件夹/opt/mqm /var/mqm

Cd /opt

Ln –s /mqha/opt/mqm mqm

Cd /var

Ln –s /mqha/var/mqm mqm

2)再挂载共享盘到B

Cd /opt

Ln –s /mqha/opt/mqm mqm

Cd /var

Ln –s /mqha/var/mqm mqm

4. 上传介质到A,B机的/home/mqm

解包 tar xvf MQv7.0.1_Linux_32bit.tar

5. 安装MQ二进制文件

A机上挂载共享盘

1)进入安装目录,执行命令root 执行

./mqlicense.sh -accept

接收license协议

2)执行rpm -ivh *.rpm

安装所有MQ安装package

B机上挂载共享盘,重复1-2,安装好MQ二进制代码

6. 创建队列管理器

A,B机的任意一端挂载共享盘

使用mqm身份执行

Crtmqm test (创建test队列管理器)

Strmqm test (启动test队列管理器)

Dspmq (查看队列管理器状态)

Endmqm test (关闭test队列管理器)

Umount共享文件系统

挂载到另外一边

Dspmq (查看队列管理器状态)

Strmqm test (启动test队列管理器)

如果启动成功说明A,B机都可以正常启动MQ

然后在HA脚本里添加队列管理器起停命令

 

附件 MQ基本命令和参数

  1. 队列管理器
    1. 创建队列管理器

命令:crtmqm <qmgrName>

示例:

crtmqm -ld /var/mqm/log -lc -lf 16384 -lp 25 -ls 5 QMCIS

参数说明:

-ld 日志文件目录

-lc 使用循环日志

-lf 日志文件页大小

-lp 主日志文件个数

-ls 辅助日志文件个数

QMCIS:队列管理器名

  1. 启动队列管理器

命令:strmqm <qmgrName>

停止队列管理器

命令:endmqm -c|-w|-i|-p <qmgrName>

参数说明:

-c      受控关闭(或停顿关闭)。这是缺省值。

队列管理器停止,但仅当所有应用程序已断开连接后才停止。当前正在处理的任何 MQI 调用已完成。

立即将控制权返回给您,并且不通知您队列管理器是何时停止的。

对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。

-w 等待关闭。

此类型的关闭等效于受控关闭(除了仅当队列管理器已停止后才将控制权返回给您之外)。当执行关闭时,您将接收到消息:等待队列管理器 qmName 结束。

对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 QUIESCE 方式发出的 STOP CHANNEL 命令。

-i 立即关闭。队列管理器在完成所有当前正在处理的 MQI 调用后停止。任何在该命令发出后发出的 MQI 请求都将失败。当队列管理器再次启动时,任何未完成的工作单元将回滚。

队列管理器结束后返回控制权。

对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 FORCE 方式发出的 STOP CHANNEL 命令。

-p 抢先关闭。

仅在意外情况下使用此类型的关闭。例如,当队列管理器在常规 endmqm 命令下未停止。

队列管理器可以停止而不等待应用程序断开连接或 MQI 调用完成。这可能会产生 WebSphere MQ 应用程序的不可预测的结果。关闭方式设置为立即关闭。如果队列管理器稍后未停止,关闭方式将升级,且终止所有剩余的的队列管理器进程。

对通过服务器连接通道连接的任何客户机应用程序的影响等效于以 TERMINATE 方式发出的 STOP CHANNEL 命令。

  1. 删除队列管理器

命令:dltmqm

  1. 显示队列管理器启动状态

命令:dspmq

命令结果显示示例

QMNAME(Test) STATUS(正在运行)

QMNAME(Test2) STATUS(已正常结束)

  1. 管理本地MQ对象

使用 MQSC 命令执行本地管理任务

使用MQSC命令执行定义或修改队列、通道等操作。MQSC命令可以有以下两种使用方式:

  • 交互地使用 MQSC 命令:runmqsc [qmgrName]
  • 从文本文件运行 MQSC 命令:runmqsc [qmgrName] < myprog.in > myprog.out

 

命名 WebSphere MQ 对象的规则

WebSphere MQ 认证信息、通道、客户机通道、侦听器、名称列表、进程、队列、服务和存储类对象存在于各自独立的对象名称空间中,因此,每个不同类型的对象都可以有相同的名称。但是,同一个名称空间中的对象不能与任何其它的对象同名。(例如,本地队列不能和模型队列有相同的名称。)WebSphere MQ 中的名称都区分大小写;但是,您应该记住不包含在引号中的小写字符将转换为大写。

显示或修改队列管理器属性

display qmgr (display可简写为dis)

示例:

alter qmgr CCSID(819)        #修改字符集

def ql(DEADQ) defpsist(yes) maxdepth(20000) replace

alter qmgr deadq(DEADQ)    #设置死信队列为DEADQ

 

  1. 队列

    1. 定义本地队列示例

def ql(FROMCCPC_1) maxdepth(10000) defpsist(yes) replace

参数说明:

  • ql(FROMCCPC_1):队列本地名称
  • maxdepth:队列上允许的最大消息数;
  • defpsist:队列中消息持久性默认值。

    NO 该队列上的消息在队列管理器重新启动时丢失

    YES 该队列上的消息在队列管理器重新启动时保存了下来。

 

关于消息在队列中的保存时间:消息在队列的保存时间与三个设置有关:队列defpsist属性、消息Persistence持久性属性和消息Expiry消息到期时间属性,其中队列defpsist属性是在创建队列时设置,消息PersistenceExpiry属性是应用程序往队列放入消息时指定。消息本身的Persistence值优先于队列defpsist值。Expiry指消息到期时间,即经过指定的时间后,消息如果还没被取走,此消息将过期(无效)。消息过期后,可能会自动从队列中删除(取决于不同操作系统的MQ实现)。对于非持久性消息,即使Expiry设为永不过期,重启队列管理器时,消息也将丢失。

  1. 定义远程队列示例

def qr(TOCCPC_1) rname(5819_1) rqmname(QMC5819) xmitq(QMGF) defpsist(yes) replace

参数说明:

  • qr(TOCCPC_1):队列本地名称,名字可任意取;
  • rname(5819_1):远程队列名,必须与远程队列管理器中的本地队列名相同;
  • rqmname(QMC5819):远程队列管理器名,必须与远程队列管理器名相同;
  • xmitq(QMGF):本地传输队列名称。
  1. 定义传输队列示例

def ql(QMGF) usage(XMITQ) defpsist(YES) maxdepth(50000) trigger trigtype(FIRST) trigdata(999581030604.5819) initq(SYSTEM.CHANNEL.INITQ) replace

参数说明:

  • ql (QMGF):队列本地名称,名字可任意取;
  • usage(XMITQ):指定此本地队列为传输队列,参数值固定填"XMITQ";
  • trigger:启动触发(相应的,NOTRIGGER为禁用触发)
  • trigtype(FIRST) :触发方式,建议值为"FIRST",即第一条消息触发;
  • trigdata(999581030604.5819):触发数据,值为传输队列将使用的发送通道名;
  • initq(SYSTEM.CHANNEL.INITQ):触发队列,固定填"SYSTEM.CHANNEL.INITQ"。

触发器在此的作用是当传输队列接收到第一条消息时,将触发启动指定的发送通道。

  1. 查看队列

dis ql(qname) all    显示队列所有属性

dis ql(qname) curdepth 显示队列当前深度,即当前队列中存放的消息数

dis qs(qname) type(queue) all显示与队列相关的状态信息

dis qs(qname) type(handle) all显示与访问队列的句柄相关的状态信息

  1. 删除队列

delete ql(qname)

  1. 删除队列中的消息

clear ql(qname)

注:删除队列中的消息时出错时处理

尝试执行命令RESOLVE CHANNEL(channel_name) ACTION( COMMIT )后,再执行clear ql命令。

  1. 通道

    1. 定义接收通道

def chl(999581000107.5819) chltype(rcvr) trptype(tcp) replace

参数描述:

  • chl(999581000107.5819):接收通道名称,必须与远程队列管理器中的发送对列名称相同。推荐的命名规则为 "远程队列管理器名.本地队列管理器名";
  • chltype(rcvr):指定通道为类型,值固定为"rcvr";
  • trptype(tcp):通讯协议,除非特别指明,一般采用"tcp"协议。
  1. 定义发送通道

def chl(5819.999581000107) chltype(SDR) discint(0) conname('10.2.106.106(1417)') xmitq(QMCIS) trptype(tcp) replace

  1. 定义服务器连接通道

def chl() chltype() replace

  1. 删除通道

Delete chl(channel name)

  1. 查看通道状态

dis chs(channel name)

通道的当前状态,它可以是正在启动、正在绑定、正在初始化、正在运行、正在停止、正在重试、已暂停、已停止、正在请求和通道状态未找到。

正常运行时,通道状态为"正在运行";

关闭通道时,通道状态为"已停止";

如果通道状态长时间处于"正在绑定"(binding)、"正在重试"(retrying),则表明通道不正常,需要人工介入。这时可查看队列管理器日志文件,日志文件中一般会提供异常原因。

关于"通道状态未找到":此状态值仅表示当前没有建立到此通道的连接,并不能表示通道是否正常。

  1. 启动通道

Start chl(channel name)

  1. 关闭通道

Stop chl(channel name)

  1. 重置通道

reset chl(channel name)

  1. 监听器

定义监听器

def listener(QMC5819) TRPTYPE(TCP) PORT(1417) CONTROL(STARTONLY) BACKLOG(0) replace

参数描述:

  • listener(QMC5819):监听器名,名称可任意取;
  • TRPTYPE(TCP):通讯协议类型;
  • PORT(1417):服务监听端口
  • CONTROL(string)指定如何启动和停止侦听器:

    MANUAL 不会自动启动或自动停止侦听器。通过使用 START LISTENER 命令和 STOP LISTENER 命令来控制它。这是缺省值。

QMGR     当队列管理器启动和停止时,同时启动和停止被定义的侦听器。

STARTONLY 当队列管理器启动时,同时启动侦听器,但当队列管理器停止时,不请求停止侦听器。

  1. 启动监听器

start listener(QMC5819)

  1. 关闭监听器

stop listener(QMC5819)

  1. 查看监听器状态

dis lsstatus(LISTENER.TCP) all (L) all

 

posted on 2017-08-27 22:09  tonkai  阅读(1011)  评论(0编辑  收藏  举报

导航

tonkai