Supporting web sockets with ZXTM load balancer (zeus / stingray traffic manager)

load balancingsocketzeus

I have been scouring the internet for information regarding setting up ZXTM to properly load balance web socket connections. ( and also generic information for this task would be handy )

It seems that since it is a layer 7 load balancer, it gets confused when clients send the Upgrade header required to establish a web socket connection. I imagine I may be able to correct this using Traffic Script rules, but am not sure where to start.

The only information I can find is how to accomplish this with nginx using a special tcp proxy module, and also there is some information on how to accomplish this with HA Proxy. Neither of these are an option at this time, unfortunately.

If anyone has any information, generic or specific on how to setup a layer 7 load balancer to correctly handle web sockets, that would be grand.

Best Answer

After a long time searching, I have made progress on this issue. (unfortunately riverbed support was not very helpful, although they did try and be helpful).

The issue is that when ZXTM is set in 'HTTP' mode for a virtual server, it does not respond to the upgrade header at all.

To get web sockets to work, you must change the virtual server's mode to 'Generic Streaming'.

Then the load balancer will treat it more like a normal tcp connection, and everything works nicely.

There is one big limitation of this, and that is if your using traffic script rules, you will no longer be able to use any that start with http. So for example http.setHeader, or anything of this nature will no longer work, as the load balancer doesn't treat the underlying connections as normal http anymore.

Hope this helps someone! Cheers

Related Topic