[Kubernetes][IBM MQ Advanced][IBM Cloud Pak for Integration]

本机 HA

本机 HA 是适用于 IBM® MQ 的本机 (内置) 高可用性解决方案,适用于云块存储器。

本机 HA 配置提供了一个高可用性队列管理器,其中可恢复的 MQ 数据 (例如,消息) 在多个存储器集中进行复制,从而防止因存储器故障而丢失。 队列管理器由多个正在运行的实例组成,其中一个实例是引导者,其他实例准备好在发生故障时快速接管,从而最大化对队列管理器及其消息的访问权。

本机 HA 配置由三个 Kubernetes pod 组成,每个 pod 都具有队列管理器实例。 一个实例是活动队列管理器,用于处理消息并写入其恢复日志。 每当写入恢复日志时,活动队列管理器都会将数据发送到其他两个实例 (称为副本)。 每个副本写入自己的恢复日志,确认数据,然后从复制的恢复日志更新自己的队列数据。 如果运行活动队列管理器的 pod 失败,那么队列管理器的其中一个副本实例将接管活动角色并具有要使用的当前数据。

日志类型称为 "复制日志"。 复制日志本质上是线性日志,启用了自动日志管理和自动介质映像。 请参阅 日志记录类型。 您可以使用用于管理线性日志的相同方法来管理复制的日志。

Kubernetes Service 用于将 TCP/IP 客户机连接路由到当前活动实例,该实例被标识为可供网络流量使用的唯一 pod。 发生这种情况时,不需要客户机应用程序了解不同的实例。

三个 pod 用于大大降低出现裂脑情况的可能性。 在双 pod 高可用性系统中,当两个 pod 之间的连接中断时,可能会发生裂脑。 在没有连接的情况下,两个 pod 都可以同时运行队列管理器,从而累积不同的数据。 在恢复连接时,将有两个不同版本的数据 ("分割-大脑") ,需要手动干预来决定要保留的数据集以及要废弃的数据集。

本机 HA 使用具有定额的三个 pod 系统来避免裂脑情况。 可以与至少一个其他 pod 进行通信的 pod 构成定额。 队列管理器只能成为具有定额的 pod 上的活动实例。 队列管理器无法在未连接到至少一个其他 pod 的 pod 上变为活动状态,因此绝不会同时存在两个活动实例:
  • 如果单个 pod 发生故障,那么其他两个 pod 中的一个 pod 上的队列管理器可以接管。 如果两个 pod 发生故障,那么队列管理器无法成为其余 pod 上的活动实例,因为该 pod 没有定额 (其余 pod 无法判断其他两个 pod 是否已发生故障,或者它们仍在运行并且已失去连接)。
  • 如果单个 pod 失去连接,那么队列管理器无法在此 pod 上变为活动状态,因为该 pod 没有定额。 其余两个 pod 中的一个 pod 上的队列管理器可以接管,这些 pod 具有定额。 如果所有 pod 都失去连接,那么队列管理器无法在任何 pod 上变为活动状态,因为没有任何 pod 具有定额。

如果活动 pod 发生故障并随后恢复,那么它可以以副本角色重新加入组。

为了提高性能和可靠性,建议将 RWOReadWriteOnce)持久存储与本地 HA 配置一起使用。 如果来自任何存储器提供者的 RWO 卷满足以下条件,那么这些卷受支持:
  • 从块存储器提供程序获取。
  • 格式化为 ext4 或 XFS (确保 POSIX 合规性)。
  • 支持动态卷供应和"volumeBindingMode: WaitForFirstConsumer")。
明确禁止以下提供程序:
  • NFS
  • GlusterFS
  • 其他非块提供程序。
[ MQ 9.4.2 2025年2月]注意 :如果您配置了原生高可用跨区域复制,那么所需的磁盘空间至少是原生高可用所需的两倍。 这是因为在重建索引期间需要日志备份目录(请参阅原生高可用性跨区域复制

下图显示了在三个容器中部署了队列管理器的三个实例的典型部署。

图 1。 本机 HA 配置示例
显示三个 pod ,每个 pod 运行一个队列管理器