Forum Discussion
Gary_T_31565
Nimbostratus
Sep 23, 2007Inefficient MSMQ load balancing
New to bigip and msmq.
How can I get 1:1 messages LB across queues.
We have a webservice (RR LB on n x IIS svrs) which suppliers post to. This works well. The web service then places a message via tcp connection in a queue. The 3.0 queue is replicated on n x w3k svrs and we LB it. The profile is tcp, pool is round robin and we only montior port 1801 is up.
Problem: While slow traffic we see messages distribute well. But SupplierA is posting all business at 4pm. The bigip LB posts to web services equally. But all messages go to one queue svr!
Thoughts: According to MS the MSMQ service will keep open a "session" (I guess they mean tcp session) for 5 minutes with "client". Is the BIGIP (the client?)letting this session stay open and using it for any WS client connection.
How can I force the queue virtual server to pass each message and/or WS client connection to the next member in queue pool?
9 Replies
- Gary_T_31565
Nimbostratus
- James_Thomson
Employee
If the client opens up 1 tcp connection and sends 100 "messages" down this one connection, the BIG-IP LTM only knows about the 1 connection, not the messages inside the connection because the BIG-IP LTM is not an MQ proxy. While load balancing MQ, it can only know about the tcp side of the house. You can use iRules to inspect this traffic, but as for load balancing seperate messages inside one tcp connections, I'm not sure how that could be done. - Deb_Allen_18Historic F5 AccountHere's an iRule to log connection details for both client & server:
when CLIENT_ACCEPTED { set client [IP::client_addr]:[TCP::client_port] log local0.info "Client connection accepted for client $client" } when SERVER_CONNECTED { set server [IP::server_addr]:[TCP::server_port] log local0.info "Server connection to server $server established for client $client" }
- Deb_Allen_18Historic F5 AccountMeant also to say that LB'ing multiple requests in a TCP stream to multiple servers is possible, but it works well in only a very few cases, since LTM can't pipeline requests within such an iRule -- LTM must wait for the response to request 1 before sending request 2 to a different server, or response 1 will be lost.
- Gary_T_31565
Nimbostratus
Thanks - Deb_Allen_18Historic F5 AccountThanks for posting back, I'm sure the extra info will come in handy for someone out there.
- Carl_Brothers
Employee
Interesting! So in a competitor's SLB solution, we had to compensate for what they called their tcp Flow Timeout which was significantly lower than the 5 minutes that you discovered here. - Oktay_51229
Nimbostratus
Hi Deb, - What_Lies_Bene1
Cirrostratus
Just FYI, the idle timeout is fully configurable, client and server side.
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects