WebSphere MQ 集群

在使用分布式排队的传统 WebSphere MQ 网络中,每个队列管理器是独立的。如果队列管理器需要将消息发送到另一个队列管理器,则它必须定义一个传输队列、一个到远程队列管理器的通道,以及它要将消息发送到的每个队列的远程队列定义。

群集是一组以队列管理器可以在不需要传输队列、通道和远程队列定义的情况下在单个网络上彼此直接通信的方法设置的队列管理器。

队列管理器群集

 1 群集的概念 

  

注意:

1.         在群集中创建同一队列的多个实例时,需要确保您的消息互相之间没有依赖,例如,消息需要按照特定顺序处理或被同一队列管理器处理。

2.         使同一队MQINQ调用将产生不同的结果。

在大多数情况下负载管理算法将满足系统的需求,然而您也可以编写用户出口(user-exit)程序来定制负载管理算法,WebSphere MQ中包含用户出口和群集负载出口(cluster workload exit),可以使用ALTER QMGR命令来激活群集负载出口。例如,ALTER QMGR CLWLEXIT(myexit) 欲了解更详细的有关信息,请参考《Queue Manager Clusters》。

列的不同实例的定义相同,否则执行



群集管理

您有时需要对群集中的队列管理器进行维护,例如,您可能需要备份队列中的数据,或把补丁应用到系统中。如果队列管

 

l         为暂停队列管理器,可以使用命令SUSPEND QMGR,例如:

 

SUSPEND QMGR CLUSTER(SALES)

 

它将临时从群集中移走一个队列管理器,这样将不会有任何消息发送到这个队列管理器。暂停的队列管理器和对象的信息都被保留在资源库中,但是队列管理器被标记为暂停。

 

l         当维护队列管理器的工作完成后,需要让队列管理器继续工作。通过执行RESUME QMGR则可以实现,例如:

RESUME QMGR CLUSTER(SALES)

RESUME QMGR命令将通知完全资源库,这个队列管理器将又重新可用。完全资源队列管理器散布这个信息到其它队列管理器。

l         在群集中的队列管理器可以执行刷新启动命令。在正常环境下不需要执行刷新命令,

例如:

        REFRESH CLUSTER(SALES)

    执行刷新命令,将丢弃所有本地的关于群集的信息。

l         如果要从群集中强制除去一个队列管理器,则可以通过RESET CLUSTER命令实现。或一个队列管理器已经被删除,但是定义到群集的群集-接收通道仍然存在,那么您也可以使用RESET CLUSTER命令来快速地清理这些定义信息。

 

使用RESET CLUSTER命令是删除自定义群集-发送通道的唯一方法。在正常的环境中,您不必运行这个命令。这个命令只能在资源管理器中执行,例如:

RESET CLUSTER(SALES) QMNAME(QM0000) ACTION(FORCEREMOVE) QUEUES(NO)

l         查看群集中队列管理器信息,可以使用命令DISPLAY CLUSQMGR,例如:

DISPLAY

l         您可以定义群集队列,例如:

DEFINE QLOCAL(0000_1) CLUSTER(SALES)

 

欲了解更详细的有关群集管理的信息,请参考《Queue Manager Clusters》。

CLUSQMGR(*) CLUSTER(SALES)

 

  如果您熟悉WebSphere MQ和分布式队列,则可以把群集认为是一个队列管理器的网络,或是一个队列管理器的集合,群集中的队列管理器可以是不同的操作系统平台。每当您在群集中创建一个接收通道或定义一个队列时,则系统将自动在其它队列管理器中创建相应的发送通道和远程队列定义。

   在群集中您不需要创建传输队列定义,因为WebSphere MQ在每个队列管理器中已经定义了一个传输队列。这个传输队列可以把消息发送到任何队列管理器中。

群集的信息是存放在资源库中。大多数队列管理器只保留它们自己所需要的信息,这些信息包括与它们通信的队列管理器和队列的信息。一些队列管理器包含了群集中所有队列管理器的所有信息。

 

下图显示了一个叫CLUSTER的群集:



l         在这个群集中有三个队列管理器,QM1,QM2QM3

l         QM1QM2存放了群集中队列管理器的信息。它们被叫作完全资源队列管理器。

l         QM2QM3中有几个队列,这些队列能被群集中任何其它队列管理器。这些队列被叫作群集队列。

l         每一个队列管理器有一个接收通道的定义,它被叫作群集接收通道。用来接收消息。

l         每一个队列管理器也有一个发送通道的定义,它将和完全资源管理器的群集接收通道相连。这个通道叫做群集发送通道。在下图中,QM1QM3有群集发送通道连接到TO.QM2QM2有群集发送通道连接到TO.QM1

一旦群集接收通道和群集发送通道已经定义好了,通道将自动启动。

       其中群集传输队列和命令队列不用显示定义,队列管理器QM0000NPC群集中一个完全资源库队列管理器。一个队列管理器可以同



