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
>
>
>

Reply via email to