Linux MQ 队列管理器迁移概述

文章来自 IBM网站
https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1312_hub_mq/1312_hub_mq.html#toggle

通常来说,有两种方式可以对 MQ 队列管理器进行迁移。一种是基于相同平台的文件复制(或者称为克隆),另一种是使用 MQ 提供的命令行。两种方式各有优缺点。
文件复制方式,它的好处是快速,可以批量。但缺点是只支持同种类型的操作系统间的复制,无法实现跨平台复制,并且在目标队列管理器上要使用相同的用户名。比如,在 Linux 上复制的队列管理器对象无法还原到 Windows 的 队列管理器上,在 32 位队列管理器对象无法在 64 位的队列管理器上使用。简单来说,源系统和目标系统必须是完全一样的两台机器。这样的迁移更像是克隆出一个新的 MQ 队列管理器,除了队列管理器对象定义被克隆之外(其中包括队列,通道,监听器等),队列管理器本身的属性值也会被克隆,同时持久化队列的消息也会被克隆。
MQ 命令行方式 使用 MQ 命令进行队列管理器对象复制或备份,不同的 MQ 版本提供不同的命令。 在 MQ v6 和 MQ v7.0 版本下,需要预先安装 MS03 SupportPac,安装后使用 saveqmgr命令。在 MQ v7.1 和 MQ v7.5 中,使用 MQ 内置的 dmpmqcfg命令,它替代了 MS03 SupportPac,无需额外安装。使用基于 MQ 命令行提供的对象复制好处有很多:
第一,它可以支持跨平台对象导入和导出。比如,在 Windows 上导出的队列管理器对象可以很方便的在 Linux/Unix 上导入。
第二,方便问题重现。导出的文件包含对象列表和权限列表,前者可以直接做为 runmqsc命令的输入参数,后者可以做为脚本直接运行,这大大方便了 IBM 技术支持工程师在实验室重现客户环境,快速解决问题。
第三,可用于本地队列管理器重建。即使不用于远程恢复,导出的对象列表也可以在本地重建 (re-play)。这种情况适用于多版本 MQ 安装时的情况。用户可从某一个版本的队列管理器中将对象导出,在另一个版本的队列管理器中重建相同的对象列表。
相比文件复制法,使用命令需注意如下几点:
第一,在不同平台间复制队列管理器对象时,尽管绝大多数的队列管理器对象并没有平台特定的信息,但个别参数仍然需要经过修改(比如队列管理器的 SSLKEYR 属性,指定了本地的 SSL/TLS 存储库的路径)。在还原到目标队列管理器前,最好仔细检查所有对象定义命令,确保无误。
第二,队列中的消息无法复制。无论是持久化队列或者非持久化队列,其中的消息均无法得到复制。
回页首
使用文件复制方式建立队列管理器对象
如前所述,使用文件复制方式需要保证源队列管理器和目标队列管理器使用同一种架构平台。 需要复制的文件和目录包括队列管理器配置文件 mqs.ini, 队列管理器日志文件和队列管理器数据目录。需要注意的是,复制时需最好停止队列管理器,以确保新旧队列管理器的队列中的消息保持一致。
以下是使用文件复制方式建立队列管理器对象的步骤:
在 Linux 平台创建队列管理器 test.queue.manager, 导入测试对象后将队列管理器停止,将其日志文件和数据文件打包,连同 MQ 配置文件 mqs.ini 复制到目标机器部署,完成复制过程。
源队列管理器端 (Linux)
清单 1.创建测试队列管理器并导入测试对象
-bash-4.1 crtmqmtest.queue.managerbash4.1 strmqm test.queue.manager
-bash-4.1 runmqsctest.queue.manager<objects.tst2.bash4.1 endmqm -i test.queue.manager
-bash-4.1 cd/tmpbash4.1 tar -cvf test.queue.manager.log.tar /var/mqm/log/test!queue!manager/
-bash-4.1 tarcvftest.queue.manager.data.tar/var/mqm/qmgrs/test!queue!manager/bash4.1 cp /var/mqm/mqs.ini /tmp
目标队列管理器端 (Linux)
清单 3.解压队列管理器数据文件和日志文件
-bash-4.1 crtmqmtest.queue.managerbash4.1 cp /tmp/mqs.ini /var/mqm/
-bash-4.1 tarxvftest.queue.manager.log.tarC/var/mqm/logbash4.1 tar -xvf test.queue.manager.data.tar -C /var/mqm/qmgrs
手工查看 /var/mqm/mqs.ini文件和 /tmp/mqs.ini文件,将新队列管理器信息加入到 QueueManager 配置项下:
QueueManager:
Name=test.queue.manager
Prefix=/var/mqm
Directory=test!queue!manager
InstallationName=Installation1
清单 4.检查队列管理器配置信息和对象是否存在
-bash-4.1 strmqmtest.queue.managerbash4.1 runmqsc test.queue.manager
dis qlocal(*)
队列管理器恢复成功。
值得一提的是,持久化队列的消息在队列管理器停止时是可以保存的,因此消息也可以一起被复制到新的队列管理器的队列上。如果是非持久化队列(默认情况),队列管理器停止时消息不会被保存,因此也不会被克隆。如果希望队列管理器中的消息随着队列管理器一起被克隆,则需要将队列属性 defpsist 更改为 YES,请参考附录 1:“持久化信息存储”文章。
另外,在目标系统中,如果新系统的 MQ 是新安装的,则可以直接将源系统的 mqs.ini 文件复制替换旧的文件。如果新系统中已经存在任何队列管理器,在克隆时要谨慎,需要按照目标队列管理器中第四步手工将复制的队列管理器信息添加到目标队列管理器中,不能直接覆盖,否则会导致其他队列管理器无法启动的问题。在这种情况下,另一个推荐做法是使用命令法导入队列管理器的对象。
回页首
使用 saveqmgr 命令保存队列管理器对象
如前所述,MQ 6.0 和 7.0 版本提供了 SupportPac MS03,安装后可以使用 saveqmgr命令来保存队列管理器对象的属性。对于 MQ 7.1 和 7.5, 请使用 dmpmqcfg命令,这在下面的章节有介绍。关于 MS03 的下载地址,请参考附录 2。以下介绍一个例子,使用 saveqmgr命令将 Linux 端的源队列管理器中的对象导出,在 Windows 的目标队列管理器中导入。
源队列管理器端 (Linux)
假设将下载好的 SupportPac MS03 放在源队列管理器的 /tmp 目录下,安装 SupportPac MS03
清单 5.解压缩安装 SupportPac MS03
-bash-4.1 cd/tmpbash4.1 tar -zxvf ms03_unix.tar.Z
清单 6.saveqmgr 命令导出队列管理器对象定义
-bash-4.1 crtmqmmq701.queue.managerbash4.1 strmqm mq701.queue.manager
-bash-4.1 runmqscmq701.queue.manager<objects.tstbash4.1 ./saveqmgr.linux –localQMgr mq701.queue.manager
– outputFile /tmp/mq701.queue.manager.mqsc –saveSecurity /tmp/mq701.queue.manager.bat
输出:
Compiled for Websphere MQ V7.0.1.0 on Oct 9 2011
SAVEQMGR V6.1.4.0
Requesting attributes of the queue manager…