l         在定义群集-发送通道时,不用说明资源库队列管理器名。

DEFINE CHANNEL(TO.+QMNAME+) +

CHLTYPE(CLUSSDR) +

TRPTYPE(TCP) +

CONNAME(...) +

CLUSTER(NPC)



现负载均衡

当在群集中含有同一队列的多个实例时,WebSphere MQ通过使用负载管理算法把消息发送到最方便的队列管理器中。负载管理算法尽可能地选择本地队列管理器作为目的地。如果在本地队列管理器中没有队列,这个算法将选择最合适的目标。合适的原则是取决于通道状态、队列管理器和队列的可用性。在满足条件的队列管理器之间,这个算法使用了轮循的方法进行选择。从而可以实现负载均衡的功能。

 

使用群集可以减少系统管理,也可以在群集中的几个队列管理器中创建同名的队列。只有拥有队列的队列管理器才能处理队列中的消息,但应用程序发送消息时不用显示说明队列管理器名。负载管理算法决定了那个队列管理器应该处理消息。

 

下图中显示了一个群集中定义了多个Q3队列的定义。当在QM1的应用程序放一个消息到Q3时,它不必知道是那个Q3队列将处理消息。

当消息正在传输时,群集中的一个本地队列变得不可用,那么消息将被转发到另一个队列中(但需要以BIND_NOT_FIXED的选项打开队列)。如果其它队列也不可用,这个消息将被放到死信队列中。

如果目标队列管理器不能工作,那么消息将仍然被放在传输队列中,系统将尝试更换消息的路由。这样做并不会影响消息的完整性,但如果出现队列管理器失败并消息处在可疑(in doubt)状态,这个消息将不能更换路由。

        

图,在群集中一个队列有多个实例

群集的优点

使用群集有两个优点:

1.       减少系统管理

即使您创建了一个很小的群集,都将减少系统管理的工作。在群集中建立队列管理网络比在分布式队列建立网络将使用更少的定义。由于使用更少的定义,您将能够更快和更容易地建立和改变网络。并且降低了定义错误的风险。

2.       增强可用性和实现负载均衡

简单的群集将更容易管理。对于复杂的群集,将提高了扩展性和可用性。因为您可以定义在不同的队列管理器定义相同的队列,因此工作负载可以在群集的队列管理器实现均衡。

 

群集的组件

l         群集资源库(队列)

资源库中存放了群集中队列管理器的信息,包括队列管理器名,以及它们的通道和队列等。这些资源库信息通过一个叫SYSTEM.CLUSTER.COMMAND.QUEUE的队列进行交换,并存放到一个叫SYSTEM.CLUSTER.REPOSITORY.QUEUE的固定队列中。

资源库可能是完全或部分的。每个队列管理器至少要连接到一个拥有完全资源库的队列管理器。

每一个群集队列管理器必须有一个叫SYSTEM.CLUSTER.REPOSITORY.QUEUE的本地队列,在群集中至少一个群集队列管理器含有完全资源库。对于每个群集队列管理器,必须要预定义一个群集-发送通道连接到资源库队列管理器中。资源库队列管理器之间必须要互连,网络状况要比较好,和具有高可用性。普通队列管理器只包含有部分资源库信息。

 

l         群集-发送通道

群集-发送通道的类型为TYPE(CLUSSDR),群集队列管理器使用群集-发送通道可以把消息发送到完全资源库队列管理器中。这个通道被用来通知队列管理器状态的改变,例如,队列的删除和创建。它仅和第一个完全资源库队列管理器联系。

l         群集-接收通道

群集-接收通道的类型为TYPE(CLUSRCVR),群集队列管理器可以使用它接收群集内的消息。每一个群集队列管理器至少需要一个群集-接收通道。

l         群集传输队列

从一个队列管理器发送到其它队列管理器的消息都将被放到SYSTEM.CLUSTER.TRANSMIT.QUEUE队列中,在每个队列管理器中必须要存在群集传输队列。



创建群集

下表是一个创建群集的脚本示例,群集名为NPC



ALTER QMGR REPOS(NPC)

 

DEFINE CHANNEL(TO.QM0000) +

CHLTYPE(CLUSRCVR) CONNAME(‘192.168.10.11(1414)’ ) +

CLUSTER(NPC)

 

DEFINE CHANNEL(TO.QM1000) +

CHLTYPE(CLUSSDR) CONNAME(‘192.168.10.22(1414)’) +

CLUSTER(NPC) +

DESCR(‘To Other Repository’)

 

DEFINE QLOCAL(0000_1) +

CLUSTER(NPC)

 

MQSeries v5.2以后版本,在群集中能够支持DHCP

转载于:https://my.oschina.net/aiyao/blog/10971

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值