Hi,

we are currently facing problem with connection clogging with this 
configuration.
The client after a while (random number of requests ~few hundreds) reaches 
"timeout connect" settings on backend server - proxy returns 503 Service 
Unavailable No server is available to handle this request. Other clients on 
different IPs are connecting to server just fine.
Strace on haproxy when its not working shows just: Resource temporarily 
unavailable.
After a while it starts working again for random number of requests and then 
503 occurs again.
When switched to another backend server it starts working again. Switching back 
to broken backend - still request timeouts for affected clients.
It looks like it is only affecting clients behind public IP address with high 
traffic.
We have tried to change various sysctl settings, with no success so far.
When we remove the haproxy setting "source 0.0.0.0 usesrc clientip" all works 
just fine without clogging - so it looks like its tproxy problem, but we are 
unable to find solution.

*** backend server uname -a:
Linux backend 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 2014 
x86_64 x86_64 x86_64 GNU/Linux

*** haproxy -vv
HA-Proxy version 1.5.8 2014/10/31
Copyright 2000-2014 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux26
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing
  OPTIONS = USE_LINUX_TPROXY=1 USE_REGPARM=1 USE_OPENSSL=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes
Built without zlib support (USE_ZLIB not set)
Compression algorithms supported : identity
Built with OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
Running on OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 7.8 2008-09-05
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT 
IP_FREEBIND

Available polling systems :
      epoll : pref=300,  test result OK
       poll : pref=200,  test result OK
     select : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

*** haproxy server uname -a
Linux haproxy-test 2.6.32-504.3.3.el6.x86_64 #1 SMP Wed Dec 17 01:55:02 UTC 
2014 x86_64 x86_64 x86_64 GNU/Linux

*** haproxy server settings:

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp --sport 80 -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --sport 81 -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --sport 82 -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --sport 443 -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT

ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_nonlocal_bind=1

*** haproxy.cfg:

frontend  front
        bind IP:80
        mode http

        default_backend WWW
        capture cookie SERVERID len 32
        capture request  header Content-Length len 10
        reqadd X-Forwarded-Proto:\ http
        timeout connect 6s

backend WWW
        server  srvA    192.168.1.1:80 weight  1  check source 0.0.0.0 usesrc 
clientip


*** sysctl.cfg:

kernel.shmmax = 4294967295
kernel.shmall = 268435456
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_slow_start_after_idle=0
net.nf_conntrack_max = 200000
net.netfilter.nf_conntrack_tcp_timeout_established = 1800
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
net.core.somaxconn = 40000
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2

-- 
S pozdravem

Zbyněk Rozman
Linux System Administrator

[email protected]
480 020 191

Stable.cz s.r.o. | www.stable.cz
Skelná 29, 466 02, Jablonec nad Nisou
Tel.: 480 020 191, fax: 480 020 091

napoveda.stable.cz

www.stable.cz | www.otoman.cz | www.kvapem.cz | www.multak.cz

Reply via email to