简介: 本文展示如何使用 WebSphere MQ Clustering、Omegamon XE for Messaging 和 Tivoli Monitoring,通过降低由应用程序停用导致的失败和服务超时,来改进消息传递系统中的服务可用性。
IBM® WebSphere® Clustering 提供了一组强大的消息工作负载平衡特性。默认情况下,消息是基于队列管理器可用性实现负载平衡的,而不是基于消息使用方应用程序的可用性。因此,可以将消息发送到消息使用方应用程序不积极提供服务的集群队列。WebSphere MQ 触发机制可用于避免消息在队列上保持未处理状态,但有时该机制并不适用,例如当应用程序拥有特殊的连接池或启动逻辑时。如果未启用触发机制且消息在队列上保持未处理状态,那么服务失败或超时的风险将增加。
本文展示如何只将消息发送到正由消息使用方应用程序积极提供服务的那些队列。这个解决方案降低了由不适合使用触发机制的 WebSphere MQ 应用程序导致的失败和服务超时。这个解决方案使用:
WebSphere MQ Clustering 并不基于消息使用方应用程序的可用性来实现消息负载平衡,比如通过一个含三个队列管理器的集群来实现(见图 1)。连接到 QM1 的消息生成方应用程序将消息放置到队列 CLUSQ1。默认情况下,集群机制在 QM2 和 QM3 上的 CLUSQ1 的各个实例之间均等地平衡消息负载,即使一个消息使用方应用程序当时不对 QM3 上的 CLUSQ1 提供服务。

在多数环境中,如果消息到达 QM3 上的 CLUSQ1,WebSphere MQ 触发机制可用于启动一个消息使用方应用程序。在这个示例中,消息使用方应用程序在一个由于计划外停用而离线的应用程序服务器中运行。由于特殊的启动流程,触发机制不能用于启动该应用程序服务器。在这种情况下,当该应用程序服务器离线时,最好将所有消息发送到拥有一个活动应用程序服务器和消息使用方应用程序的 QM2 上的 CLUSQ1 中。通过活动消息使用方应用程序发送消息到队列的需求与以下几种情景相关:
您可以基于应用程序可用性来构建工作负载平衡机制,这里要用到 WebSphere MQ 的一些特性和其他一些产品 —— 本例中是 IBM Tivoli Monitoring 和 Omegamon XE for Messaging。
本小节介绍如何使用这三个产品来基于应用程序可用性实现消息负载平衡。要参考关于其他解决方案的讨论,请参见下面的 备用方案 小节。
WebSphere MQ 集群机制用于将多个队列管理器合并为一些小组。如这个解决方案所示,集群机制有两个主要目的:
Omegamon XE for Messaging 为 WebSphere MQ 和 WebSphere Message Broker 提供监控和配置特性。在这个解决方案中,它用于监控 WebSphere MQ 队列的状态。
Tivoli Monitoring 提供一些基础设施和工具来监控、配置和自动化一些健康业务系统的运行。其他许多监控产品都可以连接到 Tivoli Monitoring,提供一个集中的企业级监控解决方案。这个解决方案联合使用 Omegamon XE for Messaging 和 Tivoli Monitoring 来监控、配置和自动化对 WebSphere MQ 资产的更改。Tivoli Enterprise Portal 图形用户界面用于配置 Omegamon XE for Messaging 的特性并自动化操作。Tivoli Monitoring 向 Tivoli Enterprise Portal 提供替代管理界面。
这个解决方案包括三个阶段,以基于应用程序可用性实现工作负载平衡。
开放输入计数队列属性(IPPROCS)用于表明消息使用方应用程序的存在。IPPROCS 显示允许处理队列消息的应用程序量。一个非零开放输入计数表明至少有一个应用程序准备好处理队列上的消息。开放输入计数为零表示没有一个应用程序准备好处理队列上的消息。
放置队列属性(PUT)用于影响集群工作负载平衡。在这个解决方案中 PUT 的功效在于它基于集群机制的两个强大特性。第一,集群工作负载算法不会将消息发送到禁用放置的队列。第二,集群机制在集群队列对象定义的 put 属性改变时自动传播这些定义。以上面的图 1 为例,如果 QM2 上的 CLUSQ1 更改为禁用放置,则对象变更被自动传播到 QM1。因此,由连接到 QM1 的应用程序放置的消息将不会被发送到 QM2,这样,所有消息都将被发送到 QM3。如果 QM2 上的 CLUSQ1 稍后更改为允许放置,同样,对象更改将自动传播到 QM1,从而使消息工作负载在 QM2 和 QM3 之间均衡分布。
如果消息排列在缺乏活动消息使用方应用程序的集群队列上,最好重新分发消息,以便将它们发送到拥有活动消息使用方应用程序的队列。这个解决方案使用一个简单的应用程序从没有活动消息使用方应用程序的集群队列提取消息,并将它们放置到另一个集群队列中。集群工作负载平衡算法不允许将消息放置到禁用放置的队列(没有活动消息使用方应用程序的队列)。通过这种方法,消息被重新分发到在其中得到及时处理的可能性最大的队列中。
关键的解决方案组件列示如下并如图 2 所示:

