To close the loop on this one, the issue was in part with my testing.  
Ultimately the fix was to use "stick store-request" everywhere, instead of 
"stick on”.

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








On 11/25/14, 2:05 PM, "Daniel Dubovik" <ddubo...@godaddy.com> wrote:

>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