Re: Stick-tables with roundrobin backend
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(1)=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
Re: Stick-tables with roundrobin backend
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(1)=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
Re: Stick-tables with roundrobin backend
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
Re: Stick-tables with roundrobin backend
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(1)=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