Claudio Kuenzler
2017-08-08 05:16:17 UTC
Hi,
I've set "hard limits" with maxconn for each backend server but it seems
that established (keep-alive) connections are not accounted for in the
stats. This leads to HAProxy allowing more connections to the backend
server than actually defined with the maxconn value.
Config:
############
frontend app-in
bind *:18382
option httplog
timeout client 1h
timeout server 1h
timeout http-keep-alive 1h
maxconn 96
default_backend app-out
############
backend aoo-out
balance roundrobin
no option redispatch
option persist
timeout queue 1
timeout connect 5
timeout check 60s
timeout http-keep-alive 4m
cookie SERVERID insert indirect nocache
option httpchk GET /service?wsdl HTTP/1.0\r\nConnection:\ close
server app01-p-18383 10.10.10.11:18383 maxconn 5 maxqueue 1 cookie
1-18383 check fall 1 rise 2
server app01-p-18384 10.10.10.11:18384 maxconn 5 maxqueue 1 cookie
1-18384 check fall 1 rise 2
server app01-p-18385 10.10.10.11:18385 maxconn 5 maxqueue 1 cookie
1-18385 check fall 1 rise 2
server app01-p-18386 10.10.10.11:18386 maxconn 5 maxqueue 1 cookie
1-18386 check fall 1 rise 2
server app01-p-18387 10.10.10.11:18387 maxconn 5 maxqueue 1 cookie
1-18387 check fall 1 rise 2
server app01-p-18388 10.10.10.11:18388 maxconn 5 maxqueue 1 cookie
1-18388 check fall 1 rise 2
server app01-p-18389 10.10.10.11:18389 maxconn 5 maxqueue 1 cookie
1-18389 check fall 1 rise 2
server app01-p-18390 10.10.10.11:18390 maxconn 5 maxqueue 1 cookie
1-18390 check fall 1 rise 2
server app02-p-18383 10.10.10.12:18383 maxconn 5 maxqueue 1 cookie
2-18383 check fall 1 rise 2
server app02-p-18384 10.10.10.12:18384 maxconn 5 maxqueue 1 cookie
2-18384 check fall 1 rise 2
server app02-p-18385 10.10.10.12:18385 maxconn 5 maxqueue 1 cookie
2-18385 check fall 1 rise 2
server app02-p-18386 10.10.10.12:18386 maxconn 5 maxqueue 1 cookie
2-18386 check fall 1 rise 2
server app02-p-18387 10.10.10.12:18387 maxconn 5 maxqueue 1 cookie
2-18387 check fall 1 rise 2
server app02-p-18388 10.10.10.12:18388 maxconn 5 maxqueue 1 cookie
2-18388 check fall 1 rise 2
server app02-p-18389 10.10.10.12:18389 maxconn 5 maxqueue 1 cookie
2-18389 check fall 1 rise 2
server app02-p-18390 10.10.10.12:18390 maxconn 5 maxqueue 1 cookie
2-18390 check fall 1 rise 2
As you can see, each backend server allows a maximum of 5 concurrent
connections. But during a stress-test we saw that there were clearly more
connections going through HAProxy to the backend:
# for ip in 10.10.10.11 10.10.10.12; do for port in 18383 18384 18385 18386
18387 18388 18390; do echo "$ip $port" ; netstat -an | grep $ip | grep
$port; done; done
10.10.10.11 18383
tcp 0 0 10.10.10.10:54196 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:53898 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54826 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54660 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54064 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54434 10.10.10.11:18383 ESTABLISHED
10.10.10.11 18384
tcp 0 0 10.10.10.10:48452 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:49056 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:49220 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48592 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48292 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48824 10.10.10.11:18384 ESTABLISHED
10.10.10.11 18385
tcp 0 0 10.10.10.10:59128 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56566 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56388 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56704 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57468 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56854 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57342 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57072 10.10.10.11:18385 ESTABLISHED
10.10.10.11 18386
tcp 0 0 10.10.10.10:52090 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:52358 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51400 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51712 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51866 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:52492 10.10.10.11:18386 ESTABLISHED
10.10.10.11 18387
tcp 0 0 10.10.10.10:40588 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40272 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:41360 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40986 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40466 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40738 10.10.10.11:18387 ESTABLISHED
10.10.10.11 18388
tcp 0 0 10.10.10.10:58976 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59454 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58820 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59598 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58500 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58694 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59218 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:32996 10.10.10.11:18388 ESTABLISHED
10.10.10.11 18390
tcp 0 0 10.10.10.10:34148 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33698 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33206 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33524 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33396 10.10.10.11:18390 ESTABLISHED
10.10.10.12 18383
tcp 0 0 10.10.10.10:52148 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52354 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52466 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52926 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52642 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:53090 10.10.10.12:18383 ESTABLISHED
10.10.10.12 18384
tcp 0 0 10.10.10.10:42608 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:43184 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:43342 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42906 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42402 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42724 10.10.10.12:18384 ESTABLISHED
10.10.10.12 18385
tcp 0 0 10.10.10.10:48830 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48408 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48214 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48100 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:47912 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48676 10.10.10.12:18385 ESTABLISHED
10.10.10.12 18386
tcp 0 0 10.10.10.10:49612 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:49452 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48684 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48988 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48874 10.10.10.12:18386 ESTABLISHED
10.10.10.12 18387
tcp 0 0 10.10.10.10:36182 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36652 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36804 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:35876 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36070 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36392 10.10.10.12:18387 ESTABLISHED
10.10.10.12 18388
tcp 0 0 10.10.10.10:59652 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60424 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60582 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60154 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59836 10.10.10.12:18388 ESTABLISHED
10.10.10.12 18390
tcp 0 0 10.10.10.10:52104 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:53028 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52264 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52868 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52626 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52398 10.10.10.12:18390 ESTABLISHED
(10.10.10.10 is obviously the HAProxy's IP)
Some of the backend servers even reached 8 concurrent connections. 6 would
have been possible (5 maxconn + 1 healthcheck).
In the html stats I saw that "Sessions Cur" was mostly at 1 or 0,
indicating that the already established connections were not counted in.
Also in the logged stats (to rule out a problem in the html display), the
srv_conn is nowhere near the actual number of connections:
Aug 7 16:32:09 haproxy haproxy[31083]: client:42724
[07/Aug/2017:16:32:08.168] app-in app-out/app02-p-18389 975/0/0/100/1075
200 798 - - --VN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42698
[07/Aug/2017:16:32:08.158] app-in app-out/app01-p-18385 983/0/0/110/1093
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42546
[07/Aug/2017:16:32:08.080] app-in app-out/app01-p-18388 1093/0/0/110/1203
200 799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42706
[07/Aug/2017:16:32:08.455] app-in app-out/app01-p-18389 932/0/0/99/1031 200
799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42740
[07/Aug/2017:16:32:08.737] app-in app-out/app01-p-18389 913/0/0/102/1015
200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42708
[07/Aug/2017:16:32:08.612] app-in app-out/app01-p-18390 1096/0/0/106/1202
200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42626
[07/Aug/2017:16:32:08.776] app-in app-out/app02-p-18387 967/0/0/108/1075
200 800 - - --VN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42724
[07/Aug/2017:16:32:09.244] app-in app-out/app02-p-18389 947/0/0/98/1045 200
798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42698
[07/Aug/2017:16:32:09.252] app-in app-out/app01-p-18385 1002/0/0/107/1109
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42546
[07/Aug/2017:16:32:09.283] app-in app-out/app01-p-18388 1038/0/0/102/1140
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42740
[07/Aug/2017:16:32:09.752] app-in app-out/app01-p-18389 1071/0/0/100/1171
200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42708
[07/Aug/2017:16:32:09.815] app-in app-out/app01-p-18390 1042/0/0/98/1140
200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:11 haproxy haproxy[31083]: client:42626
[07/Aug/2017:16:32:09.852] app-in app-out/app02-p-18387 1057/0/0/98/1155
200 800 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:33:13 haproxy haproxy[31083]: client:42706
[07/Aug/2017:16:32:09.486] app-in app-out/app01-p-18389 64294/0/0/96/64390
200 799 - - --DN 96/96/2/1/0 0/0 "POST / HTTP/1.1"
As said before, these are all keep-alive connections. They can be running
idle for quite a long time (hence the long timeouts), but that's
application design.
To me it looks like only connections with current data-transfer are
accounted for in the CUR statistics, idle connections somehow drop out and
HAProxy then allows additional connections to the backend, causing it to
stale (it cannot handle more than 7 sessions). Am I wrong? Did I
misinterpret the maxconn purpose?
Or was there a major change from the version I use (HAProxy 1.6.3 on Ubuntu
Xenial/1.6.3-1ubuntu0.1)? In the change log I haven't seen a bugfix
concerning maxconn.
Thanks for any advice in advance,
ck
I've set "hard limits" with maxconn for each backend server but it seems
that established (keep-alive) connections are not accounted for in the
stats. This leads to HAProxy allowing more connections to the backend
server than actually defined with the maxconn value.
Config:
############
frontend app-in
bind *:18382
option httplog
timeout client 1h
timeout server 1h
timeout http-keep-alive 1h
maxconn 96
default_backend app-out
############
backend aoo-out
balance roundrobin
no option redispatch
option persist
timeout queue 1
timeout connect 5
timeout check 60s
timeout http-keep-alive 4m
cookie SERVERID insert indirect nocache
option httpchk GET /service?wsdl HTTP/1.0\r\nConnection:\ close
server app01-p-18383 10.10.10.11:18383 maxconn 5 maxqueue 1 cookie
1-18383 check fall 1 rise 2
server app01-p-18384 10.10.10.11:18384 maxconn 5 maxqueue 1 cookie
1-18384 check fall 1 rise 2
server app01-p-18385 10.10.10.11:18385 maxconn 5 maxqueue 1 cookie
1-18385 check fall 1 rise 2
server app01-p-18386 10.10.10.11:18386 maxconn 5 maxqueue 1 cookie
1-18386 check fall 1 rise 2
server app01-p-18387 10.10.10.11:18387 maxconn 5 maxqueue 1 cookie
1-18387 check fall 1 rise 2
server app01-p-18388 10.10.10.11:18388 maxconn 5 maxqueue 1 cookie
1-18388 check fall 1 rise 2
server app01-p-18389 10.10.10.11:18389 maxconn 5 maxqueue 1 cookie
1-18389 check fall 1 rise 2
server app01-p-18390 10.10.10.11:18390 maxconn 5 maxqueue 1 cookie
1-18390 check fall 1 rise 2
server app02-p-18383 10.10.10.12:18383 maxconn 5 maxqueue 1 cookie
2-18383 check fall 1 rise 2
server app02-p-18384 10.10.10.12:18384 maxconn 5 maxqueue 1 cookie
2-18384 check fall 1 rise 2
server app02-p-18385 10.10.10.12:18385 maxconn 5 maxqueue 1 cookie
2-18385 check fall 1 rise 2
server app02-p-18386 10.10.10.12:18386 maxconn 5 maxqueue 1 cookie
2-18386 check fall 1 rise 2
server app02-p-18387 10.10.10.12:18387 maxconn 5 maxqueue 1 cookie
2-18387 check fall 1 rise 2
server app02-p-18388 10.10.10.12:18388 maxconn 5 maxqueue 1 cookie
2-18388 check fall 1 rise 2
server app02-p-18389 10.10.10.12:18389 maxconn 5 maxqueue 1 cookie
2-18389 check fall 1 rise 2
server app02-p-18390 10.10.10.12:18390 maxconn 5 maxqueue 1 cookie
2-18390 check fall 1 rise 2
As you can see, each backend server allows a maximum of 5 concurrent
connections. But during a stress-test we saw that there were clearly more
connections going through HAProxy to the backend:
# for ip in 10.10.10.11 10.10.10.12; do for port in 18383 18384 18385 18386
18387 18388 18390; do echo "$ip $port" ; netstat -an | grep $ip | grep
$port; done; done
10.10.10.11 18383
tcp 0 0 10.10.10.10:54196 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:53898 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54826 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54660 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54064 10.10.10.11:18383 ESTABLISHED
tcp 0 0 10.10.10.10:54434 10.10.10.11:18383 ESTABLISHED
10.10.10.11 18384
tcp 0 0 10.10.10.10:48452 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:49056 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:49220 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48592 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48292 10.10.10.11:18384 ESTABLISHED
tcp 0 0 10.10.10.10:48824 10.10.10.11:18384 ESTABLISHED
10.10.10.11 18385
tcp 0 0 10.10.10.10:59128 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56566 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56388 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56704 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57468 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:56854 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57342 10.10.10.11:18385 ESTABLISHED
tcp 0 0 10.10.10.10:57072 10.10.10.11:18385 ESTABLISHED
10.10.10.11 18386
tcp 0 0 10.10.10.10:52090 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:52358 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51400 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51712 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:51866 10.10.10.11:18386 ESTABLISHED
tcp 0 0 10.10.10.10:52492 10.10.10.11:18386 ESTABLISHED
10.10.10.11 18387
tcp 0 0 10.10.10.10:40588 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40272 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:41360 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40986 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40466 10.10.10.11:18387 ESTABLISHED
tcp 0 0 10.10.10.10:40738 10.10.10.11:18387 ESTABLISHED
10.10.10.11 18388
tcp 0 0 10.10.10.10:58976 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59454 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58820 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59598 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58500 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:58694 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59218 10.10.10.11:18388 ESTABLISHED
tcp 0 0 10.10.10.10:32996 10.10.10.11:18388 ESTABLISHED
10.10.10.11 18390
tcp 0 0 10.10.10.10:34148 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33698 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33206 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33524 10.10.10.11:18390 ESTABLISHED
tcp 0 0 10.10.10.10:33396 10.10.10.11:18390 ESTABLISHED
10.10.10.12 18383
tcp 0 0 10.10.10.10:52148 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52354 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52466 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52926 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:52642 10.10.10.12:18383 ESTABLISHED
tcp 0 0 10.10.10.10:53090 10.10.10.12:18383 ESTABLISHED
10.10.10.12 18384
tcp 0 0 10.10.10.10:42608 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:43184 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:43342 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42906 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42402 10.10.10.12:18384 ESTABLISHED
tcp 0 0 10.10.10.10:42724 10.10.10.12:18384 ESTABLISHED
10.10.10.12 18385
tcp 0 0 10.10.10.10:48830 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48408 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48214 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48100 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:47912 10.10.10.12:18385 ESTABLISHED
tcp 0 0 10.10.10.10:48676 10.10.10.12:18385 ESTABLISHED
10.10.10.12 18386
tcp 0 0 10.10.10.10:49612 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:49452 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48684 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48988 10.10.10.12:18386 ESTABLISHED
tcp 0 0 10.10.10.10:48874 10.10.10.12:18386 ESTABLISHED
10.10.10.12 18387
tcp 0 0 10.10.10.10:36182 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36652 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36804 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:35876 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36070 10.10.10.12:18387 ESTABLISHED
tcp 0 0 10.10.10.10:36392 10.10.10.12:18387 ESTABLISHED
10.10.10.12 18388
tcp 0 0 10.10.10.10:59652 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60424 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60582 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:60154 10.10.10.12:18388 ESTABLISHED
tcp 0 0 10.10.10.10:59836 10.10.10.12:18388 ESTABLISHED
10.10.10.12 18390
tcp 0 0 10.10.10.10:52104 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:53028 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52264 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52868 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52626 10.10.10.12:18390 ESTABLISHED
tcp 0 0 10.10.10.10:52398 10.10.10.12:18390 ESTABLISHED
(10.10.10.10 is obviously the HAProxy's IP)
Some of the backend servers even reached 8 concurrent connections. 6 would
have been possible (5 maxconn + 1 healthcheck).
In the html stats I saw that "Sessions Cur" was mostly at 1 or 0,
indicating that the already established connections were not counted in.
Also in the logged stats (to rule out a problem in the html display), the
srv_conn is nowhere near the actual number of connections:
Aug 7 16:32:09 haproxy haproxy[31083]: client:42724
[07/Aug/2017:16:32:08.168] app-in app-out/app02-p-18389 975/0/0/100/1075
200 798 - - --VN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42698
[07/Aug/2017:16:32:08.158] app-in app-out/app01-p-18385 983/0/0/110/1093
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42546
[07/Aug/2017:16:32:08.080] app-in app-out/app01-p-18388 1093/0/0/110/1203
200 799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42706
[07/Aug/2017:16:32:08.455] app-in app-out/app01-p-18389 932/0/0/99/1031 200
799 - - --DN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42740
[07/Aug/2017:16:32:08.737] app-in app-out/app01-p-18389 913/0/0/102/1015
200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42708
[07/Aug/2017:16:32:08.612] app-in app-out/app01-p-18390 1096/0/0/106/1202
200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:09 haproxy haproxy[31083]: client:42626
[07/Aug/2017:16:32:08.776] app-in app-out/app02-p-18387 967/0/0/108/1075
200 800 - - --VN 97/96/0/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42724
[07/Aug/2017:16:32:09.244] app-in app-out/app02-p-18389 947/0/0/98/1045 200
798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42698
[07/Aug/2017:16:32:09.252] app-in app-out/app01-p-18385 1002/0/0/107/1109
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42546
[07/Aug/2017:16:32:09.283] app-in app-out/app01-p-18388 1038/0/0/102/1140
200 799 - - --DN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42740
[07/Aug/2017:16:32:09.752] app-in app-out/app01-p-18389 1071/0/0/100/1171
200 799 - - --DN 97/96/2/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:10 haproxy haproxy[31083]: client:42708
[07/Aug/2017:16:32:09.815] app-in app-out/app01-p-18390 1042/0/0/98/1140
200 798 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:32:11 haproxy haproxy[31083]: client:42626
[07/Aug/2017:16:32:09.852] app-in app-out/app02-p-18387 1057/0/0/98/1155
200 800 - - --VN 97/96/1/1/0 0/0 "POST / HTTP/1.1"
Aug 7 16:33:13 haproxy haproxy[31083]: client:42706
[07/Aug/2017:16:32:09.486] app-in app-out/app01-p-18389 64294/0/0/96/64390
200 799 - - --DN 96/96/2/1/0 0/0 "POST / HTTP/1.1"
As said before, these are all keep-alive connections. They can be running
idle for quite a long time (hence the long timeouts), but that's
application design.
To me it looks like only connections with current data-transfer are
accounted for in the CUR statistics, idle connections somehow drop out and
HAProxy then allows additional connections to the backend, causing it to
stale (it cannot handle more than 7 sessions). Am I wrong? Did I
misinterpret the maxconn purpose?
Or was there a major change from the version I use (HAProxy 1.6.3 on Ubuntu
Xenial/1.6.3-1ubuntu0.1)? In the change log I haven't seen a bugfix
concerning maxconn.
Thanks for any advice in advance,
ck