WebSphere MQ 安装与验证

1.准备

1.1检查安装软硬件要求

检查MQ安装条件,SUSE Linux 64位安装要求如下:这里以最新9.0、8.0为例
– MQ 9.0 操作系统需要SUSE Linux Enterprise Server 12 SP1 x86-64,8.0 SUSE Linux 11 SP2即可即可
– HyperVisor虚拟化平台支持VMware ESXi 5.5以上,Hyper-V支持2012,KVM
– 支持的软件:WAS,gcc4.8以上,DB2 10.5.0.6,IBM JRE(大部分组件只支持自带的JRE)
– 磁盘空间需要1GB(服务器组件安装)、内存推荐3GB

具体见官网提供的各个平台的要求,其中版本MQ 9.0MQ 8.0

1.2安装须知

关于安装名称

  • 确定唯一的安装名称,默认以Installation1,2递增,Installation0保留给7.0.1 MQ安装名称
  • 安装名称安装成功以后,无法更改
  • 名称要求是大小写字母和数字,不允许空格,不区分大小写,最长16个字节
  • 安装描述信息,可以设置64字节的描述,允许中英文
  • linux下使用crtmqinst命令设置安装名称,setmqinst命令设置描述信息

多副本安装

  • MQ支持单机山安装多个副本(多个版本或者同一个版本的不同安装),通过不同安装位置区分
  • 单台机器最大支持128个副本安装
  • 多副本安装可以设置一个主副本,系统会创建环境变量和符号链接,部分管理脚本命令功能需要这些设置;
  • 支持MQ 7.0 fp6 以后的多副本安装,对于需要多副本安装7.0.1必须是第一个安装且自动是主安装副本
  • 在MQ 7之前,单机只能安装一个产品实例

单副本安装
– 从7.1版本开始,windows上MQ第一次安装副本默认设置为主副本,Linux需要手动配置(setmqinst命令)
– 建议设置主安装副本,这样MQ命令和库可以方便应用,会在/usr/lib,/usr/bin/,/usr/include下创建符号链接
– 对于非主安装副本,手动设置环境变量以及库路径配置,如LD_INSTALLATION_PATH

安装位置
– Linux默认安装位置/opt/mqm,工作数据目录/var/mqm
– Linux路径长度最大256字节,不允许空格
– 安装路径不能已安装MQ路径的子目录和部分路径
– 典型安装路径:/opt/IBM/MQ和/opt/IBM/MQnew 或者 /opt/IBM/MQ/installations/1和 /opt/IBM/MQ/installations/2

MQ安装组件(linux)
– Runtime(MQSeriesRuntime),运行时环境,必须安装(客户端和服务器端都需要)
– Server(MQSeriesServer),运行队列管理器和提供消息队列服务,服务器端需要
– Client(MQSeriesClient),MQ的很小的功能子集,连接Server组件,不提供队列管理器
– SDK(MQSeriesSDK),开发需要,用来编译应用程序
– Sample programs,示例程序
– Java messaging(MQSeriesJava),支持Java消息服务功能(JMS)
– Man pages,帮助文档,提供control命令,MQI命令,MQSC命令帮助
– Java JRE,必须,Java运行时,支持MQ部分Java编写的功能
– Message Catalogs,支持的语言
– Global Security Kit,支持加密安全认证功能,必须先安装JRE
– Telemetry Service(MQSeriesXRService),遥感通信MQTT协议,支持传感器等设备连接通信
– MQ Explorer,管理监控MQ
– Managed File Transfer,文件传输
– Advanced Message Security,更高级的安全保护,必须安装JRE和Security Kit
– AMQP Service,提供AMQP通道,支持MQ Light APIs

2.单机服务器安装MQ与验证

本文采用SUSE Linux Enterprise 11 x64 SP4系统,在虚拟机环境下安装,MQ选用8.0版本。
安装MQ之前需要先设置操作系统。

2.1 创建用户和用户组(可选步骤)

