Hi!
First, I'd like to thank Willy and the other haproxy contributors for
bringing this wonderful piece of software into the world :)
For the last 2 years now we have been running haproxy 1.3 successfully
to load balance our frontend applications and storage services. Mainly
the requests passing through our haproxy instances are WebDAV
commands. Since there were some new sought-after features announced in
the new stable 1.4 branch, yesterday we gave it a go and upgraded to
haproxy from 1.3.22 to 1.4.1 in our production environment (simply
replaced active binary with -sf switch). After the new version was
deployed our incoming traffic slowly dropped from approximately
150Mbps to 80Mbps (as ongoing requests were still processed by
1.3.22). The configuration file were not changed between the two
versions, so we have not yet started use any of the new config options
for 1.4 (http-server-close etc). Because of the drop in throughput we
have now rolled back to 1.3.22 (and traffic levels are back to
normal).
What differ our service from most other online services is that we are
more of a "content-consumer" rather than a content provider. The
requests that are generating our traffic volume is mostly large and
small PUT requests with Transfer-Encoding: chunked. Is this type of
requests included in any of your tests or benchmarks? Do you have a
clue of what might have changed in the code base to cause this
behavior? Any suggestions for where to go from here (other than
sticking with 1.3 :) is greatly appreciated.
The hardware this haproxy setup is running on is HP DL360G5. Base OS
is Debian Lenny (currently with kernel 2.6.18). Stunnel (w/ hw
acceleration) is used for SSL-decoding.
Parts of our haproxy.cfg:
global
log loghost local0 debug
maxconn 26000
ulimit-n 65536
user haproxy
group haproxy
chroot /var/chroot/haproxy
daemon
pidfile /var/run/haproxy.pid
spread-checks 5
defaults
log global
mode http
maxconn 10000
timeout client 60s
timeout server 60s
timeout queue 60s
timeout connect 4s
timeout http-request 5s
retries 2
option httpclose
option forceclose
option redispatch
balance roundrobin
monitor-uri /haproxy_mon
option httplog
option dontlognull
frontend censored_example
bind 10.10.10.10:80
option forwardfor except 10.10.10.10/24
"some santity acls used for blocking"
"some acls for backend matching"
capture request header something
capture cookie something
use_backend a if x
use_backend b if y
default_backend c
backend a
balance uri depth 2
server server1 server1:80 weight 1 check inter 10000
server serverN serverN:80 weight 1 check inter 10000
option httpchk GET /health
and so on... :)
Output of "haproxy -vv" for 1.3.22:
HA-Proxy version 1.3.22 2009/10/14
Copyright 2000-2009 Willy Tarreau <[email protected]>
Build options :
TARGET = linux26
CPU = generic
CC = gcc
CFLAGS = -O2 -g
OPTIONS =
Default settings :
maxconn = 2000, maxpollevents = 200
Available polling systems :
sepoll : pref=400, test result OK
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 4 (4 usable), will use sepoll.
Output of "haproxy -vv" for 1.4.1:
HA-Proxy version 1.4.1 2010/03/04
Copyright 2000-2010 Willy Tarreau <[email protected]>
Build options :
TARGET = linux26
CPU = generic
CC = gcc
CFLAGS = -O2 -g
OPTIONS =
Default settings :
maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200
Encrypted password support via crypt(3): yes
Available polling systems :
sepoll : pref=400, test result OK
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 4 (4 usable), will use sepoll.
Best regards
Erik Gulliksson
--
Erik Gulliksson, [email protected]
System Administrator, Diino AB
http://www.diino.com