Hmmm, I pared down the config even more, and it seems to be working now.  
Let me play around with it a bit to see what the difference is.  For the 
record, in my current config, I do not have http-server-close set.  I’m 
wondering if it’s been working all along, and my initial validation was 
wrong.  I’ll report back if I find anything amiss.

Thanks!
Dan Dubovik
Senior Linux Systems Engineer
480-505-8800 x4257








On 11/25/14, 3:56 AM, "Daniel Dubovik" <ddubo...@godaddy.com> wrote:

>I added "option http-server-close" to all backends (both the hdr(Host) 
>balanced one, and the roundrobin one), and the behavior is the same.
>
>Stats output showing the table contents is:
>
>echo 'show table ft_web' | socat /var/run/haproxy.sock stdio
>
># table: ft_web, type: string, size:1024000, used:1
>0x2547540: key=a.com use=0 exp=244775 server_id=2 http_req_rate(10000)=0
>
>Is there a way to unset the server_id? Or is that a required key for the 
>table entry? I know the doc notes that field is enabled by default.
>
>Thanks!
>— Dan.
>
>
>
>
>On 11/24/14, 10:35 PM, "Baptiste" <bed...@gmail.com> wrote:
>
>>On Mon, Nov 24, 2014 at 11:08 PM, Daniel Dubovik <ddubo...@godaddy.com> 
>>wrote:
>>> Hey all!
>>>
>>> We have a cluster of HAProxy servers, in front of a set of Varnish 
>>>nodes.
>>> Currently, we have HAProxy set to load balance traffic based on Host
>>> header to a given varnish server.  Some of our sites have enough 
>>>traffic,
>>> that it warrants roundrobining their traffic to multiple varnish 
>>>servers.
>>>
>>> I've been looking into using stick-tables for connection tracking, and
>>> seem to have run into a wall, so hoping someone where can help.
>>>
>>> Relavent config follows:
>>>
>>> ---------------------------------------------------------
>>> frontend ft_web
>>>   option forwardfor
>>>   stats enable
>>>   stats scope .
>>>   bind :80
>>>
>>>   #Setup our stick-table and connection rate tracking
>>>   stick-table type string len 50 size 1000k expire 5m peers 
>>>loadbalancers
>>> store http_req_rate(10s)
>>>   tcp-request inspect-delay 5s
>>>   tcp-request content track-sc1 hdr(Host)
>>>
>>>
>>>   acl heavy_hitters sc1_http_req_rate gt 5
>>>
>>>
>>>   # Heavy site only
>>>   use_backend varnish_heavy if heavy_hitters
>>>
>>>   # Just a standard http request, with no special options
>>>   default_backend varnish
>>>
>>> backend varnish_heavy
>>>   stats enable
>>>   stats scope .
>>>   balance roundrobin           # Balance based on requested host
>>>
>>>   # Add connection tracking
>>>   #    stick on hdr(Host) table ft_web
>>>   stick store-request hdr(Host) table ft_web
>>>
>>>
>>>   http-response set-header X-HEAVYSITE 1
>>>
>>>   server varnishserver01 10.11.12.13:80 weight 1 track
>>> check_servers/varnishserver01-track
>>>   server varnishserver02 10.11.12.14:80 weight 1 track
>>> check_servers/varnishserver02-track
>>>
>>>
>>>
>>> backend varnish
>>>   stats enable
>>>   stats scope .
>>>   balance hdr(Host)           # Balance based on requested host
>>>   hash-type consistent djb2
>>>
>>>   # Add connection tracking
>>>   #    stick on hdr(Host) table ft_web
>>>   stick store-request hdr(Host) table ft_web
>>>
>>>   server varnishserver01 10.11.12.13:80 weight 1 track
>>> check_servers/varnishserver01-track
>>>   server varnishserver02 10.11.12.14:80 weight 1 track
>>> check_servers/varnishserver02-track
>>>
>>>
>>> ----------------------------------------
>>>
>>>
>>>
>>> Note:  I tried both "stick on" and stick store-request, and both had 
>>>the
>>> same behavior
>>>
>>> What I've found is, the backend selection will work.  We will trigger 
>>>the
>>> rate limit, and I will see the X-HEAVYSITE header, so I know that part 
>>>is
>>> working.  The trouble is, the balance algorithm is being ignored, and 
>>>we
>>> are pinning sites to the same server still.  Is there a way for me to 
>>>have
>>> it honor the balance algorithm (roundrobin in this case) for requests 
>>>in a
>>> stick-table, and not use the server_id value to auto-determine the 
>>>server
>>> to use?
>>>
>>> Thanks!
>>> Dan Dubovik
>>> Senior Linux Systems Engineer
>>> 480-505-8800 x4257
>>>
>>
>>
>>Hi daniel
>>
>>Can you give a try to "option http-server-close" in your roundrobin 
>>backend?
>>
>>Baptiste
>
>
>
>
>

Reply via email to