Author |
Message
|
PeterPotkay |
Posted: Thu Feb 14, 2008 9:48 am Post subject: Overlapping clusters and cluster channels used |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
QM1, QM2, QM3 and QM4 are all in the same 2 overlapping clusters. Lets call them CLUSTER1 and CLUSTER2. Each QM has 2 CLUSRCVR channels, one clustered to each cluster. Same thing with their CLUSSNDRs to the Full Repositories: 2 each and each one is clustered to the specific cluster its for. The Full Repositories use namelists to identify both of these cluster names so the FRs can be FRs for both clusters.
On QM1 and QM2 there is a local clustered q called THIS.QUEUE.1.2. Its clustered to CLUSTER1 only.
On QM3 and QM4 there is a local clustered q called THAT.QUEUE.3.4. Its clustered to CLUSTER1 only.
When an app connected to QM3 or QM4 does a MQPUT to THIS.QUEUE.1.2 there is no problem. Load balancing works. Same thing in reverse. When an app connected to QM1 or QM2 does a MQPUT to THAT.QUEUE.3.4 load balancing works as well. In both cases the apps don't specify a QM name in the MQOPEN or MQPUT1. And I see the channels clustered to CLUSTER1 moving all this traffic.
Here's the problem:
In the above scenario, when the app DOES specify the QM name in the MQOPEN or MQPUT1, the message does make it to the specific instance of the queue, but it looks like some of the messages go over a channel in CLUSTER1, and some messages use the CLUSTER2 channel. That's not good. If the destination q is in CLUSTER1 I need the message to use the CLUSTER1 channels only.
It seems that when a destination QM name is used the cluster workload algorithm on the sending QM sees the destination QM is a member of both clusters and ignores the fact that the destination q is in only one of the clusters, a so produces messages onto the S.C.T.Q. that are eligible for either cluster's channels.
I need the messages from Apps A thru C to go over the channels in CLUSTER1 because those channels have been tuned for lots of very small non persistent messages. Apps D thru F need to have their messages go over the channels in CLUSTER2 because those channels have been tuned for fewer but large and persistent messages.
When round robining is allowed to take place it works as hoped. But when a Reply To Qmgr value is used on the MQOPEN to put a reply back to a particular QM I run into my problem of some little non persistent messages finding themselves in the slow lane and some big messages slowing down my fast lanes (Edith going 45 in the left hand lane with the blinker on for the last 5 miles).
Any ideas how to get around this? I came up with a real convoluted way that might work using QM Aliases and ReplyTo Aliases but hope to avoid that. But it presumes the requesting app has to now set a specific value for the Reply To Queue Manager, instead of leaving it blank and letting the QM automagically fill it in. I depend on that behavior because the app (Websphere Message Flows in this case) can run on multiple QMs. I will have to either make the flows add code that query what QM they are connected to (I assume that's possible), and then append the proper suffix depending on which QM in which environment they are in (big CASE statement). Or use Reply To Aliases in conjunction with the QM Aliases.
That's why I said convoluted. Its tuff enough explaining the routing in overlapping clusters to customers. Adding ReplyTo Aliases and QM Aliases on top of that, oh boy. I was hoping for another way.
While I agree its working as designed when it comes to routing when a QM name is present, do you think that's the way it *should* be? Would it be bad for a QM that was routing messages in overlapping clusters to check the q name as well as the QM name if it checks the q name anyway when only the q name is provided? If everyone says it's a bogus idea I'll make due with Aliases. But if you all think it makes sense I'll open an enhancement request. Is it a "bug", or at least a deficiency that both clusters' channels are being used in this scenario? _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Feb 14, 2008 10:01 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
Cluster workload and routing is only done based on channels, really.
You should be able to work around this by having the ReplyToQmgr set to some kind of alias instead of the actual RQMNAME.
I haven't spent five minutes to figure out what kind of alias. _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
PeterPotkay |
Posted: Thu Feb 14, 2008 10:33 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
I'm confident I can work around it with application code changes and QM Aliases and ReplyTo Aliases. The question is should I have to? A lot of rigmarole I think.
If the cluster can route a message down the correct channels when a destination QM is not specified why should that behaviour break when a QM name is used? I know why it breaks now (because that's the way MQ is implemented). But it shouldn't, right? _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Feb 14, 2008 11:12 am Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
The flip side to this question is "Should you try to use clusters to model SLAs"? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
PeterPotkay |
Posted: Thu Feb 14, 2008 12:26 pm Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
You might want to force messages down specific cluster channels for non performance reasons, like security. _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu Feb 14, 2008 1:46 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Quote: |
Here's the problem:
In the above scenario, when the app DOES specify the QM name in the MQOPEN or MQPUT1, the message does make it to the specific instance of the queue, but it looks like some of the messages go over a channel in CLUSTER1, and some messages use the CLUSTER2 channel. That's not good. If the destination q is in CLUSTER1 I need the message to use the CLUSTER1 channels only. |
But this is not logical. The destination qmgr is both in cluster1 and in cluster2. There is a default routing for both clusters and as such the qmgr is not required to use a specific cluster, it is only on the block to send the message there. (See logic for a reply to queue on a clustered qmgr ... the queue need not be in the cluster)
Now if you use the load balancing algo you correctly saw the right channels being used as the cluster queue (without the qmgr info) is only a member of cluster1.
You relinquish this relationship when you specify the qmgr as the queue no longer needs to be part of a cluster for the routing to work.
If you need to use a specific route I would suggest a clustered alias (different alias name for each instance in the cluster ex:qname.qmgr). While feasible in a small cluster, this is certainly a nightmare to build and use in a large cluster.... and think about the redundancy !!!
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
jefflowrey |
Posted: Thu Feb 14, 2008 1:57 pm Post subject: |
|
|
Grand Poobah
Joined: 16 Oct 2002 Posts: 19981
|
PeterPotkay wrote: |
You might want to force messages down specific cluster channels for non performance reasons, like security. |
I can see people thinking this, yes.
I haven't thought about it myself.
I wonder if this situation will honor MAXMSGLN? _________________ I am *not* the model of the modern major general. |
|
Back to top |
|
 |
PeterPotkay |
Posted: Fri Feb 15, 2008 11:02 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
fjb_saper wrote: |
But this is not logical. The destination qmgr is both in cluster1 and in cluster2. There is a default routing for both clusters and as such the qmgr is not required to use a specific cluster, it is only on the block to send the message there. |
I disagree.
If I only provide a q name the sending QM takes care to send it over the cluster channels that apply to the destination queue based on the cluster it is in. If I add, not substitute, additional routing info why should that cause randomness in how the message gets there? I'm not saying this isn't how its designed and working. Apparently so. But don't you think if you were designing from the ground up knowing this you wouldn't do it this way? If you already have the info needed to go down a specific set of cluster channels (the q name) and you add another piece of info (a particular QM) why would you design it to go back to using any old channel?
As I was mapping out the QM Alias definitions needed I realized I need QM Aliases for both CLUSTER1 and CLIUSTER2.
If I only create CLUSTER1 QM Aliases:
Code: |
On QM1
DEF QREMOTE(QM1.CLUSTER1) RNAME( ) RQMNAME( ) XMITQ( ) CLUSTER(CLUSTER1)
On QM2
DEF QREMOTE(QM2.CLUSTER1) RNAME( ) RQMNAME( ) XMITQ( ) CLUSTER(CLUSTER1)
On QM3
DEF QREMOTE(QM3.CLUSTER1) RNAME( ) RQMNAME( ) XMITQ( ) CLUSTER(CLUSTER1)
On QM4
DEF QREMOTE(QM4.CLUSTER1) RNAME( ) RQMNAME( ) XMITQ( ) CLUSTER(CLUSTER1) |
the definitions above would allow the apps that use queues in CLUSTER1 to have their replies come back over CLUSTER1's channels. It would prevent their reply messages from going over any CLUSTER2 channels. They would need to specify CLUSTER1.QM* in their MQMD Reply To QM field which is a coding change, but its only a couple of apps and they are the ones that need CLUSTER1's unique channel attributes so no big deal.
But it doesn't prevent the reply messages from all the other apps whose queues are in CLUSTER2 from contaminating CLUSTER1's channels unless all those app also use special Reply To QM values (CLUSTER2.QM*) to insure their messages use only CLUSTER2 channels. There are over a hundred of those apps. I can't make them all change.
Damn....there doesn't seem to be anyway to fix this short of writing custom exits are having every app change their code. I'm going to start writing up the Requirements Doc to see if we can get Name Resolution in a multi cluster to not ignore the Destination Queue name (and the cluster its in) as soon as a Destination QM name is added. If I add, not substitute, additional routing info why should that cause randomness in how a message gets delivered? _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Feb 15, 2008 11:11 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
PeterPotkay wrote: |
If you already have the info needed to go down a specific set of cluster channels (the q name) and you add another piece of info (a particular QM) why would you design it to go back to using any old channel? |
The obvious reason behind this is because the cluster1 channel might be stopped or retrying but the message can still be delivered using cluster2...
In the requirements you are drafting you might request for some kind of algorithm:
1st use the same channel as if there was no QM on the destination
2nd use any means available to deliver the message...
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
PeterPotkay |
Posted: Fri Feb 15, 2008 11:22 am Post subject: |
|
|
 Poobah
Joined: 15 May 2001 Posts: 7722
|
fjb_saper wrote: |
PeterPotkay wrote: |
If you already have the info needed to go down a specific set of cluster channels (the q name) and you add another piece of info (a particular QM) why would you design it to go back to using any old channel? |
The obvious reason behind this is because the cluster1 channel might be stopped or retrying but the message can still be delivered using cluster2...
|
You could use that arguement for the case when there isn't a destination QM defined. But in that scenario it would be just as frustrating (and dangerous from a security perspective) to have your messages meant for queues in CLUSTER1 to go down channels in CLUSTER2.
fjb_saper wrote: |
In the requirements you are drafting you might request for some kind of algorithm:
1st use the same channel as if there was no QM on the destination
2nd use any means available to deliver the message...
|
Good idea. Will do. _________________ Peter Potkay
Keep Calm and MQ On |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Feb 15, 2008 2:54 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
PeterPotkay wrote: |
fjb_saper wrote: |
PeterPotkay wrote: |
If you already have the info needed to go down a specific set of cluster channels (the q name) and you add another piece of info (a particular QM) why would you design it to go back to using any old channel? |
The obvious reason behind this is because the cluster1 channel might be stopped or retrying but the message can still be delivered using cluster2...
|
You could use that arguement for the case when there isn't a destination QM defined. But in that scenario it would be just as frustrating (and dangerous from a security perspective) to have your messages meant for queues in CLUSTER1 to go down channels in CLUSTER2. |
This won't work in the case you described as the queue is only in cluster1 and not in cluster2. So if you do not specify the qmgr the only known routing is that of cluster1.
To my knowledge there is no "double name resolution". The name resolution and routing decision is made with a blank qmgr forcing the only known routing: cluster1. This is more clear if you add n qmgrs that are in cluster1 but have no membership in cluster2.
 _________________ MQ & Broker admin |
|
Back to top |
|
 |
|