分享

MQ集群 .

 江江385 2012-11-30

这阵子玩了一下MQ集群,故写篇日志作个纪念

参考文献

  1. MQ集群的基础概念 http://www.ibm.com/developerworks/cn/websphere/library/techarticles/loulijun/MQCluster/MQCluster.html
  2. Websphere MQ v6集群的负载均衡新功能
  3. http://www.ibm.com/developerworks/cn/websphere/library/techarticles/shencong/0510/

    如果不能上外网,动网论坛也有一篇转帖的

    http://www./tech/network/2006031818593.asp

  4. 小娄专栏,IBM中间件专家娄丽军的博客,或者直接去DW上面搜索“MQ 群集”

http://www.ibm.com/developerworks/cn/websphere/zones/businessintegration/xiaolou.html

动手实践

看完上面的教程,对MQ的集群基本上已经初步了解了,接下来在windows环境下实际动手做一做。为了尽可能简单,下面的步骤没有包含MQSC命令,全部是windows下的“MQ资源管理器”界面截图

系统配置:

  • MQ 6.1
  • 一台windows xp的台式机,一台安装了RHEL的64位服务器,分别安装了MQ,两者处在同一个局域网
  • 在windows xp上使用“MQ资源管理器”远程操作RHEL上的MQ

建立队列管理器

在RHEL上建立两个队列管理器,名为 M2MQM2 和 M2MQM3 (命名原因是和项目相关,不得已,主要为了方便和以下的截图配合),这两个QM作为集群的完全存储库

在winxp上建立一个队列管理器,名为 MQTEST0,作为入口的队列管理器

建立集群

首先确保你在windows下“MQ资源管理器”中能够连接到远程的MQ,具体连接方法参考:http://blog.csdn.net/Justin4wd/archive/2008/07/16/2661131.aspx

连接成功后的截图如下(M2MQM2 和 M2MQM3 ):

2008-08-19_155942

同时本地的QM为 MQTEST0

新建一个“队列管理器集群”:LINUX_CLUSTER

选择要添加的完全存储库QM,通常MQ集群中推荐至少有两个完全存储库

2008-08-19_160403

添加完成后如下图:

2008-08-19_160739

接着建立“集群通道”,包括集群发送方通道和接收方通道

由于通道是单方向的,因此需要建立两条通道,一个是 TO.M2MQM2,一个是 TO.M2MQM3

2008-08-19_163329

其中,“集群通道连接名称”即为目的机器的ip和端口,也可以是域名(前提是配好DNS),为了方便这里直接使用ip,格式为 “192.168.0.1(1414)”

配置完成后,在“MQ资源管理器”中可以看到新的集群

2008-08-19_163629

再增加winxp上的QM作为部分存储库

2008-08-19_164547

这里记得选择部分存储库

2008-08-19_164501

所有添加到集群中的QM,都必须建立一个“集群接收通道”,以便担任完整存储库的QM能够与其通讯

2008-08-19_164912

同时,加入到集群的QM必须至少与一个完整存储库相连,向导会自动在选择的完整存储库 M2MQM2 中建立一个“集群发送方通道”,指向MQTEST0

2008-08-19_165002

既然完整存储库 M2MQM2 会连接过来,自然也要从 MQTEST0 连接到 M2MQM2 ,下图选择 M2MQM2 上的一个“集群接收方通道”,向导会自动在 MQTEST0 上建立一个“集群发送方通道”,指向 M2MQM2

2008-08-19_165241

最后点完成,将MQTEST0 添加到集群中

集群成员最后如下图所示

2008-08-19_165619

建立共享队列

接下来在三个队列管理器上都建立一个同名的队列 SOAPIN,作为共享队列,假设在集群的所有QM上都有该共享队列,那么在所有队列管理器上重复以下步骤

新建一个本地队列 SOAPIN,在“集群”选项中,设置“在集群中共享”,并输入集群的名称:LINUX_CLUSTER,“CLWL使用队列”属性设置为“队列管理器”,即这条共享队列使用队列管理器的集群属性。绑定类型为“不固定”,这样才能动态将入队消息分配到集群中的其他共享队列副本上

2008-08-19_170904

右键单击队列管理器->“属性”->“集群”,设置“CLWL使用队列”为“任何”,即有消息到达这个队列管理器的共享队列时,不使用本地优先策略,而是将消息分发到集群中所有共享队列副本。当然,前提是这个QM下的共享队列的“CLWL使用队列”为“队列管理器”(如上一个步骤所示)

2008-08-19_171515

接下来,往任意一个QM的SOAPIN队列放入多个测试消息,可以发现消息被平分到了三个QM中

设置集群通道

上面的负载均衡还只是单纯的平均主义,要想设置每个QM的权重,必须通过集群接收通道来实现,注意是接收而不是发送通道

点击某个集群成员后,可以看到该QM的所有集群队列和通道

2008-08-19_190948 2008-08-19_173229

修改每个QM的“集群接收方通道”,将“CLWL通道权重”设为需要的值,在这里我把 MQTEST0的通道权重设为3,另外两个设为1

2008-08-19_191835

至于通道优先级和等级,可以参考《Websphere MQ v6集群的负载均衡新功能》一文

最后,清空之前放进队列SOAPIN的消息,然后连续放五个消息,可以看到 MQTEST0 的队列里面有三个消息,其余的分别有一个消息,负载均衡成功!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多