ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » General IBM MQ Support » CCDT Best Practice

Post new topic  Reply to topic
 CCDT Best Practice « View previous topic :: View next topic » 
Author Message
vivica12
PostPosted: Wed Nov 12, 2008 2:01 pm    Post subject: CCDT Best Practice Reply with quote

Acolyte

Joined: 13 Jul 2007
Posts: 58

I am beginning the implementation of a CCDT strategy at my work. I thought I would get some feedback on the plan, so that I don't have to change everything later

IN my environment we have a shared MQ backbone, with many apps connecting. We also hope to implement SSL in the future. Based on this, we have one app per channel connecting to MQ. So for CCDT files, there are many channels to manage.

Here is my current plan.
1. On Server 1, mv the current AMQCLCHL.TAB file to a backup file
2. Create my SVRCONN and corresponding client conn
3. Create my second client conn on same server 1
4. On Server 2 create the corresponding SVRCONN for the 2nd connection
5. On Server 1 mv the new TAB file to a file named for the channel that it references
6. manage the files on a netapp share with the WAS environment to be used by connection factories

Anyone see any major flaws in that plan? I have read that the AMQCLCHL.TAB file is required to be present, but does it matter what's in it? I will say that we haven't always had one present, and we can still create channels. Does this pose a problem?

Thanks for any guidance, I"d rather learn now how best to manage this...then after I do it
_________________
Vivica - signing off
Back to top
View user's profile Send private message
bruce2359
PostPosted: Wed Nov 12, 2008 2:56 pm    Post subject: Reply with quote

Poobah

Joined: 05 Jan 2008
Posts: 9470
Location: US: west coast, almost. Otherwise, enroute.

One option is to have a single CCDT that has all client connection channel definitions for any/all clients to any/all qmgrs throughout your organization. This single CCDT can reduce admin confusion about which CCDTs go with which clients to which qmgrs.

I'm fond of creating an otherwise non-functional (no applications, no functional channels) qmgr whose sole purpose in life is to be the creator of the CCDT. From this qmgr, you export or share the CCDT.

I can see value in re-naming CCDTs with date/time/release kind of information for percolation to newer CCDTs if you have many of them; but if you can have a single CCDT shared on a SAN, then one will do for all. If you have many CCDTs, or you rename them, you will then need to have some method of validating that the new CCDT has replaced the previous one.
_________________
I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live.
Back to top
View user's profile Send private message
PeterPotkay
PostPosted: Wed Nov 12, 2008 5:18 pm    Post subject: Reply with quote

Poobah

Joined: 15 May 2001
Posts: 7722

With one monster channel table you can't have App A connect to QM1 over SVRCONN.CHANNEL.A while App B connects to QM1 over SVRCONN.CHANNEL.B.

You need a channel table per app.
_________________
Peter Potkay
Keep Calm and MQ On
Back to top
View user's profile Send private message
gbaddeley
PostPosted: Wed Nov 12, 2008 6:20 pm    Post subject: Reply with quote

Jedi Knight

Joined: 25 Mar 2003
Posts: 2538
Location: Melbourne, Australia

PeterPotkay wrote:
...You need a channel table per app.


Agree, and I have used this technique in practice.

If the CCDT contains unique channel names and qmgr names for all the application's environments (dev, test, uat, preprod, prod etc) the file can be packaged with the application. The only requirement is that the app connect to the correct qmgr name for the environment it is running in.

There should also be network demarkation of all environments, such as firewalls, separate DNS etc. so that accidental cross-environment connection cannot occur. But in a properly designed app the actual queue names are also different for each environment (well at least for production), so that even accidental cross-environment connection will not corrupt production data.
_________________
Glenn
Back to top
View user's profile Send private message
vivica12
PostPosted: Thu Nov 13, 2008 11:01 am    Post subject: Reply with quote

Acolyte

Joined: 13 Jul 2007
Posts: 58

Thanks for all the good comments. I am going to consider the qmgr dedicated to managing the clntconn's, that may be helpful.

In our environment we want to keep the files seperate from the code. Whenever we have changes that involve code, it takes so long. If we configure these at an infrastructure level (ie connection factories pointing to local file systems), then if there are changes, it's not a code change. This is very helpful I think, especially if we grow and go from 2 qmgrs to 3+ etc.

I read that MO72 support PAC can be helpful in managing CCDT files, but in reading about het support PAC i didn't really see why. Anyone have any experience with it? Is it helpful in this case?

Also, any thoughts on whether there has to always be a AMQCLCHL.TAB file present for the qmgr? Docs say it has to be there, but in practice I haven't seen why...

thanks for your feedback, it's nice to know I"m atleast headin the right direction.
_________________
Vivica - signing off
Back to top
View user's profile Send private message
JosephGramig
PostPosted: Thu Nov 13, 2008 12:12 pm    Post subject: Reply with quote

Grand Master

Joined: 09 Feb 2006
Posts: 1244
Location: Gold Coast of Florida, USA

With MO72, you can manage the CCDT without a QMGR. You just need to point the environment variable MQCHLLIB to the directory that contains the CCDT. You can also point MQCHLTAB to the file name if you changed it from the default.

