本文讲述了如何利用WebSphere MQ集群实现Message Broker集群。并讨论了如何利用WebSphere MQ V6的新功能,实现非对称硬件环境下Message Broker集群的负载均衡。
1 引言
众所周知,Message Broker可以通过配置多个流程实例以及多个执行组实现纵向扩展-即增加系统CPU个数,WMB系统处理能力将会相应提升。
在横向扩展方面,Message Broker可以利用WebSphere MQ集群实现Broker集群,从而可以通过增加新机器,实现Message Broker应用系统的平滑扩容。
本文详细介绍了如何实现Message Broker集群以及在非对称环境下如何实现系统的负载均衡。并通过在两台硬件配置不同的AIX系统上的性能测试,分析了Message Broker集群的扩展能力。


|
回页首 |
|
2 软件要求
- WebSphere Message Broker V6
- WebSphere MQ V6
- 压力发生程序:WBI Message Broker V6 - Message display, test and performance utilities(MB support pac IH03)


|
回页首 |
|
3 测试硬件环境


|
回页首 |
|
4 测试环境拓扑结构
WebSphere Message Broker集群是建立在WMQ集群基础上的。本文实现的Message Broker集群如下图所示:
三个队列管理器BRK1_QM, BRK2_QM以及APP_QM共同组成MQ集群环境,其中BRK1_QM和BRK2_QM分别用做WMB代理BRK1和BRK2的队列管理器。而压力发生程序通过APP_QM接入到MQ集群中。通过MQ集群的负载均衡功能,实现Message Broker集群的负载均衡。


|
回页首 |
|
5 配置MQ集群
1. 在AIX01上创建队列管理器BRK1_QM和APP_QM,在AIX02上创建队列管理器BRK2_QM。
2. 在BRK1_QM上执行如下命令,创建MQ对象。
ALTER QMGR REPOS(MBCLUST)
DEFINE LISTENER(BRK1_LSR) TRPTYPE(TCP) CONTROL(QMGR) PORT(1616)
START LISTENER(BRK1_LSR)
DEFINE CHANNEL ('TO.BRK2_QM') CHLTYPE(CLUSSDR) CLUSTER('MBCLUST')
CONNAME('192.168.0.2(1616)') REPLACE
DEFINE CHANNEL ('TO.BRK1_QM') CHLTYPE(CLUSRCVR) CLUSTER('MBCLUST')
CONNAME('192.168.0.1(1616)') REPLACE
DEFINE QLOCAL ('IN') CLWLUSEQ(ANY) CLUSTER('MBCLUST') REPLACE
|
3. 在BRK2_QM上执行如下命令,创建MQ对象。
ALTER QMGR REPOS(MBCLUST)
DEFINE LISTENER(BRK2_LSR) TRPTYPE(TCP) CONTROL(QMGR) PORT(1616)
START LISTENER(BRK2_LSR)
DEFINE CHANNEL ('TO.BRK1_QM') CHLTYPE(CLUSSDR) CLUSTER('MBCLUST')
CONNAME('192.168.0.1(1616)') REPLACE
DEFINE CHANNEL ('TO.BRK2_QM') CHLTYPE(CLUSRCVR) CLUSTER('MBCLUST')
CONNAME('192.168.0.2(1616)') REPLACE
DEFINE QLOCAL ('IN') CLWLUSEQ(ANY) CLUSTER('MBCLUST') REPLACE
|
4. 在APP_QM上执行如下命令,创建MQ对象。
DEFINE LISTENER(APP_LSR) TRPTYPE(TCP) CONTROL(QMGR) PORT(1818)
START LISTENER(APP_LSR)
DEFINE CHANNEL ('TO.BRK1_QM') CHLTYPE(CLUSSDR) CLUSTER('MBCLUST')
CONNAME('192.168.0.1(1616)') REPLACE
DEFINE CHANNEL ('TO.BRK2_QM') CHLTYPE(CLUSSDR) CLUSTER('MBCLUST')
CONNAME('192.168.0.2(1616)') REPLACE
DEFINE CHANNEL ('TO.APP_QM') CHLTYPE(CLUSRCVR) CLUSTER('MBCLUST')
CONNAME('192.168.0.1(1818)') REPLACE
DEFINE QLOCAL ('OUT') CLUSTER('MBCLUST') REPLACE
|
5. 确保所有发送方通道均已经启动。


