views:

397

answers:

1

Hi,

From what I understand, in order to achieve MSMQ load-balancing, one must use a technology such as NLB.

And in order to achieve MSMQ high-availability, one must cluster the related Biztalk Host (and hence the underlying servers have to be in a cluster themselves).

Yet, according to Microsoft Documentation, NLB and FailOver Clustering technologies are not compatible. See this link for reference: http://support.microsoft.com/kb/235305

Can anyone PLEASE explain to me how MSMQ load-balancing and high-availability can be achieved?

thank you in advance,

M

+1  A: 

I've edited my original answer because on reflection, I think I was talking nonsense.

I don't believe that it is possible to achieve both load balancing and high availability in a BizTalk transactional scenario. Have a look at the section "Migration considerations for moving from MSMQ/T to MSMQ adapter in BizTalk 2006" on the following site http://blogs.msdn.com/eldarm/

To summarise that post, there are a couple of scenarios:

High Availability (Non-transactional)

You simply have MSMQ on more than one BizTalk server behind NLB

High Availability (Transactional)

For this you need to have a clustered MSMQ host, which means that you can't do any sort of load balancing upon a single queue.

One possible halfway solution is to create two MSMQ adapters, on different clustered hosts, each handling different queues. Doesn't sound too nice to me though.

A key point is understanding the reasons why you would want transactional, clustered behaviour - you need this for ordered delivery and to ensure no duplicates.


In general I wouldn't go to the trouble of load balancing MSMQ - BizTalk itself is load balanced once messages have reached the MessageBox database. While it is true that you will see asymmetric load due to the queue processing happening on one machine, in the overall context of your BizTalk environment this should not be significant.

Again, it is worth remembering that you are clustering MSMQ for reasons beyond simple high availability:

MSMQ adapter receive handler - MSMQ does not support remote transactional reads; only local transactional reads are supported. The MSMQ adapter receive handler must run in a host instance that is local to the clustered MSMQ service in order to complete local transactional reads with the MSMQ adapter.

That was from the following MSDN page.

I hope this edited answer helps - I don't think it was what you were after, maybe I'm wrong and you'll find a workable solution for NLB and transactional MSMQ, but the more I think about it the more it seems that the two scenarios are not compatible.

A final thought is that you could try posting a similar question on Server Fault - you get a few BizTalk devs on Stack Overflow, including at least two MVPs, but at least where I work this is that sort of question I'd be passing on to my networking team.

David Hall
Thanks for the response David. You said using three servers would do the trick. I understand that the two servers in a cluster have high-availability, but how does the third server have high-availability? As I understand it, the MSMQ adapter uses the local MSMQ queues as intermediate storage and so if that server was to fail, the messages would be stuck in the local queues, which means that we have not achieved high-availability. Can you please shed some more light on this issue?
FullOfQuestions
Thanks again David.
FullOfQuestions