Re: Persistence based on a server id url param

From: Jeffrey 'jf' Lim <jfs.world#gmail.com>
Date: Tue, 2 Jun 2009 15:45:54 +0800


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
>
>
>
Received on 2009/06/02 09:45

This archive was generated by hypermail 2.2.0 : 2009/06/02 10:00 CEST