这是一个非常广泛的问题,所以我会尝试在版主删除它之前做出回应。:-)
答案取决于很多事情,例如是否使用 MQ 集群、高可用性和灾难恢复的方法、安全要求、QMgrs 是配置为专用还是共享基础架构等。但是,我有一些模式我认为几乎在所有情况下都遵循,包括非生产。这是因为如果没有在 Dev 中进行测试并且在 Prod 中无法按预期工作,那么监控和安全性之类的东西往往会在部署时被丢弃。
- 我使用脚本在生产环境中创建 QMgrs,以确保生成 X.509 证书(或 CSR)等基本操作始终按照标准完成,确保存在任何退出或退出 parm 文件,确保某些 SupportPac 可执行文件(
q
如存在于/opt/mqm/bin
,循环队列等中。它还会检查诸如未安装 GSKit 等负面因素。
- 我有一个针对所有 QMgrs 运行的基线脚本。此脚本设置 DLQ、监视代理的任何队列、根据需要启用事件、设置系统服务、触发监视器、侦听器等。B2B 网关 QMgrs 例外,它们在一个类中单独处理并具有非常具体的配置不用于内部网络。簇。
- 我有几类具有特定配置要求的 QMgr。其中包括集群存储库(其中主要和次要是不同的子类型)、服务提供者 QMgrs 和服务消费者 QMgrs。这些都有针对它们运行的辅助脚本。
- 在使用集群的情况下,我有每个集群的脚本来加入或暂停 QMgr(自 v7.1 以来,这对我来说几乎是 100%)。
这些设置了 QMgr 的基础设施。然后我为每个应用程序维护脚本。因此,例如,如果有一个 Payroll 应用程序,我将有队列和可能的主题,其名称包含一个PAY
节点,例如PAY.EMPLOYEE.UPDT.REQ.V032.PRD
. PAY.**
与此相对应的是所有队列的单个脚本。曾经也是setmqaut
命令之一,但现在这些与对象在同一个脚本中。我只有一个版本的脚本并保留脚本更改的历史记录。这样,当我需要重新创建 QMgr 时,我只需为其运行所有脚本。同样,如果我需要PAY
在另一个 QMgr 上部署对象,我只需将脚本复制到该服务器即可。
在为集群定义对象时,我总是会做一个DEFINE NOREPLACE
包含所有运行时属性的操作,例如是否在集群中启用了队列。该队列始终在集群中定义为禁用并用于触发,但因为我使用NOREPLACE
重新运行脚本不会改变它在一个月内的任何状态。那些是配置而不是运行时的东西,例如描述,会在ALTER
之后立即处理,并且每次脚本运行时都会更新这些DEFINE
内容。这里有一篇关于这个的文章。
最后,我使用的脚本是自执行的、自记录的。例如,许多人将所有 MQSC 命令放入脚本中,然后执行以下操作:
runmqsc < payroll.mqsc > payroll.out
这里有很多问题。主要的一点是它依赖于操作员的知识渊博,并且始终正确地执行脚本。例如,假设他忘记捕获输出?或者覆盖以前的输出?或者没有得到STDERR
,因为(s)他需要2>&1
在最后做并且不知道重定向那么好?
所以我的脚本都是用ksh
处理所有输出的捕获,完成时间和日期标记,并且STDERR
可以自由地将 MQSC 与操作系统命令等混合编写的。你所要做的就是转到该 QMgr 的脚本目录并. ./*ksh
构建/重建一个质量管理器。
我当然也会定期进行配置转储,但这些更多用于运行查询和报告,例如“有多少 QMgrs 定义了这个通道,它们在哪里?” 之类的事情。
此外,在进行备份时,几乎没有充分的理由在某个时间点备份 QMgr。但是,如果需要,请务必先停止 QMgr。此外,请仔细考虑如何在备份中捕获证书。许多人擅长锁定证书目录,因此只能mqm
读取它,但备份通常不受保护。只要您不尝试在 Production 上恢复,许多商店都允许您将 Production/var/mqm/*
文件恢复到您自己的沙箱中。如果包含 QMgr 的 KDB 文件,您只是丢失了它们。另一种方法是将证书放在/etc
受保护但未与 QMgr 的目录一起备份的其他目录中。