Note that at V6, you cannot copy an AMQCLCHL.TAB into a QMGR's directory can start modifying it.

It is the one that came with the QMGR and whoa is be to you that messes with it outside runmqsc or the MQ Explorer. I think runmqsc should allow you to manipulate the CCDT without a QMGR but there are some SSL things that require one... Of course, that is only important if you use SSL. There was a bug about SSL on the CLNTCONN with MO72 but I think it has been fix (it was for the private version I got when I noted the problem to the author).

Another interesting trick with CCDT is the concept of QMGR Grouping. It is where say two QMGRs have SVRCONNs like QMGR.A.SVRCONN and QMGR.B.SVRCONN. Then you make matching CLNTCONNs but for both you specify the QMGR as GROUP.QMGR. If the client application trys a QMGR name of '*GROUP.QMGR', then it will connect to one of the QMGRs. If the one it normally connects to (and in V6 that will be the lexically first channel name) is not available, it will try to connect to the next one.

It is sort higher availability, if I dare to say such a phrase with this.

Dale Lane describes this better then me here: http://hursleyonwmq.wordpress.com/2007/02/26/client-connection-wildcards/

If you read, "What's new in MQ V7", you will see a slight change in the behavior.
Back to top
View user's profile Send private message AIM Address
vivica12
PostPosted: Fri Nov 14, 2008 8:43 am    Post subject: Reply with quote

Acolyte

Joined: 13 Jul 2007
Posts: 58

I read through the items about using a qmgr group name, vs a * etc. I know this value would be set in the CLNTCONN creation as the QMNAME( ) option. Correct?

In our configuration, atleast the pilot, we have chosen to leave that field blank. Again, our major goal is to have failover -- improve uptime etc.

So we have Server A and B.
Server A has -SVRCONN CHL1A, CLNTCONN CHL1A, CLNTCONN CHL1B
Server B has - SVRCONN CHL1B.
Both CLNTCONN's have an empty QMNAME( ) field. File CHL1.TAB has been created and moved to the WAS machine.

In WAS we have set the JMS properties as follows:
JMS Connection Factory:
Queue Manager: [blank]
Channel: [blank]
Custom Property:
CCDTURL: file:///www/iaf/mq_ccdt/CHL1.TAB
QMANAGER: *

JMS Queue:
Queue Manager: [blank]
Channel: [blank]



In this case we are using the * option to reference any qmgr, and with the QMNAME() field blank, it works. We know it choses the connection based on alphabetical order of the channel name. So primary would always be CHL1A, connecting to SERVER A.

Does anyone see any negatives with this? It works in the testing we've done, and it allows us to easily add SERVER C, with CHL1C to the file if needed. Is it better practice to fill in that QMNAME() filed with a GROUP option?
_________________
Vivica - signing off
Back to top
View user's profile Send private message
vivica12
PostPosted: Fri Nov 14, 2008 8:47 am    Post subject: Reply with quote

Acolyte

Joined: 13 Jul 2007
Posts: 58

Another question:

I thought I read that when using a CCDT file via WAS, if SERVER A fails and the app connects to SERVER B....it will attempt the reconnect to SERVER A at some interval. Is this true? Will there have to be some manual intervention to ensure traffic fails 'back' to your primary?

In testing, I found then when SERVER A fails, it goes to SERVER B..if I don't use SERVER B for awhile and the SERVER A issue is resolved..it will reconnect to SERVER A. But I'm wondering if there is a heavily used app with many connections if it will every re-try SERVER A (so far i don't seem to have hit that threshhold to retry A)

thanks
_________________
Vivica - signing off
Back to top
View user's profile Send private message
JosephGramig
PostPosted: Fri Nov 14, 2008 12:07 pm    Post subject: Reply with quote

Grand Master

Joined: 09 Feb 2006
Posts: 1244
Location: Gold Coast of Florida, USA

Well, I'm not familar with how WAS works with this.

I think the * on the QMANAGER will connect to the first one that answers regardless of what is in the CLNTCONN QMNAME().

There is a difference in the behavior between V6 and V7.

On V6, it will only retry from the first one listed if the connection is new. The main issue with this is if the application makes a request on one QMGR, looses its connection and reconnects to another QMGR, it will never get its response. I think that would be a very rare case.
Back to top
View user's profile Send private message AIM Address
fjb_saper
PostPosted: Fri Nov 14, 2008 6:06 pm    Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

Quote:
Does anyone see any negatives with this? It works in the testing we've done, and it allows us to easily add SERVER C, with CHL1C to the file if needed. Is it better practice to fill in that QMNAME() filed with a GROUP option?

It really depends on the scope and usage of your CCDT. If you want to use the same table for different apps and you want each app to use its own channel(s) I would advise you to set a dummy qmgr name into the client connection qmgr like ... the appname?

Then using *appname for the qmgr name in JNDI would only cycle you through the available connections for the app.

Have fun
_________________
MQ & Broker admin
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » General IBM MQ Support » CCDT Best Practice
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.