如何将IBM MQ配置为HA集群?

时间:2020-05-25 14:03:55

标签: ibm-mq

我想创建一个高可用性集群。但是我找不到从IBM文档中创建步骤的任何步骤。

我遵循this指南创建集群。

QM 均与docker-compose一起部署:

version: '3.7'
services:
  london:
    build:
      context: ./config/london
    environment:
      LICENSE: "accept"
      MQ_QMGR_NAME: "QM1"
      MQ_ENABLE_METRICS: "true"
    ports:
      - 9443:9443 # web view
      - 9157:9157 # metrics

  newyork:
    build:
      context: ./config/newyork
    environment:
      LICENSE: "accept"
      MQ_QMGR_NAME: "QM2"
      MQ_ENABLE_METRICS: "true"
    ports:
      - 9553:9443 # web view
      - 9158:9157 # metrics
    depends_on:
      - london

两个图像的Dockerfile:

FROM ibmcom/mq

COPY init.mqsc /etc/mqm/20-init.mqsc

这是 london MQ实例的配置:

* cluster config
ALTER QMGR +
      REPOS(INVENTORY) +
      PSCLUS(ENABLED)

DEFINE LISTENER(LONDON_LS) +
       TRPTYPE(TCP) +
       CONTROL(QMGR)

DEFINE CHANNEL(INVENTORY.LONDON) +
       CHLTYPE(CLUSRCVR) +
       TRPTYPE(TCP) +
       CONNAME('london(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-receiver channel for queue manager LONDON')

DEFINE CHANNEL(INVENTORY.NEWYORK) +
       CHLTYPE(CLUSSDR) +
       TRPTYPE(TCP) +
       CONNAME('newyork(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-sender channel from LONDON to repository at NEWYORK')

SET CHLAUTH('INVENTORY.LONDON') +
    TYPE(QMGRMAP) +
    QMNAME(QM2) +
    USERSRC(CHANNEL) +
    ADDRESS('*')

,这里是 newyork 实例:

* cluster config
ALTER QMGR +
      REPOS(INVENTORY) +
      PSCLUS(ENABLED)

DEFINE LISTENER(NEWYORK_LS) +
       TRPTYPE(TCP) +
       CONTROL(QMGR)

DEFINE CHANNEL(INVENTORY.NEWYORK) +
       CHLTYPE(CLUSRCVR) +
       TRPTYPE(TCP) +
       CONNAME('newyork(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-receiver channel for queue manager NEWYORK')

DEFINE CHANNEL(INVENTORY.LONDON) +
       CHLTYPE(CLUSSDR) +
       TRPTYPE(TCP) +
       CONNAME('london(1414)') +
       CLUSTER(INVENTORY) +
       DESCR('TCP Cluster-sender channel from NEWYORK to repository at LONDON')

SET CHLAUTH('INVENTORY.NEWYORK') +
    TYPE (QMGRMAP) +
    QMNAME(QM1) +
    USERSRC(CHANNEL) +
    ADDRESS('*')

我希望有一个主题,无论连接到哪个 QM ,我的应用程序都可以从中进行读写。 甚至有可能吗?如果可以,您是否可以共享 MQSC 命令或指向示例设置的链接。

1 个答案:

答案 0 :(得分:1)

MQ集群与队列管理器之间的负载平衡连接有关。

  • 例如,您可能有一个在LONDON和NEWYORK上定义的集群队列,这可能在(热/热)上都被PUT(ENABLED)了,并且集群成员发送到该队列的消息通常会在两个实例。
  • 如果您希望它是热的/温暖的,那么您将PUT(DISABLE)设置为两个实例之一,例如LONDON,然后您将指示您的应用程序进行连接并从NEWYORK读取,如果NEWYORK出现故障,则可以PUT (已启用)LONDON上的队列,从那以后的消息将转到LONDON,您可以将您的应用程序定向到LONDON(请注意,只有在NEWYORK恢复后,位于NEWYORK的队列上的任何消息才可用。MQ不会将消息复制到两个队列管理器。

与pub / sub稍有不同,集群中的所有队列管理器都将了解集群主题,并且如果集群中任何QM上的任何订阅者都订阅了该TOPIC,则订阅者QM将进行代理订阅,如果在任何队列管理器上对该主题进行了任何发布,则副本将定向到每个本地订户以及具有代理预订的任何QM,订户QM会将消息传递给它的本地任何订户(因此只有一个代理子,即使同一QM上有多个订阅者也是如此。

  • 如果您的订阅者具有非持久性,则他们可以在任何QM上订阅该主题,并接收在创建订阅之后但未在订阅之前发布的消息。
  • 如果您要求在未连接订户时接收消息,则需要一个持久的订书,并且该订书将与该订书的特定队列管理器绑定。

您可能想看看RDQM,它确实提供了节点之间的复制,但是与容器不兼容。