在Linux上,MQ需要创建安装用户mqm和用户组mqm(注意多系统或者多实例安装MQ时注意保证UID和GID一致),
该用户ID拥有MQ安装目录和文件的权限。默认MQ安装时,未发现mqm用户时,会自动创建。
需要指定特定的UID和GID作为MQ的安装用户,可以在安装先手动创建用户和用户组。
权限要求:普通用户必须属于mqm组,才有权限运行相关管理命令,例如crtmqm(创建队列管理器)和strmqm(启动队列管理器)命令

# groupadd -g 3000 mqm
# useradd -g mqm -u 3000 mqm 

2.2 解压下载好的MQ安装包

以root用户登录系统,安装包放在/home/mq目录下
# su - root
# cd /home/mq
# tar -xvf WSMQ_8.0_IFR_TRIAL_LNX_ON_X86_64_.tar.gz
解压缩以后,生成了server目录,主要包含了各个组件的rpm安装包,因此系统必须支持rpm安装方式

2.3 检查RPM包是否安装

# zypper se rpm
显示i表明已安装,或者直接敲rpm ? 命令,确定rpm命令可用

2.4 查看许可协议并接受(必须)

# cd /home/mq/server
# ./mqlicense.sh -text_only 
接受协议,才能继续安装

2.5 安装MQ Server组件

安装在默认位置/opt/mqm,如果需要改变加入--prefix /opt/mymq即可
# rpm -ivh MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm

出现警告:
WARNING: System settings for this system do not meet recommendations for this product 
See the log file at "/tmp/mqconfig.11472.log" for more information

查看错误信息:
# more /tmp/mqconfig.11472.log
发现linux 信号量、共享内存、系统文件数、进程数等设置未通过检查

修改系统配置内核参数,主要通过sysctl命令和/etc/sysctl.conf
修改conf文件,进行永久配置

查看当前设置
# sysctl -a | more
修改sysctl.conf文件,将 mqconfig.11472.log中未pass的参数修改
sp4 linux suse中主要有file-max、nofile未通过检测

# vim /etc/sysctl.conf
添加一行,注意空格
设置内核最大打开文件的数量
fs.file-max = 524288

查看系统对用户进程最大打开文件数量的限制
# su - mqm
# ulimit -n  显示1024,MQ需要10240
增加mqm用户最大打开文件数量
# su - root
# vim /etc/security/limits.conf
添加:
mqm hard nofile 10240
mqm hard nofile 10240
root hard nofile 10240
root hard nofile 10240

重新登录用户或者关闭当前console重新打开
# su - root
# ulimit -n
查看显示10240即为生效

# rpm -ivh MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm
提示:
package MQSeriesRuntime-8.0.0-2.x86_64 is already installed
package MQSeriesServer-8.0.0-2.x86_64 is already installed

可以先卸载
查询包名进行卸载
# rpm -q MQSeriesServer
# rpm -e MQSeriesServer-8.0.0-2
# rpm -q MQSeriesRuntime
# rpm -e MQSeriesRuntime-8.0.0-2

# cd /home/mq/server
# ./mqlicense
# rpm -ivh MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm
至此安装成功

2.6 验证安装是否成功

验证需要安装自带的示例包组件,即MQSeriesSamples-8.0.0-2.x86_64.rpm
验证的例子完成创建和配置队列管理器,发送消息到队列,以及从队列获取消息的功能
# rpm -ivh MQSeriesSamples-8.0.0-2.x86_64.rpm

# su - mqm
设置环境变量
~ cd /opt/mqm/bin
~ ./setmqenv -s
出现错误:
AMQ8595:The setmqenv command was not preceded by the source command
官方解释见[网站](http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.doc/amq8.htm)
需要以source命令执行,不是./或者bash setmqenv方式;
source方式或者. setmqenv -s :是在当前的shell中进行设置环境变量
bash setmqenv或者./setmqenv:会新开一个子shell进行设置,设置后返回父shell,设置的变量无法改变父shell

~ source setmqenv -s 
检查是否设置成功,执行查询mq版本信息命令
~ dspmqver

创建队列管理器QMA
~crtmqm QMA
启动队列管理
~strmqm QMA

启动MQ脚本解释器:
~runmqsc QMA

在脚本解释器里定义本地队列:
DEFINE QLOCAL (QUEUE1)

