任务:消息: WebSphere MQ 集群设计和操作
集群健康检查
作为 IBM WebSphere MQ 的专业顾问,经常有人打电话叫我过去诊断和解决产品宕机问题,并且常常是紧急的问题。在大部分情况下,不健康的集群是问题的根源。由于具有这方面的经验,我能够识别受损系统中经常出现的问题,并且总结了一些能够避免这些问题并保持集群健康的建议。
当然,WebSphere MQ 集群设计和管理仍然处在探索时期。条条大道通罗马,我见过许多没有按照我建议的某些规则去做的场合,但仍然能够成功地维护集群。但这通常是比较专业化的案例,其中成功主要取决于本地的考虑事项 —— 这意味着存在缓解因素,比如先进的监控或管理技能,或者缺乏复杂的因素,比如系统变更的机会小或集群非常小。
但是随着时间的推移,所有系统都会改变并且本地环境可能让系统经不起改变带来的冲击。因此,我倾向于使用适用性比较广的方法。对于 WebSphere MQ 集群,我在这里建议使用的方法是我认为几乎适用于所有情况的方法。
集群是什么 —— 以及它不是什么
剥离枝节之后,WebSphere MQ 集群本质上仅是一组队列管理器的集合,它们共享相同的名称空间、某些管理功能的代理和密集的 “任意对任意” 连接性。MQ 集群的所有益处都源于这些条件之一或一部分。易于管理是将一部分管理任务委托给内部队列管理器进程的直接结果。拥有一个队列的多个实例的能力是将通用名称空间和密集连接结合的结果。这反过来支持工作负载平衡和动态路由。
但是 WebSphere MQ 集群从来没有超越单个队列管理器的集合的界限,也不试图超越该界限。对于 WebSphere MQ,不存在 “连接到集群” 的概念。连接通常指向集群内部的特定节点。类似地,不管队列管理器是否参与集群,应用程序可用的功能都是一样的。就像点对点消息传递一样,连接到集群队列管理器的应用程序仍然仅能从本地队列获取消息,并且仍然能够处理任何能够在本地解析其名称的队列,不管目标队列位于何处。
这有时候可能令人困惑,因为其他地方也存在术语 “集群”。例如,硬件集群是一个由多个物理服务器组成的逻辑实体。连接到硬件集群的程序能够看到逻辑实体而不是其下的物理组件。类似地,许多应用服务器、数据库和其他软件平台都可以配置为将它们的集合呈现为单个实体。这种用法非常常见,所以对许多人而言,集群这个词意味着由多个物理组件组成的单个逻辑实体。
因此 WebSphere MQ 集群经常被误解是情有可原的。许多人在第一次见到术语 WebSphere MQ 集群时,都不由自主地将其想象成一个由多个物理队列管理器组成的大型虚拟队列管理器,它的用途相当于一个队列管理器。类似地,术语集群队列通常让人联想到用作单个逻辑队列的多个队列实例,这个逻辑队列可以进行连接并发送和获取消息。但这种对 WebSphere MQ 的工作方式的主观判断是错误的,因此误解可能导致糟糕的设计或操作选择。
WebSphere MQ 集群不关注应用程序如何与队列管理器交互,它关注队列管理器之间如何交互。