本例使用简单的本地 HA 配置在三台 Linux 主机上安装队列管理器。
关于本任务
本地 HA 配置定义了一组实例,它们共同组成了一个高度可用的队列管理器。 每个实例都安装在不同的主机上,因此如果其中一台主机出现故障,其他主机可以接替。
本示例定义了一个本地 HA 组,由安装在各自 Linux 主机上的三个 IBM MQ 实例组成。 实例的主机名分别为 alpha、beta 和 gamma。 在整个示例中,这些名称应替换为系统的主机名称。
本例使用默认的安装位置 (/opt/mqm) 和数据目录 (/var/mqm)。如果使用的是非默认位置,请务必在整个示例中相应替换这些路径。
有关本地 HA 配置的更多详情,请参阅本地 HA。 本地 HA 还支持跨区域复制 (CRR),即由一个额外的本地 HA 组充当恢复组,更多信息请参阅本地 HA CRR。
本例使用单个证书来确保队列管理器实例流量的安全。
本示例将介绍如何在 Linux 主机上定义本地 HA 组以提供高可用性、设置监控和重启,以及强制从活动实例向副本进行故障切换。
过程
- 在所有三个 Linux 主机上安装 IBM MQ 。
按照在 Linux 上安装和卸载 IBM MQ 中的说明接受 IBM MQ 许可并安装 IBM MQ 所有三个主机上的服务器。
在本例中,最简单的方法是使用默认的安装位置 (/opt/mqm) 和数据位置 (/var/mqm)。如果在一个系统上更改了安装或数据位置,请确保在所有其他主机上镜像相同的更改。
- 设置准备安装本地 HA 实例的环境:
- 在每台 Linux 主机上,以 mqm 用户身份登录,使用以下命令设置环境:
. /opt/mqm/bin/setmqenv -s
- 输入以下命令,检查环境设置是否正确:
dspmqver
如果命令成功完成,并返回预期的版本号和安装名称,则说明环境设置正确。
- 创建本地 HA 队列管理器实例。 在主机 alpha、beta 和 gamma 上创建一个具有日志复制功能的队列管理器。 (可能需要使用
AutoConfig stanza 来确保对象总是以统一的方式定义,可在 crtmqm 中添加 -ic 选项,为队列管理器提供 mqsc 文件)。
- 在名为 alpha 的节点上创建第一个实例:
crtmqm -lr alpha -lf 8192 -lp 10 -ls 10 -p 1414 MYQMGR
队列管理器已创建:
IBM MQ queue manager 'MYQMGR' created.
Directory '/var/mqm/qmgrs/MYQMGR' created.
The queue manager is associated with installation 'Installation1'.
Creating or replacing default objects for queue manager 'MYQMGR'.
Default objects statistics : 83 created. 0 replaced. 0 failed.
Completing setup.
Setup completed.
- 在名为 beta 的节点上创建第二个实例:
crtmqm -lr beta -lf 8192 -lp 10 -ls 10 -p 1414 MYQMGR
- 在名为 gamma 的节点上创建第三个实例:
crtmqm -lr gamma -lf 8192 -lp 10 -ls 10 -p 1414 MYQMGR
- 创建密钥库,确保实例和组流量的安全:
- 要创建此密钥存储,请登录 alpha 主机并运行以下命令:
runmqakm -keydb -create -db /var/mqm/qmgrs/MYQMGR/ssl/keystore.kdb -pw PASSWORD -stash
runmqakm -cert -create -db /var/mqm/qmgrs/MYQMGR/ssl/keystore.kdb -pw PASSWORD -label nha-qm-replication -dn CN=MYQMGR-REPLICATION -size 2048
其中 PASSWORD 是您自己选择的密码。
- 例如,使用 sftp 将四个密钥存储文件复制到 beta 和 gamma 主机上的相同位置(
/var/mqm/qmgrs/MYQMGR/ssl/ )。
- 在每台主机(alpha、beta 和 gamma)上,确保文件具有 mqm 组所有权,并具有 mqm 组的读取权限:
chown :mqm /var/mqm/qmgrs/MYQMGR/ssl/keystore.*
chmod g+r /var/mqm/qmgrs/MYQMGR/ssl/keystore.*
重要提示: 此处描述的示例不适合生产环境,仅作为快速启动的示例。 对于高级用户来说,证书管理是一个复杂的问题。 对于生产,你必须考虑到轮换、撤销、密钥长度、灾难恢复等问题。
- 创建本地 HA 组。 该组是通过编辑每个队列管理器实例的 /var/mqm/qmgrs/MYQMGR/qm.ini 文件创建的。
- 更新 alpha、beta 和 gamma 实例中每个实例的
NativeHALocalInstance stanza,以定义用于确保实例流量安全的组和证书:NativeHALocalInstance:
Name=<instance-name>
CipherSpec=ANY_TLS12
CertificateLabel=nha-qm-replication
KeyRepository=/var/mqm/qmgrs/MYQMGR/ssl/keystore
其中:
<instance-name> 是您要配置的实例名称(即 alpha、beta 或 gamma)。
CertificateLabel 指定实例之间流量的证书。
- 为每个 alpha、beta 和 gamma 实例添加本地组成员:
NativeHAInstance:
Name=alpha
ReplicationAddress=alpha.example.com(9414)
NativeHAInstance:
Name=beta
ReplicationAddress=beta.example.com(9414)
NativeHAInstance:
Name=gamma
ReplicationAddress=gamma.example.com(9414)
(将主机名和复制地址替换为 Linux 节点的名称和复制地址)
- 启动组中的实例。 现在,您可以在 alpha、beta 和 gamma 主机上启动队列管理器实例:
strmqm MYQMGR
- 验证组已正确部署。 在 alpha、beta 和 gamma 主机上发出 dspmq -o nativeha
-x 命令,显示组状态。 活动实例的状态是
QMNAME(MYQMGR) ROLE(Active) INSTANCE(<instance-name>) INSYNC(yes) QUORUM(3/3) GRPLSN(<n:n:n:n>) GRPNAME() GRPROLE(Live)
INSTANCE(alpha) ROLE(Active) REPLADDR(<alpha-fqdn>) CONNACTV(yes) INSYNC(yes) BACKLOG(0) CONNINST(yes) ACKLSN(<n:n:n:n>) HASTATUS(Normal) SYNCTIME(<timestamp>) ALTDATE(<date>) ALTTIME(<time>)
INSTANCE(beta) ROLE(Replica) REPLADDR(<beta-fqdn>) CONNACTV(yes) INSYNC(yes) BACKLOG(0) CONNINST(yes) ACKLSN(<n:n:n:n>) HASTATUS(Normal) SYNCTIME(<timestamp>) ALTDATE(<date>) ALTTIME(<time>)
INSTANCE(gamma) ROLE(Replica) REPLADDR(<gamma-fqdn>) CONNACTV(yes) INSYNC(yes) BACKLOG(0) CONNINST(yes) ACKLSN(<n:n:n:n>) HASTATUS(Normal) SYNCTIME(<timestamp>) ALTDATE(<date>) ALTTIME(<time>)
地位的关键部分是
ROLE(Active)
QUORUM(3/3) - 达到法定人数,注意这可能需要几秒钟的时间
注意该组中哪个主机具有
Active 角色。 其他主机的状态类似,但
ROLE 是
Replica。
- 增加队列管理器的监控和重启功能。
如果实例意外发生故障,必须尽快检测到故障并重新启动实例。 在本例中,一个示例演示了 "有效性 "检查的实施。 示例使用了 python 脚本和 systemd 守护进程。 使用这种方法时,必须使用 systemd 来启动和结束队列管理器,而不是使用 IBM MQ 命令。
按照监控、重启和结束队列管理器实例中的说明,为 alpha、beta 和 gamma 主机添加队列管理器监控和重启功能。
- 定义队列。 在活动实例上,输入以下命令启动 MQSC:
runmqsc MYQMGR
MQSC 启动时会有一条信息提示。 MQSC 没有命令提示符。 定义本地持久队列
DEFINE QLOCAL('QUEUE1') DEFPSIST(YES)
队列创建时会显示一条信息。 输入以下命令停止 MQSC:
end
显示信息,然后是命令提示符。
QUEUE1 队列会复制到组中的其他实例。
- 将持久信息添加到队列中。
QUEUE1 队列上的 DEFPSIST(YES) 属性会使通过 amqsputc 样本放入队列的报文具有持久性。 它们被复制到副本实例中。将目录更改为
/opt/mqm/samp/bin ,其中包含示例程序。 输入以下命令,将信息放入队列:
./amqsput QUEUE1 MYQMGR
如果与队列管理器的连接成功,则输出以下响应:
target queue is QUEUE1
输入一些文字,然后每次都按回车键,将多条信息放入队列。 输入空行结束信息输入。 显示如下信息
Sample AMQSPUT0 end
您的邮件现在已进入队列,并显示命令提示符。
- 重新启动主动程序,模拟主机故障。 停止活动实例,稍等片刻,然后使用以下命令启动活动实例:
sudo systemctl stop mqmonitor@MYQMGR
sudo systemctl start mqmonitor@MYQMGR
- 找到新的活动实例。 在 alpha、beta 和 gamma 主机上发布 dspmq -o nativeha -x 命令,显示组状态并确定哪台主机现在是活动实例。
- 读取活动实例结束前发送的信息。 在当前活动实例中,将目录更改为 /opt/mqm/samp/bin ,其中包含示例程序。 输入以下命令,从队列中获取报文:
./amqsget QUEUE1 MYQMGR
您在步骤 8 中添加的信息可用,并将输出。 几秒钟后,命令退出。
后续操作
您还可以尝试按照示例:在 Linux 上部署简单的本机 HA CRR 配置中的说明向该组添加恢复组以提供跨区域复制。