集群: 迁移和修改最佳实践

本主题提供有关规划和管理 IBM® MQ 集群的指导。 此信息是基于测试和客户反馈的指南。

  1. 在集群中移动对象 (在集群中移动对象的最佳实践,而不安装任何修订包或新版本的 IBM MQ )。
  2. 升级和维护安装 (在应用维护或升级以及测试新体系结构时保持工作集群体系结构正常运行的最佳实践)。

在集群中移动对象

应用程序及其队列

如果必须将托管在一个队列管理器上的队列实例移动到另一个队列管理器上,那么可以使用工作负载均衡参数来确保平稳过渡。

创建要在其中进行新托管的队列实例,但使用集群工作负载均衡设置继续向原始实例发送消息,直到应用程序准备好切换为止。 这是通过以下步骤实现的:
  1. 将现有队列的 CLWLRANK 属性设置为高值,例如 5。
  2. 创建队列的新实例,并将其 CLWLRANK 属性设置为零。
  3. 完成新系统的任何进一步配置,例如,针对队列的新实例部署和启动使用应用程序。
  4. 将新队列实例的 CLWLRANK 属性设置为高于原始实例,例如 9。
  5. 允许原始队列实例处理系统中的任何排队消息,然后删除该队列。
移动整个队列管理器
如果队列管理器位于同一主机上,但 IP 地址正在更改,那么此过程如下所示:
  • 当正确使用 DNS 时,可以帮助简化过程。 有关通过设置 连接名称 (CONNAME) 通道属性来使用 DNS 的信息,请参阅 ALTER CHANNEL
  • 如果移动完整存储库,请确保至少有一个其他完整存储库正在平稳运行 (例如,通道状态没有问题) ,然后再进行更改。
  • 使用 SUSPEND QMGR 命令暂挂队列管理器以避免流量堆积。
  • 修改计算机的 IP 地址。 如果 CLUSRCVR 通道定义使用 CONNAME 字段中的 IP 地址,请修改此 IP 地址项。 可能需要清空 DNS 高速缓存以确保到处都有可用的更新。
  • 当队列管理器重新连接到完整存储库时,通道自动定义会自动解析自身。
  • 如果队列管理器托管了完整存储库,并且 IP 地址发生更改,请务必确保尽快切换分区以将任何手动定义的 CLUSSDR 通道指向新位置。 在执行此切换之前,这些队列管理器可能只能联系剩余的 (未更改的) 完整存储库,并且可能会看到有关不正确通道定义的警告消息。
  • 使用 RESUME QMGR 命令恢复队列管理器。

如果必须将队列管理器移至新主机,那么可以复制队列管理器数据并从备份复原。 但是,除非没有其他选项,否则建议不要执行此过程; 最好在新机器上创建队列管理器,并按上一节中所述复制队列和应用程序。 这种情况提供了一种平滑的翻转/回滚机制。

如果您决心使用备份来移动完整的队列管理器,请遵循以下最佳实践:
  • 将整个进程视为来自备份的队列管理器复原,应用您通常用于操作系统环境的系统恢复的任何进程。
  • 迁移后使用 REFRESH CLUSTER 命令来废弃所有本地持有的集群信息 (包括任何不确定的自动定义通道) ,并强制对其进行重建。
    注: 对于大型集群,使用 REFRESH CLUSTER 命令可能会在集群进行时对其造成干扰,并且在集群对象自动向所有感兴趣的队列管理器发送状态更新之后的 27 天时间间隔再次发生干扰。 请参阅 在大型集群中刷新可能会影响集群的性能和可用性
创建队列管理器并从集群中的现有队列管理器复制设置 (如本主题中所述) 时,切勿将两个不同的队列管理器视为实际相同。 特别是,不要为新队列管理器提供相同的队列管理器名称和 IP 地址。 尝试 "删除" 替换队列管理器是导致 IBM MQ 集群中出现问题的常见原因。 高速缓存期望接收包含 QMID 属性的更新,并且状态可能已损坏。

如果意外创建了两个同名的不同队列管理器,那么建议使用 RESET CLUSTER QMID 命令从集群中弹出不正确的条目。

升级和维护安装

避免所谓的大爆炸场景 (例如,停止所有集群和队列管理器活动,对所有队列管理器应用所有升级和维护,然后同时启动所有内容)。 集群设计为仍可与多个版本的队列管理器共存,因此建议采用规划良好的分阶段维护方法。

具有备份计划:
  • 您是否进行了备份?
  • 避免立即使用新的集群功能: 请等待,直到您确定所有队列管理器都已升级到新级别,并且确定您不会将任何队列管理器回滚。 在某些队列管理器仍处于较早级别的集群中使用新的集群功能可能会导致未定义的行为。

    存储库将其接收到的记录存储在其自己的版本中。 如果它接收的记录处于更高版本,那么在存储记录时将废弃更高版本的属性。 接收有关 IBM MQ 9.4 队列管理器的信息的 IBM MQ 9.3 队列管理器仅存储 IBM MQ 9.3 信息。 接收 IBM MQ 9.3 记录的 IBM MQ 9.4 存储库会存储更高版本中引入的属性的缺省值。 缺省值定义未包含在其接收的记录中的属性值。

首先迁移完整存储库。 虽然他们可以转发他们不了解的信息,但他们不能坚持下去,因此除非绝对必要,否则并不是建议的方法。 有关更多信息,请参阅 队列管理器集群迁移