|
回页首 |
|
6 配置Broker
分别在AIX01和AIX02执行如下命令分别创建代理BRK1, BRK2。具体Broker的配置方式请参考《WebSphere Message Broker Configuration, Administration, and Security》
-- 在AIX01上执行
mqsicreatebroker BRK1 -i <ServiceUserID> -a <ServicePassWord>
-q BRK1_QM -n <BrokerDBName> -u <DBUserID>-p <DBPassWord>
-- 在AIX02上执行
mqsicreatebroker BRK2 -i <ServiceUserID> -a <ServicePassWord>
-q BRK2_QM -n <BrokerDBName> -u <DBUserID>-p <DBPassWord>
|


|
回页首 |
|
7 部署测试用消息流
本文测试使用的消息流如下图所示,该消息流利用Message Set解析一342字节大小的定长(FixedLength)格式报文,并将其转换成624字节大小的XML文件。初始报文从IN队列流入,经转换后的报文发送到OUT队列中。
1. 在BRK1和BRK2上分别创建两个执行组。
2. 将测试消息流部署到四个执行组上。


|
回页首 |
|
8 非对称环境WMB集群负载均衡
由于AIX01和AIX02的CPU主频率不同(AIX01为1.9GHz,AIX02为1GHz),导致这两台机器的处理能力有很大区别。为合理配置WMB集群负载,需要先测定AIX01和AIX02的处理能力,以便合理分发消息。以下是分别在这两台机器上部署测试消息流后的处理结果。本次测试由压力工具一次性向IN队列刷入50000条消息进行WMB吞吐率分析。其中消息吞吐率用如下公式计算得出:
消息吞吐率(条/秒)= 50000 /(第一个消息放入IN队列时间 - 最后一个消息从OUT队列读出时间)
8.1 AIX01单机性能
8.2 AIX02单机性能
由测试结果可以看出,Message Broker的处理性能随CPU性能增强也相应增强,AIX01的处理性能基本上是AIX02的2倍。
得到如上数据后,就可以根据机器的相应性能,利用WebSphere MQ集群的负载均衡功能设置权重,根据机器硬件性能来分发消息了。根据以上的测试结果,本文设计按照2:1的方式分别向AIX01和AIX02发送消息,以最大化系统的吞吐率。
8.3 配置MQ集群负载均衡
1. 对BRK1_QM和BRK2_QM分别做如下设置。
runmqsc BRK1_QM
ALTER CHANNEL(TO.BRK2_QM) CHLTYPE(CLUSRCVR) CLWLWGHT(2)
|
runmqsc BRK2_QM
ALTER CHANNEL(TO.BRK1_QM) CHLTYPE(CLUSRCVR) CLWLWGHT(1)
|
2. 利用amqsput发送3条消息到APP_QM的IN对列中。
amqsput IN APP_QM
Sample AMQSPUT0 start
target queue is IN
1
2
3
|
3. 分别在BRK1_QM和BRK2_QM上执行如下命令,查看设置是否成功。
runmqsc BRK1_QM
DISPLAY QLOCAL(IN) CURDEPTH
AMQ8409: Display Queue details.
QUEUE(Q1) TYPE(QLOCAL)
CURDEPTH(2)
|
runmqsc BRK2_QM
DISPLAY QLOCAL(IN) CURDEPTH
AMQ8409: Display Queue details.
QUEUE(Q1) TYPE(QLOCAL)
CURDEPTH(1)
|
好的,现在消息已经按照2:1的方式分发,启动压力测试程序,向APP_QM的IN队列中发送消息,并在APP_QM的本地队列OUT上接收消息,测试结果如下表所示:
8.4 MB集群性能
比较测试结果,AIX01和AIX02的单机处理能力分别是1250和624条/秒,而实现的WMB集群的处理能力是1724条/秒。WMB集群的处理能力近似达到两台机器单机处理能力的加和。


|
回页首 |
|
9 结论和建议
经测试证明,WMB可以基于MQ Cluster实现Broker集群,实现系统的横向扩展。通过该测试,得到如下结论:
- 通过配置WMB集群,基本上可以实现系统性能的近似线性增长。
- 通过WMQ的负载均衡机制,在机器性能不一的情况下,WMB集群也可以最大化利用每台机器的资源,增加系统吞吐率。
通过测试,本文给出如下建议:
虽然WMB集群在集群中机器性能不一的情况也能较好利用各台机器的性能,但负载配比达到完全的最优化比较困难。在做WMB集群时,建议参与集群的机器硬件配置最好保持一致,以最大化利用机器硬件性能。 |