5

我对 websphere MQ 很陌生,所以如果我没有使用正确的术语,请原谅我。我们正在做一个项目,我们需要在其中设置一个 MQ 集群以实现高可用性。

客户端应用程序为订阅者和发布者维护与队列管理器的连接池。假设我们在托管同名队列的集群中有两个队列管理器。每个队列都有自己的一组订阅者和发布者,这些订阅者和发布者由客户端应用程序缓存。假设其中一个队列管理器出现故障,该队列管理器上的队列的订阅者和发布者将死亡,从而使客户端应用程序上的对象失效。

在这种情况下,可以处理以下场景吗?

1]当第一个QueueManager崩溃时,其队列上的消息被转移到集群中的其他queuemanager

2]当QueueManager再次出现时,是否有任何机制可以恢复发布者和订阅者。目前我们已经在客户端应用程序中编写了一个自动恢复线程,它试图重新连接失败的发布者和订阅者。但是在集群设置的情况下,我们担心发布者和订阅者会重新连接到另一个正在运行的 qmanager。并且当崩溃的队列管理器被恢复时,它不会有发布者和订阅者。

谁能解释一下如何处理上述两种情况?

4

2 回答 2

6

WMQ 集群是一个高级主题。在尝试任何事情之前,您必须首先对 WMQ 进行大量阅读并了解 WMQ 世界中的集群意味着什么。

WMQ 集群在许多方面与传统集群不同。与传统集群不同,比如在主动/被动集群中,数据将在应用程序的主动和被动实例之间共享。在任何时间点,应用程序的活动实例都将处理数据。当主动实例宕机时,被动实例接管并开始处理。在 WMQ 集群中情况并非如此,其中集群中的队列管理器是唯一的,因此由这些队列管理器托管的队列/主题不共享。您可能在两个队列管理器中拥有相同的队列/主题,但由于队列管理器不同,因此不会共享消息、主题、订阅等。

回答您的问题。
1) 不。消息,如果持久,将保留在崩溃的队列管理器中。它们不会被转移到其他队列管理器。由于队列管理器本身不可用,因此在启动队列管理器之前无法进行任何操作。
2)没有。队列管理器不能这样做。检查队列管理器的可用性并重新连接是应用程序的职责。WMQ 提供自动客户端重新连接功能,当 WMQ 客户端库检测到连接中断错误时,它们会自动重新连接到队列管理器。此功能可从带有 C 和 Java 客户端的 WMQ v7.x 及更高版本中获得。C# 客户端支持 v7.1 中的功能。

对于您的高可用性要求,您可以考虑使用 WMQ 的多实例队列管理器功能。此功能启用在两台不同机器上运行的同一队列管理器的主动/被动实例。队列管理器的活动实例将处理客户端连接,而被动实例将处于睡眠模式。两个实例都将共享数据和日志。一旦主动实例关闭,被动实例就会变为主动。您将有权访问活动队列管理器关闭之前队列中的所有持久消息。

阅读 WMQ 信息中心,了解有关多实例队列管理器的更多信息。

于 2013-04-05T04:25:56.297 回答
4

要添加到 Shashi 的答案,要充分利用 WMQ 集群,您需要在消息的发送者和接收者之间建立一个网络跃点。WMQ 集群是关于 QMgrs 之间如何对话。它与客户端应用程序如何与 QMgrs 对话无关,也不复制消息。在集群中,当消息必须从一个 QMgr 传递到另一个 QMgr 时,集群会确定将其路由到何处。如果单个目标队列有多个集群实例,则消息有资格被路由到其中的任何一个。如果发送方和接收方之间没有网络跳跃,则消息不需要离开本地 QMgr,因此永远不会调用 WMQ 集群行为,即使所涉及的 QMgr 可能参与集群。

在传统的 WMQ 集群架构中,接收者都侦听同一队列的多个实例,具有相同的名称,分布在多个 QMgrs 中。发送者有一个或多个 QMgrs,他们可以在其中连接和发送请​​求(即发即弃),可能等待回复(请求-回复)。由于消息的接收者提供一些服务,我称他们的 QMgrs 为“服务提供者 QMgrs”。消息发送者所在的 QMgrs 是“服务消费者”QMgrs,因为这些应用程序是服务的消费者。

下面的幻灯片来自我在 WMQ 架构咨询活动中使用的演示文稿。

WebSphere MQ 的 SOA 架构

请注意,服务的消费者 - 发送请求消息的事物 - 故障转移。监听服务端点队列并提供服务的事物不会故障转移。这是因为需要确保始终为每个活动的服务端点队列提供服务。通常,每个应用程序实例都拥有两个或更多队列实例的输入句柄。这样,QMgr 可以关闭并且所有应用程序实例保持活动状态。如果一个应用程序实例出现故障,其他一些应用程序实例会继续为其队列提供服务。如果需要,服务提供者与特定 QMgrs 的这种亲和性还支持 XA 事务性。

我发现解释 WMQ HA 的最佳方式是 IMPACT 会议的幻灯片:

WebSphere MQ 高可用性选项

WebSphere MQ 集群确保服务保持可用,即使集群队列的实例可能不可用。集群中的新消息将路由到剩余的队列实例。硬件集群或多实例 QMgr (MIQM) 提供对现有消息的访问。当主动/被动对的一侧出现故障时,只有在发生故障转移时,该 QMgr 才会短暂中断,然后辅助节点接管并使队列上的任何消息再次可用。结合了 WMQ 集群和硬件集群/MIQM 的网络可提供最高级别的可用性。

请记住,这些配置中都没有跨节点复制的消息。WMQ 消息总是有一个物理位置。有关这方面的更多信息,请参阅灾难恢复思考

于 2013-04-07T13:56:37.777 回答