停止MQSC:
end

进入sample组件目录:
~cd /opt/mqm/samp/bin
~./amqsput QUEUE1 QMA
输入发送的测试消息:
test messages from john
test2 messages
敲入enter两次,以空行结束

从队列取回消息
~./amqsget QUEUE1 QMA

3.双机服务器方式安装MQ与验证

该方式需要两台服务器,并都安装MQ服务器,一台负责发送,一台负责接收消息,这是MQ常用场景。

3.1 准备

两台虚拟机A机(192.168.98.129),B机(192.168.98.130),两台必须能够相互网络通信,可以用ping测试
A机和B机按照上述单机服务器安装方式(2.1-2.5步骤,不需要2.6验证)安装好Server,Runtime,Sample三个组件。
其中A机作为发送服务器(sender),B机作为接收服务器(receiver)

3.2 配置B机

以root登录,切换到mqm用户
# su - mqm
~ cd /opt/mqm/bin
~ source setmqenv -s
~ crtmqm QMB
~ strmqm QMB
~ runmqsc QMB
输入:DEFINE QLOCAL (RECEIVER.Q) 定义本地队列RECEIVER.Q
继续输入:DEFINE LISTENER (LISTENER1) TRPTYPE (TCP) CONTROL (QMGR) PORT (1414) 定义监听器,接收消息
输入:START LISTENER (LISTENER1)    启动监听器
输入:DEFINE CHANNEL (QMA.QMB) CHLTYPE (RCVR) TRPTYPE (TCP) 定义接收者通道
输入:end 并回车结束输入

3.3 配置A机

同样以root用户登录,切换到mqm用户
# su - mqm
~ cd /opt/mqm/bin
~ source setmqenv -s
~ crtmqm QMA
~ strmqm QMA
~ runmqsc QMA
输入:DEFINE QLOCAL (QMB) USAGE (XMITQ) 定义本地队列QMB作为传输队列

访问远程队列的本地定义LOCAL.DEF.OF.REMOTE.QUEUE
该定义指明A机的传输队列QMB发送消息给 远程队列(B机上的QMB,RECEIVER.Q)

输入:DEFINE QREMOTE (LOCAL.DEF.OF.REMOTE.QUEUE) RNAME (RECEIVER.Q) RQMNAME ('QMB') XMITQ (QMB)

定义发送通道:
DEFINE CHANNEL (QMA.QMB) CHLTYPE (SDR) CONNAME ('192.168.98.130(1414)') XMITQ (QMB) TRPTYPE (TCP)
启动:
START CHANNEL (QMA.QMB)

结束:
end

3.4 验证

进入A机,利用示例程序进行验证
# su - mqm
~ cd /opt/mqm/samp/bin
~ ./amqsput LOCAL.DEF.OF.REMOTE.QUEUE QMA
此时可以随便输入信息,在B机上查看
例如:Test messages from A

进入B机
# su - mqm
~ cd /opt/mqm/samp/bin
~ ./amqsget RECEIVER.Q QMB

发现无法收到消息,查原因,发现可能是网络通信问题,主要是端口是否放开,因此关闭B机的防火墙
root用户登录
# SuSEfirewall2 stop
# su - mqm
~ cd /opt/mqm/samp/bin
~ ./amqsget RECEIVER.Q QMB

4.MQ客户端安装与验证

4.1 准备

两台虚拟机,其中B机(192.168.98.130)作为MQ服务器,C机(192.168.98.131)作为MQ客户端
实现MQ客户端(C机)连接到MQ服务器(B机),发送消息给服务器,然后从服务器取回消息

**重点:**
在客户端和服务器两台机器都需要创建一个非mqm组的相同id的用户,该用户的id必须一致
例如 用户名为mquser1,id为 3001
# useradd mquser1 -u 3001

4.2 配置MQ服务器(B机)

在B机安装好MQ Server组件,具体参见本文第2小节
# useradd mquser1 -u 3001
# su - mqm
~ cd /opt/mqm/bin
设置mq环境变量
~ source setmqenv -s

