Hi,

If cookie insert is not an option, then in 1.5-dev7, you can perform
cookie persistence learning the application cookie and store it in a
stick table.
It's like appsession, unless it will survive a reload and you can
share it between HAProxy boxes. :)

cheers

On Mon, Oct 31, 2011 at 7:40 PM, Cyril Bonté <[email protected]> wrote:
> 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