Writing Queue Manager definition to /tmp/mq701.queue.manager.mqsc.

Generating attributes for Websphere MQ Release 7.0.1
Generating code for platform UNIX
Requesting attributes of all authinfo objects…
Requesting attributes of all queues…
Requesting attributes of all channels…
Requesting attributes of all processes…
Requesting attributes of all namelists…
Requesting attributes of all listeners…
Requesting attributes of all services…
Requesting attributes of all OAM classes…
Requesting attributes of all topics…
Requesting attributes of all subscriptions…
Writing AuthInfo definitions to /tmp/mq701.queue.manager.mqsc.
Writing Queue definitions to /tmp/mq701.queue.manager.mqsc.
Skipping dynamic queue SAVEQMGR.51B468B120033602
Writing Channel definitions to /tmp/mq701.queue.manager.mqsc.
Writing Process definitions to /tmp/mq701.queue.manager.mqsc.
Writing Namelist definitions to /tmp/mq701.queue.manager.mqsc.
Writing Listener definitions to /tmp/mq701.queue.manager.mqsc.
Writing Service definitions to /tmp/mq701.queue.manager.mqsc.
Writing OAM definitions to /tmp/mq701.queue.manager.aut.
Writing Topic definitions to /tmp/mq701.queue.manager.mqsc.
Writing Subscription definitions to /tmp/mq701.queue.manager.mqsc.
命令选项含义:
–localQmgr:连接的本地队列管理器名称
–outputFile:生成的包含队列管理器对象定义的文件名
–saveSecurity:生成的包含队列管理器对象安全定义的脚本
注意:
在 Linux/Unix 上,请使用具有 MQ 管理员权限用户(默认为 mqm)执行 saveqmgr命令, 并保证用户对 ms03 目录具有相应的读写权限,必要时需使用 chmod命令赋予相应读写权限
队列管理器必须在运行状态下
使用 –saveSecurity参数可以将队列管理器的每个对象的权限属性一起导出来,它们是 setmqaut命令集,可以直接运行在目标机 MQ 命令行
64 位的队列管理器下请使用 saveqmgr64.linux
关于 saveqmgr命令的详细用法,请参考 readme 文件或使用 -h 参数以获得帮助。
目标队列管理器端 (Windows)
将生成的对象定义文件和权限定义文件复制到目标 MQ 队列管理器端。
打开 Windows 命令提示符,输入以下命令执行:
清单 7.目标端导入对象定义
runmqsc mq701.queue.manager < mq701.queue.manager.mqsc
打开 Windows 命令提示符,执行:
mq701.queue.manager.bat
-bash-4.1 runmqsctest.queue.managerdisqlocal()使4LinuxWindowsLinux(n)Windows8.setmqautsetmqautmmq701.queue.managernGSYHQ1tqueuegmqm+browse+chg+clr+dlt+dsp+get+inq+put+passall+passid+set+setall+setid9.setmqautsetmqautmmq701.queue.managernGSYHQ1tqueuegmqm+browse+chg+clr+dlt+dsp+get+inq+put+passall+passid+set+setall+setid使dmpmqcfgMQ7.1MQ7.5使MQdmpmqcfgsaveqmgrMQ使使使saveqmgr(Linux)10.dmpmqcfgbash4.1 dmpmqcfg -m test.queue.manager -a > test.queue.manager.dump
清单 11.dmpmqcfg 导出队列管理器对象权限定义
-bash-4.1$ dmpmqcfg -m test.queue.manager -o setmqaut > test.queue.manager.aut
目标队列管理器端 (Linux)
将生成的 .dump 文件和 .auth 文件复制到目标机器,更改文件的属主和执行权限,确保文件在目标机上可以执行,使用 MQ 管理员用户 (mqm) 建立并启动新的同名队列管理器,使用 runmqsc命令导入对象,并执行赋予权限,此处步骤和清单 7 和清单 8 相同,不再赘述。然后使用和清单 4 相同的方式检查对象和权限是否正确导入。
回页首
总结
本文介绍了使用文件复制和 MQ 命令行方式复制队列管理器对象的技术,这两种方法分别有适用的场景。使用 MQ 命令行方法,如果一旦出现问题,IBM 技术支持部门会更方便的重现和定位迁移过程中出现的问题,有利于问题的快速定位和解决,希望本文能够对迁移 MQ 队列管理器感兴趣的读者起到一些帮助作用。

