如何将 IBM MQ 配置为 HA 集群?
How to configure IBM MQ as a HA cluster?
我想创建一个高可用性集群。但是我无法从 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('*')
我想要一个主题,我的应用程序可以从中 write/read 而不管它们连接到 QM。
这甚至可能吗?如果可以的话,您能否将 MQSC 命令或 link 共享到示例设置中。
MQ 集群是关于队列管理器之间的负载平衡连接。
- 例如,您可以在 LONDON 和 NEWYORK 上定义一个集群队列,这可以在两个 (hot/hot) 上都被 PUT(ENABLED) 并且集群成员发送到该队列的消息通常是两个实例之间的循环。
- 如果您希望它成为 hot/warm,那么您将 PUT(DISABLE) 两个实例之一,例如 LONDON,然后您将指示您的应用程序连接并从 NEWYORK 读取,如果 NEWYORK 出现故障,您可以 PUT(ENABLED) LONDON 上的队列,从那一点开始的消息将转到 LONDON,您可以将您的应用程序定向到 LONDON(请注意,位于 NEWYORK 队列上的任何消息仅在 NEWYORK 恢复时可用. MQ 不会将消息复制到两个队列管理器。
与 pub/sub 略有不同,因为集群中的所有队列管理器都知道集群主题,如果集群中任何 QM 上的任何订阅者订阅该主题,代理订阅将由订阅者 QM,如果在任何队列管理器上对该主题进行任何发布,副本将被定向到每个本地订阅者以及任何具有代理订阅的 QM,然后订阅者 QM 会将消息传递给它本地的任何订阅者(因此即使在同一个 QM 上有多个订阅者,也只有一个代理子)。
- 如果您有非长期订阅者,他们可以在任何 QM 上订阅主题,并接收在订阅创建之后发布的消息,但之前不会。
- 如果您需要在订阅者未连接时接收消息,您将需要一个持久订阅,并且该订阅将绑定到创建它的特定队列管理器。
您可能想看看 RDQM,它确实提供节点之间的复制,但与容器不兼容。
我想创建一个高可用性集群。但是我无法从 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('*')
我想要一个主题,我的应用程序可以从中 write/read 而不管它们连接到 QM。 这甚至可能吗?如果可以的话,您能否将 MQSC 命令或 link 共享到示例设置中。
MQ 集群是关于队列管理器之间的负载平衡连接。
- 例如,您可以在 LONDON 和 NEWYORK 上定义一个集群队列,这可以在两个 (hot/hot) 上都被 PUT(ENABLED) 并且集群成员发送到该队列的消息通常是两个实例之间的循环。
- 如果您希望它成为 hot/warm,那么您将 PUT(DISABLE) 两个实例之一,例如 LONDON,然后您将指示您的应用程序连接并从 NEWYORK 读取,如果 NEWYORK 出现故障,您可以 PUT(ENABLED) LONDON 上的队列,从那一点开始的消息将转到 LONDON,您可以将您的应用程序定向到 LONDON(请注意,位于 NEWYORK 队列上的任何消息仅在 NEWYORK 恢复时可用. MQ 不会将消息复制到两个队列管理器。
与 pub/sub 略有不同,因为集群中的所有队列管理器都知道集群主题,如果集群中任何 QM 上的任何订阅者订阅该主题,代理订阅将由订阅者 QM,如果在任何队列管理器上对该主题进行任何发布,副本将被定向到每个本地订阅者以及任何具有代理订阅的 QM,然后订阅者 QM 会将消息传递给它本地的任何订阅者(因此即使在同一个 QM 上有多个订阅者,也只有一个代理子)。
- 如果您有非长期订阅者,他们可以在任何 QM 上订阅主题,并接收在订阅创建之后发布的消息,但之前不会。
- 如果您需要在订阅者未连接时接收消息,您将需要一个持久订阅,并且该订阅将绑定到创建它的特定队列管理器。
您可能想看看 RDQM,它确实提供节点之间的复制,但与容器不兼容。