[ MQ 9.4.4 2025 年 10 月][Linux]

示例:部署简单的本地 HA 配置 Linux

本例使用简单的本地 HA 配置在三台 Linux 主机上安装队列管理器。

开始之前

要完成此示例,您必须首先完成以下先决条件:

关于本任务

本地 HA 配置定义了一组实例,它们共同组成了一个高度可用的队列管理器。 每个实例都安装在不同的主机上,因此如果其中一台主机出现故障,其他主机可以接替。

本示例定义了一个本地 HA 组,由安装在各自 Linux 主机上的三个 IBM MQ 实例组成。 实例的主机名分别为 alpha、beta 和 gamma。 在整个示例中,这些名称应替换为系统的主机名称。

本例使用默认的安装位置 (/opt/mqm) 和数据目录 (/var/mqm)。如果使用的是非默认位置,请务必在整个示例中相应替换这些路径。

有关本地 HA 配置的更多详情,请参阅本地 HA。 本地 HA 还支持跨区域复制 (CRR),即由一个额外的本地 HA 组充当恢复组,更多信息请参阅本地 HA CRR

本例使用单个证书来确保队列管理器实例流量的安全。

本示例将介绍如何在 Linux 主机上定义本地 HA 组以提供高可用性、设置监控和重启,以及强制从活动实例向副本进行故障切换。

过程

  1. 在所有三个 Linux 主机上安装 IBM MQ

    按照在 Linux 上安装和卸载 IBM MQ 中的说明接受 IBM MQ 许可并安装 IBM MQ 所有三个主机上的服务器。

    在本例中,最简单的方法是使用默认的安装位置 (/opt/mqm) 和数据位置 (/var/mqm)。如果在一个系统上更改了安装或数据位置,请确保在所有其他主机上镜像相同的更改。

  2. 设置准备安装本地 HA 实例的环境:
    1. 在每台 Linux 主机上,以 mqm 用户身份登录,使用以下命令设置环境:
      . /opt/mqm/bin/setmqenv -s 
    2. 输入以下命令,检查环境设置是否正确:
      dspmqver
      如果命令成功完成,并返回预期的版本号和安装名称,则说明环境设置正确。
  3. 创建本地 HA 队列管理器实例。 在主机 alpha、beta 和 gamma 上创建一个具有日志复制功能的队列管理器。 (可能需要使用 AutoConfig stanza 来确保对象总是以统一的方式定义,可在 crtmqm 中添加 -ic 选项,为队列管理器提供 mqsc 文件)。
    1. 在名为 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.
    2. 在名为 beta 的节点上创建第二个实例:
      crtmqm -lr beta -lf 8192 -lp 10 -ls 10 -p 1414 MYQMGR
    3. 在名为 gamma 的节点上创建第三个实例:
      crtmqm -lr gamma -lf 8192 -lp 10 -ls 10 -p 1414 MYQMGR
  4. 创建密钥库,确保实例和组流量的安全:
    1. 要创建此密钥存储,请登录 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 是您自己选择的密码。

    2. 例如,使用 sftp 将四个密钥存储文件复制到 beta 和 gamma 主机上的相同位置(/var/mqm/qmgrs/MYQMGR/ssl/ )。
    3. 在每台主机(alpha、beta 和 gamma)上,确保文件具有 mqm 组所有权,并具有 mqm 组的读取权限:
      chown :mqm /var/mqm/qmgrs/MYQMGR/ssl/keystore.* 
      chmod g+r /var/mqm/qmgrs/MYQMGR/ssl/keystore.*
      重要提示: 此处描述的示例不适合生产环境,仅作为快速启动的示例。 对于高级用户来说,证书管理是一个复杂的问题。 对于生产,你必须考虑到轮换、撤销、密钥长度、灾难恢复等问题。
  5. 创建本地 HA 组。 该组是通过编辑每个队列管理器实例的 /var/mqm/qmgrs/MYQMGR/qm.ini 文件创建的。
    1. 更新 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 指定实例之间流量的证书。
    2. 为每个 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 节点的名称和复制地址)
    3. 启动组中的实例。 现在,您可以在 alpha、beta 和 gamma 主机上启动队列管理器实例:
      strmqm MYQMGR
    4. 验证组已正确部署。 在 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 角色。 其他主机的状态类似,但 ROLEReplica
  6. 增加队列管理器的监控和重启功能。

    如果实例意外发生故障,必须尽快检测到故障并重新启动实例。 在本例中,一个示例演示了 "有效性 "检查的实施。 示例使用了 python 脚本和 systemd 守护进程。 使用这种方法时,必须使用 systemd 来启动和结束队列管理器,而不是使用 IBM MQ 命令。

    按照监控、重启和结束队列管理器实例中的说明,为 alpha、beta 和 gamma 主机添加队列管理器监控和重启功能。

  7. 定义队列。 在活动实例上,输入以下命令启动 MQSC:
    runmqsc MYQMGR
    MQSC 启动时会有一条信息提示。 MQSC 没有命令提示符。 定义本地持久队列
    DEFINE QLOCAL('QUEUE1') DEFPSIST(YES)
    队列创建时会显示一条信息。 输入以下命令停止 MQSC:
    end
    显示信息,然后是命令提示符。 QUEUE1 队列会复制到组中的其他实例。
  8. 将持久信息添加到队列中。 QUEUE1 队列上的 DEFPSIST(YES) 属性会使通过 amqsputc 样本放入队列的报文具有持久性。 它们被复制到副本实例中。
    将目录更改为 /opt/mqm/samp/bin ,其中包含示例程序。 输入以下命令,将信息放入队列:
    ./amqsput QUEUE1 MYQMGR
    如果与队列管理器的连接成功,则输出以下响应:
    target queue is QUEUE1
    输入一些文字,然后每次都按回车键,将多条信息放入队列。 输入空行结束信息输入。 显示如下信息
    Sample AMQSPUT0 end
    您的邮件现在已进入队列,并显示命令提示符。
  9. 重新启动主动程序,模拟主机故障。 停止活动实例,稍等片刻,然后使用以下命令启动活动实例:
    sudo systemctl stop mqmonitor@MYQMGR
    sudo systemctl start mqmonitor@MYQMGR
  10. 找到新的活动实例。 在 alpha、beta 和 gamma 主机上发布 dspmq -o nativeha -x 命令,显示组状态并确定哪台主机现在是活动实例。
  11. 读取活动实例结束前发送的信息。 在当前活动实例中,将目录更改为 /opt/mqm/samp/bin ,其中包含示例程序。 输入以下命令,从队列中获取报文:
    ./amqsget QUEUE1 MYQMGR
    
    您在步骤 8 中添加的信息可用,并将输出。 几秒钟后,命令退出。

后续操作

您还可以尝试按照示例:在 Linux 上部署简单的本机 HA CRR 配置中的说明向该组添加恢复组以提供跨区域复制。