以下是迁移IBMMQ队列队列管理器到远程服务器的一些指令: 1. 在目标服务器安装IBMMQ 2. 在源服务器上备份队列管理器: ``` /opt/mqm/bin/dmpmqcfg -m QMGR_NAME -a > /tmp/QMGR_NAME.mqsc ``` 其中,QMGR_NAME为队列管理器的名称,/tmp/QMGR_NAME.mqsc为备份文件的路径和名称。 3. 将备份文件复制到目标服务器: ``` scp /tmp/QMGR_NAME.mqsc user@target_server:/tmp ``` 其中,user为目标服务器的用户名,target_server为目标服务器的IP地址或主机名。 4. 在目标服务器上创建队列管理器: ``` /opt/mqm/bin/crtmqm -q QMGR_NAME ``` 其中,QMGR_NAME为队列管理器的名称。 5. 在目标服务器上创建目标队列: ``` /opt/mqm/bin/runmqsc QMGR_NAME < /tmp/QMGR_NAME.mqsc ``` 其中,QMGR_NAME为队列管理器的名称,/tmp/QMGR_NAME.mqsc为备份文件的路径和名称。 6. 在源服务器上导出队列: ``` /opt/mqm/bin/dmpmqmsg -m QMGR_NAME -n QUEUE_NAME -f /tmp/QUEUE_NAME.mq4 ``` 其中,QMGR_NAME为队列管理器的名称,QUEUE_NAME为要导出的队列名称,/tmp/QUEUE_NAME.mq4为导出文件的路径和名称。 7. 将导出文件复制到目标服务器: ``` scp /tmp/QUEUE_NAME.mq4 user@target_server:/tmp ``` 其中,user为目标服务器的用户名,target_server为目标服务器的IP地址或主机名。 8. 在目标服务器上导入队列: ``` /opt/mqm/bin/crtmqm -q QMGR_NAME /opt/mqm/bin/runmqsc QMGR_NAME < /tmp/QMGR_NAME.mqsc /opt/mqm/bin/crtmqm -q QMGR_NAME /opt/mqm/bin/runmqsc QMGR_NAME < /tmp/QMGR_NAME.mqsc /opt/mqm/bin/runmqsc QMGR_NAME < /tmp/QUEUE_NAME.mq4 ``` 其中,QMGR_NAME为队列管理器的名称,/tmp/QMGR_NAME.mqsc为备份文件的路径和名称,/tmp/QUEUE_NAME.mq4为导出文件的路径和名称。 需要注意的是,以上指令仅供参考,具体操作应根据实际情况进行调整和修改。同时,建议在进行迁移前,对系统进行备份并进行充分测试,以避免数据丢失和系统故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值