用MQ9.1镜像创建MQ集群(主备模式)
通过镜像 registry.cn-hangzhou.aliyuncs.com/huxr/mq9.1:1.1 来创建一套MQ多实例集群,步骤如下
步骤1: 拉取镜像
将阿里云镜像仓库中保存的镜像 registry.cn-hangzhou.aliyuncs.com/huxr/mq9.1:1.1 拉取到本地环境
命令:docker pull registry.cn-hangzhou.aliyuncs.com/huxr/mq9.1:1.1
如图,已将MQ9.1服务镜像获取到了本地
地已经存在MQ9.1服务的镜像了,接下来就可以根据此镜像运行两个容器,MQ_SERVER1和MQ_SERVER2,为构建MQ集群架构,需要这两个容器之间有共享目录存在,我们定义一个目录 /share 为共享目录(指定宿主机的此目录为容器间的共享数据卷)
#在宿主机上执行
命令:mkdir -p /share/logs /share/qmgrs
命令:chmod -R 777 /share 放开权限,容器内mqm用户会对其进行操作
#在宿主机上执行命令,运行容器MQ_SERVER1
docker run -it -v /share:/share -p 1414:1414 -p 1415:1415 --name MQ_SERVER1 registry.cn-hangzhou.aliyuncs.com/huxr/mq9.1:1.1 /bin/bash
MQ_SERVER1创建之后执行ifconfig查看此容器的ip,我当前的MQ_SERVER1 ip为 172.17.0.2
执行ctrl+p+q退出容器MQ_SERVER1
#在宿主机上执行命令,运行容器MQ_SERVER2
docker run -it -v /share:/share -p 1416:1416 --name MQ_SERVER2 registry.cn-hangzhou.aliyuncs.com/huxr/mq9.1:1.1 /bin/bash
MQ_SERVER2创建之后执行ifconfig查看此容器的ip,我当前的MQ_SERVER2 ip为 172.17.0.3
执行ctrl+p+q退出容器MQ_SERVER2
此时两个容器准备已经完成,如下,接下可以去做具体的实现了
步骤2:在MQ_SERVER1和MQ_SERVER2中创建MQ集群架构
命令:docker exec -it MQ_SERVER1 /bin/bash 进入MQ_SERVER1容器
命令:su - mqm 切换至mqm用户
#在MQ_SERVER1顺序执行脚本创建MQ网管 APPNAME_GW
crtmqm -ld /share/logs -md /share/qmgrs -q APPNAME_GW
strmqm APPNAME_GW
runmqsc APPNAME_GW
define listener(LN1) trptype(TCP) control(QMGR) IPADDR(172.17.0.2) PORT(1414) BACKLOG(1000) replace
start listener(LN1)
define chl(TO.Z1) chltype(CLUSSDR) cluster(CLUSTER_APPNAME) conname('172.17.0.2(1415)')
define chl(TO.GW) chltype(CLUSRCVR) cluster(CLUSTER_APPNAME) conname('172.17.0.2(1414),172.17.0.3(1416)')
define qr(ANY.APPNAME)
#在MQ_SERVER1顺序执行脚本创建MQ网管 APPNAME_A
crtmqm APPNAME_A
strmqm APPNAME_A
runmqsc APPNAME_A
define listener(LN1) trptype(TCP) control(QMGR) IPADDR(172.17.0.2) PORT(1415) BACKLOG(1000) replace
start listener(LN1)
def chl(TO.Z2) chltype(CLUSSDR) cluster(CLUSTER_APPNAME) conname('172.17.0.3(1416)')
def chl(TO.Z1) chltype(CLUSRCVR) cluster(CLUSTER_APPNAME) conname('172.17.0.2(1415)')
alter qmgr repos(CLUSTER_APPNAME)
创建好了网关APPNAME_GW和成员APPNAME_A之后退出容器MQ_SERVER1
命令:docker exec -it MQ_SERVER2 /bin/bash 进入MQ_SERVER2容器
命令:su - mqm 切换至mqm用户
#在MQ_SERVER2顺序执行脚本创建MQ成员 APPNAME_B
crtmqm APPNAME_B
strmqm APPNAME_B
runmqsc APPNAME_B
define listener(LN1) trptype(TCP) control(QMGR) IPADDR(172.17.0.3) PORT(1416) BACKLOG(1000) replace
start listener(LN1)
define chl(TO.Z1) chltype(CLUSSDR) cluster(CLUSTER_APPNAME) conname('172.17.0.2(1415)')
define chl(TO.Z2) chltype(CLUSRCVR) cluster(CLUSTER_APPNAME) conname('172.17.0.3(1416)')
alter qmgr repos(CLUSTER_APPNAME)
创建好了成员APPNAME_B之后推出容器MQ_SERVER2
执行ctrl+p+q退出容器MQ_SERVER2
步骤3:创建MQ多实例
命令:docker exec -it MQ_SERVER1 /bin/bash 进入MQ_SERVER1容器
命令:su - mqm 切换至mqm用户
在MQ_SERVER1节点上执行
dspmqinf -o command APPNAME_GW
将生成的信息复制出来,准备在MQ_SERVER2节点上执行!本例生成的信息如下
addmqinf -s QueueManager -v Name=APPNAME_GW -v Directory=APPNAME_GW -v Prefix=/var/mqm -v DataPath=/share/qmgrs/APPNAME_GW
复制输出的信息之后再MQ_SERVER2上执行
命令:docker exec -it MQ_SERVER2 /bin/bash 进入MQ_SERVER1容器
命令:su - mqm 切换至mqm用户
执行命令:
addmqinf -s QueueManager -v Name=APPNAME_GW -v Directory=APPNAME_GW -v Prefix=/var/mqm -v DataPath=/share/qmgrs/APPNAME_GW
执行完成之后就发现MQ_SERVER2上已添加了网关的备用管理器
进入MQ_SERVER1和MQ_SERVER2
先停止MQ_SERVER1上的网关
endmqm APPNAME_GW
然后在MQ_SERVER1和MQ_SERVER2上分别用多实例方式启动MQ网关
strmqm -x APPNAME_GW
启动完成之后,再次查看MQ_SERVER1和MQ_SERVER2的队列管理器状态
至此MQ多实例集群就算创建完成了,之后就可以在此基础上根据需求加入自己想要使用的对象了,如远程队列,发送通道,传输队列,本地队列,发送通道,接收通道等等