【问题标题】:Websphere MQ clusteringWebsphere MQ 集群
【发布时间】:2017-02-02 15:06:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: cluster-computing ibm-mq


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-09-30
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        • 2016-05-05
        • 1970-01-01
        • 2018-02-10
        • 2016-11-23
        相关资源
        最近更新 更多