Hi,

Le Lundi 31 Octobre 2011 17:21:02 Piavlo a écrit :
> I have been using *capture cookie* and *appsession *in one haproxy
> configuration for sticky sessions.
> The problem is that then haproxy restarted/reload or domain is migrated
> to failover server the sticky data is lost.
> Today I realised that I don't need to use sticky sessions at all in
> haproxy - what I do is setup custom session name
> different in each backend http server based on it's name and then using
> acl match on *hdr_beg(Cookie)* to direct to the correct backend
> and if Cookie is not set then send it to round robin backend that has
> all the http servers listed.

Is there any reason to use a different cookie name per server instead of using 
much standard behaviour of haproxy (using cookie insert and others) ?
Your configuration would be a lot more simple and maintainable (see at the 
end).
 
> Below is the relevant frontend & backend config.
> It works great - but there is one problem. It's is very important that
> the *maxconn* that is set in *server *will be set globally per real http
> server
> but since I now have same server http server listed twice.
> For example for lb-srv1 web server there are *lb-srv1/lb-srv1* and
> *testing_rr/lb-srv1* - it means the total maxconn for lb-srv1 is now x2
> larger.
> I could split split the maxconn between lb-srv1/lb-srv1 and
> testing_rr/lb-srv1 - so that in total it's 900 - but this will not use
> the possible 900 slots
> since there is no way to know that ratio of lb-srv1/lb-srv1 vs
> testing_rr/lb-srv1  and it's highly dynamic.
> 
> Is there some trick to share the same *maxconn* for lb-srv1/lb-srv1
> testing_rr/lb-srv1
> Or something similar to*track* - that would make *server* track other
> *server*'s maxconn too? and not only health checks.

No, or not yet.
 
> afaiu the haproxy backends  lb-srv1 &  lb-srv1 cannot be load balanced
> but only chosen based on acl or as default fallback?

No.

> ------------------------------------------------------------
> frontend testing 0.0.0.0:88
>          mode            http
>          maxconn         20000
> 
>          option          httplog
>          monitor-uri     /up.html
> 
>          option          http-server-close
>          option          forwardfor
>          reqadd          X-Forwarded-Proto:\ http
> 
>          acl             acl-lb-srv1 hdr_beg(Cookie) lb-srv1=
>          acl             acl-lb-srv1-up nbsrv(lb-srv1) 1
> 
>          acl             acl-lb-srv2 hdr_beg(Cookie) lb-srv2=
>          acl             acl-lb-srv2-up nbsrv(lb-srv2) 1
> 
>          use_backend     lb-srv1 if acl-lb-srv1 acl-lb-srv1-up
>          use_backend     lb-srv2 if acl-lb-srv2 acl-lb-srv2-up
>          default_backend testing_rr
> 
>          monitor         fail if !acl-lb-srv1-up !acl-lb-srv2-up
> 
> backend lb-srv1
>          mode            http
>          option          httpchk /up.html
>          option          abortonclose
> 
>          server          lb-srv1 lb-srv1.private:82 maxconn 900 check
> inter 2000 fall 3
> 
> backend lb-srv2
>          mode            http
>          option          httpchk /up.html
>          option          abortonclose
> 
>          server          lb-srv2 lb-srv2.private:82 maxconn 900 check
> inter 2000 fall 3
> 
> backend testing_rr
>          mode            http
>          option          httpchk /up.html
>          option          abortonclose
> 
>          balance         roundrobin
>          server          lb-srv1 lb-srv1.private:82 maxconn 900 track
> lb-srv1/lb-srv1
>          server          lb-srv2 lb-srv2.private:82 maxconn 900 track
> lb-srv2/lb-srv2
> -----------------------------------------------------------

Proposed version (untested) :
------------------------------------------------------------
listen testing 0.0.0.0:88
        mode            http
        maxconn         20000

        option          httplog
        monitor-uri     /up.html

        option          abortonclose
        option          http-server-close
        option          forwardfor
        reqadd          X-Forwarded-Proto:\ http

        acl             acl-lb-down nbsrv 0
        monitor         fail if acl-lb-down

        cookie          lb insert
        server          lb-srv1 lb-srv1.private:82 maxconn 900 cookie srv1 
check inter 2000 fall 3
        server          lb-srv2 lb-srv2.private:82 maxconn 900 cookie srv2 
check inter 2000 fall 3
-----------------------------------------------------------

-- 
Cyril Bonté

Reply via email to