本文介绍的一般原则可以根据产品和平台组合的不同而相应进行调整。这个特殊的解决方案使用以下 AIX V5.3 软件部署和测试:
这些配置说明做出以下假设:
#!/bin/sh
#
# Check that the required parameters were used
if [ $# -ne 2 ]
then
echo "$0 : You must supply the queue and qmgr"
exit 1
fi
# Put-enable the queue
echo 'ALTER QL(' $1 ') PUT(ENABLED)' | runmqsc $2
|
#!/bin/sh
#
# Check that the required parameters were used
if [ $# -ne 2 ]
then
echo "$0 : You must supply the queue and qmgr"
exit 1
fi
# Put-disable the queue
echo 'ALTER QL(' $1' ) PUT(DISABLED)' | runmqsc $2
# Redistribute any messages on the queue by
# using the Q application
/opt/IBM/MA01/q -I$1 -m$2 -o$1 –p1
|
这个解决方案使用一些 shell 脚本,以便在一个地方、以一致的方式配置 WebSphere MQ 并执行消息重新分发应用程序。或者,您也可以使用 Tivoli Enterprise Portal 工作流和 Omegamon XE for Messaging 执行上述操作。
设置 Tivoli Enterprise Portal 情景




根据最大消息处理时间来设置采样间隔。

/opt/MQScripts/queueDisable.sh
&{Queue_Data.Queue_Name}
&{Queue_Data.MQ_Manager_Name}
|




根据最大消息处理时间来设置采样间隔:

/opt/MQScripts/queueEnable.sh
&{Queue_Data.Queue_Name}
&{Queue_Data.MQ_Manager_Name}
|

配置现在完成,准备好进行测试。
测试摘要:
这个测试应用程序就是来自 WebSphere MQ SupportPac MA01 的 Q 应用程序。要测试这个解决方案,请执行以下步骤:
测试到此完毕。
这个解决方案包括三个阶段,以基于应用程序可用性实现工作负载平衡:
本小节介绍如何使用备用方案实现每个阶段。
可以使用开放输入计数来大致估计哪些队列拥有准备好处理消息的应用程序,但这种方法并不总是可靠。如果一个队列拥有一个非零开放输入计数,一个应用程序可能没有准备好处理消息。可能的原因包括:
使用开放输入计数的备用方案:
对队列启用和禁用放置是一种好方法,因为集群机制会自动把更改传播到放置属性并在平衡工作负载时使用该属性。集群工作负载等级(CLWLRANK)是适合这个自动更改传播模型的另一个队列属性。集群工作负载等级属性与放置属性存在以下两方面区别:
如果您使用集群工作负载等级属性,则应将集群工作负载使用队列(CLWLUSEQ)设置为 ANY,以便消息工作负载被平衡到远程队列,即使存在一个本地工作队列。
放置属性和集群工作负载等级属性在行为上的区别提供了两类服务:
还有其他备用方案,包括影响集群工作负载算法的集群通道属性(例如,集群工作负载等级或集群工作负载权重)。
在本文介绍的解决方案中,Q 应用程序用于将消息重新分发到拥有活动应用程序的队列。您必须确保消息被正确地重新分发。在一个集群队列的所有实例都禁用放置的情况下,重新分发应用程序将失败(由于 MQRC_CLUSTER_PUT_INHIBITED),导致消息被回滚到队列的原始本地实例上并在那里等待,直到启动一个本地应用程序来处理消息。如果一个消息使用者稍后在一个远程队列管理器上启动,重新分发流程不会重新启动,因此消息将保持排队状态,即使集群中的其他地方有一个健康的消息使用方应用程序可用。可以重新编写应用程序,以便在重新分发消息之前将所有队列实例的状态纳入考虑范围,并在重新分发成功完成之前按照计划的间隔运行。
如果使用集群工作负载等级属性,要确保将消息重新分发到同等低级的队列不会导致从队列管理器到队列管理器的消息循环,这是重新分发循环的一部分。
消息处理时间由服务级别协议规定。在为 Tivoli Enterprise Portal 中定义的情景设置采样间隔时,应该考虑这些时间。WebSphere MQ 触发机制通常是基于监控和采样启动应用程序的推荐备用方案,尽管如前所述,该特性并不适合所有环境。
尽管集群自动定义和对象更改传播功能非常有用,但您需要确保队列管理器之间的通道(特别是来往于完整存储库队列管理器的通道)保持健康。如果通道不健康,集群对象更改消息则不能流动,导致工作负载平衡方法选择基于过时数据(比如,队列的放置属性)。您可以使用 Omegamon XE for Messaging 和 Tivoli Monitoring 这样的产品来监控通道状况并就通道问题向操作人员发出警报,从而避免这种情况发生。
本文展示如何使用 WebSphere MQ Clustering、Omegamon XE for Messaging 和 Tivoli Monitoring,通过降低由应用程序停用导致的失败和服务超时,来改进消息传递系统中的服务可用性。这些产品提供可靠的工具来管理和监控您的消息传递基础设施,从而改善可用性。这些产品还链接到范围广泛的其他 Tivoli 产品,支持一种集中、整体的消息传递系统监控方法。
原文链接:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1005_vanstone/1005_vanstone.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14789789/viewspace-671156/ ,如需转载,请注明出处,否则将追究法律责任。