创建队列管理器QUEUE.MANAGER.1,并启动
~ crtmqm QUEUE.MANAGER.1
~ strmqm QUEUE.MANAGER.1
~ dspmq  查看所有队列管理器运行状态

启动脚本执行器,进行设置
~ runmqsc QUEUE.MANAGER.1
输入: 
    DEFINE QLOCAL(QUEUE1)    创建本地队列QUEUE1
    授权mquser1用户(id为3001)使用队列QUEUE1
    SET AUTHREC PROFILE(QUEUE1) OBJTYPE(QUEUE) PRINCIPAL('mquser1') AUTHADD(PUT,GET)
    授权用户mquser1可以连接队列管理器
    SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('mquser1') AUTHADD(CONNECT)

    定义服务器连接通道
    DEFINE CHANNEL(CHANNEL1) CHLTYPE(SVRCONN) TRPTYPE(TCP)

    授权MQ客户端可以连接上面定义的通道,通过ip地址和用户名方式授权
    SET CHLAUTH(CHANNEL1) TYPE(ADDRESSMAP) ADDRESS('192.168.98.131') MCAUSER('mquser1')

    定义监听器,接受连接
    DEFINE LISTENER(LISTENER1) TRPTYPE(TCP) CONTROL(QMGR) PORT(1315)
    启动:
    START LISTENER(LISTENER1)
    结束:
    end

4.3 配置MQ客户端(C机)

解压缩安装包后,安装客户端组件
# cd /home/mq/server
# ./mqlicense.sh -accept
# rpm -ivh MQSeriesRuntime-8.0.0-2.x86_64.rpm MQSeriesClient-8.0.0-2.x86_64.rpm  MQSeriesSamples-8.0.0-2.x86_64.rpm 

测试与MQ服务器B机的网络连通
# ping 192.168.98.130

创建连接mq服务器的用户:
# useradd mquser1 -u 3001

切换到mquser1
# su - mquser1

设置环境变量,指明与MQ服务器的连接信息
~ export MQSERVER=CHANNEL1/TCP/'192.168.98.130 (1315)'

4.4 测试客户端和服务器的连通性

登录C机,测试与B机是否联通
C机# telnet 192.168.98.130 1315
如果无法连通,请关闭B机的防火墙
B机# service --status-all
B机# SuSEfirewall2 stop

在登录C机上测试telnet远程,成功
# telnet 192.168.98.130 1315
# su - mquser1
~ cd /opt/mqm/samp/bin
发送消息给服务器
~ ./amqsputc QUEUE1 QUEUE.MANAGER.1
输入消息,最后两次enter键结束

从服务器取得消息
~ ./amqsgetc QUEUE1 QUEUE.MANAGER.1

5.卸载MQ

 # rpm -qa | grep MQ   查询当前已安装的MQ组件
 # rpm -e  MQSeriesServer  卸载服务器组件
 # rpm -e  MQSeriesSamples 卸载示例程序
 # rpm -e  MQSeriesRuntime 卸载运行时组件,这个一般最后卸载

6.其它记录

登陆服务器执行:
# cd /opt/mqm/samp/bin
#./amqsgetc QUEUE1 QUEUE.MANAGER.1
出现错误:./amqsgetc: error while loading shared libraries: libmqic_r.so: cannot open shared object file: No such file or directory
该错误是部分库未找到,安装rpm -ivh   rpm -ivm MQSeriesClient-8.0.0-2.x86_64.rpm ,然后设置环境变量即可

MQ常用命令:
必须先设置环境变量,才能直接运行
# su - mqm
~ cd /opt/mqm/bin
~ source setmqenv -s

~ dspmq  查看队列管理器状态
~ runmqsc QUEUE.MANAGER.1
进入脚本命令执行命令
    DIS   显示可输入的所有命令
    DIS CHL(*)  查看通道定义
    DIS CHL(CHANNEL1) 查看特定通道定义

    DIS LISTENER(*) 查看监听定义
    DIS LSSTATUS(LISTENER1) 查看指定监听器的状态

    DIS Q(*) 查看队列定义
    DIS Q(QUEUE1)  查看队列定义

版权声明:本文为MePlusPlus原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/MePlusPlus/article/details/52788984