On Tue, Jun 2, 2009 at 3:32 PM, Willy Tarreau w...@1wt.eu wrote:
Hi Ryan,
On Mon, Jun 01, 2009 at 12:22:57PM -0700, Ryan Schlesinger wrote:
I've got haproxy set up (with 2 frontends) to load balance a php app
which works great. However, we're using a java uploader applet that
doesn't appear to handle cookies. It would be simple for me to have the
uploader use a URL with the server id in it (just like we're already
doing with the session id) but I don't see any way to get haproxy to
treat that parameter as the actual server id. Using hashing is not an
option as changing the number of running application servers is a normal
occurrence for us. I also can't use the appsession directive as the
haproxy session id cache isn't shared between the two frontends (both
running an instance of haproxy). Can this be done with ACLs and I'm
missing it?
I actually made a patch for a client the last time that does this exact
thing. I'll see if this client is ok with sharing the code - or opensourcing
it. Willy's approach is also an interesting way of doing it - you control
the decision of what to do if the backend is down using the acl
'srv(1|2)_up'
-jf
You could very well use ACLs to match your URL parameter in the
frontend and switch to either backend 1 or backend 2 depending
on the value.
Alternatively, you could hash the URL parameter (balance url_param)
but it would not necessarily be easy for your application to generate
an URL param which will hash back to the same server. So I think that
the ACL method is the most appropriate for your case.
Basically you'd do that :
frontend
acl srv1 url_sub SERVERID=1
acl srv2 url_sub SERVERID=2
acl srv1_up nbsrv(bck1) gt 0
acl srv2_up nbsrv(bck2) gt 0
use_backend bck1 if srv1_up srv1
use_backend bck2 if srv2_up srv2
default_backend bck_lb
backend bck_lb
# Perform load-balancing. Servers state is tracked
# from other backends.
balance roundrobin
server srv1 1.1.1.1 track bck1/srv1
server srv2 1.1.1.2 track bck2/srv2
...
backend bck1
balance roundrobin
server srv1 1.1.1.1 check
backend bck2
balance roundrobin
server srv2 1.1.1.2 check
That's just a guideline, but I think you should manage to get
it working based on that.
Regards,
Willy