Hi.

We've tried migrating haproxy from 1.4.22 to 1.5.2. As a result we
experienced a serious performance impact. The only thing that was changed
was hapxory version. We tried 1.5.12 afterwards, but that didn't really
help. This is running on AWS Amazon Linux 64bit. 1.5.2 was AWS stock,
1.5.12 we built ourselves.

The manifestations were that at some point, haproxy would stop responding
(we have a probe that checks the status of haproxy) to admin interfaces,
and declare servers "down" due to layer 4 check failures, and return 503 to
the requests. This sort of happens in clusters, and only under high load
(over 1,500 requests/sec). All, or most of the servers are at this point
declared "down", even the ones that only get very little traffic. The check
failures logged like this:

May 18 15:06:16 ip-10-16-20-170 haproxy[2218]: Server node15/node15 is
DOWN, reason: Layer4 timeout, check duration: 2000ms. 0 active and 0 backup
servers left. 0 sessions active, 0 requeued, 0 remaining in queue.

I wonder if there are some configuration values that need to be tinkered
with for 1.5 that weren't needed for 1.4. Any suggestions will be
appreciated as well. The traffic is http only, and mostly short messages
(~1k responses), though some (1/5) are ~200k. About 80% of the traffic
would go through the "nodeXX" backends, the rest is through "wl" backend.

haproxy.cfg:

global
    log /dev/log local5 info
    maxconn 16000
    nbproc 2
    stats socket /var/run/haproxy.sock user nrpe group nrpe mode user

listen stats-odd :1936
        bind-process odd
        mode http
        acl AUTH src 10.16.0.165
        stats enable
        stats uri /
        stats admin if AUTH
        timeout client 300s
listen stats-even :1937
        bind-process even
        mode http
        acl AUTH src 10.16.0.165
        stats enable
        stats uri /
        stats admin if AUTH
        timeout client 300s

defaults
    log global
    option allbackups
    option httpclose
    option redispatch
    mode http
    retries 3
    timeout client 300s
    timeout connect 3s
    timeout server 300s

frontend ssldemark
    bind *:8888
    maxconn 6000

    acl for_pe path_beg /pe
    acl for_mis path_beg /mispot

    acl for_n1 url_sub _gswnid=001
    acl for_n2 url_sub _gswnid=002
    acl for_n3 url_sub _gswnid=003
    acl for_n4 url_sub _gswnid=004
    acl for_n5 url_sub _gswnid=005
    acl for_n6 url_sub _gswnid=006
    acl for_n7 url_sub _gswnid=007
    acl for_n8 url_sub _gswnid=008
    acl for_n9 url_sub _gswnid=009

    acl for_n11 url_sub _gswnid=011
    acl for_n12 url_sub _gswnid=012
    acl for_n13 url_sub _gswnid=013
    acl for_n14 url_sub _gswnid=014
    acl for_n15 url_sub _gswnid=015
    acl for_n16 url_sub _gswnid=016
    acl for_n17 url_sub _gswnid=017
    acl for_n18 url_sub _gswnid=018
    acl for_n19 url_sub _gswnid=019
    acl for_n21 url_sub _gswnid=021
    acl for_n22 url_sub _gswnid=022
    acl for_n23 url_sub _gswnid=023
    acl for_n24 url_sub _gswnid=024
    acl for_n25 url_sub _gswnid=025
    acl for_n26 url_sub _gswnid=026
    acl for_n27 url_sub _gswnid=027
    acl for_n28 url_sub _gswnid=028
    acl for_n29 url_sub _gswnid=029

    reqadd Proxy-SSL:\ true
    reqadd X-gsm-secure:\ true

    default_backend static
    use_backend node1 if for_n1
    use_backend node2 if for_n2
    use_backend node3 if for_n3
    use_backend node4 if for_n4
    use_backend node5 if for_n5
    use_backend node6 if for_n6
    use_backend node7 if for_n7
    use_backend node8 if for_n8
    use_backend node9 if for_n9

    use_backend node11 if for_n11
    use_backend node12 if for_n12
    use_backend node13 if for_n13
    use_backend node14 if for_n14
    use_backend node15 if for_n15
    use_backend node16 if for_n16
    use_backend node17 if for_n17
    use_backend node18 if for_n18
    use_backend node19 if for_n19
    use_backend node21 if for_n21
    use_backend node22 if for_n22
    use_backend node23 if for_n23
    use_backend node24 if for_n24
    use_backend node25 if for_n25
    use_backend node26 if for_n26
    use_backend node27 if for_n27
    use_backend node28 if for_n28
    use_backend node29 if for_n29
    use_backend wl if for_pe
    use_backend mis if for_mis


frontend mispot
    bind *:80
    maxconn 16000

    capture request header Referer len 64
    capture request header X-Forwarded-For len 64
    capture response header Status len 64
    capture response header Server len 20

    acl for_pe path_beg /pe
    acl for_mis path_beg /mispot

    acl for_n1 url_sub _gswnid=001
    acl for_n2 url_sub _gswnid=002
    acl for_n3 url_sub _gswnid=003
    acl for_n4 url_sub _gswnid=004
    acl for_n5 url_sub _gswnid=005
    acl for_n6 url_sub _gswnid=006
    acl for_n7 url_sub _gswnid=007
    acl for_n8 url_sub _gswnid=008
    acl for_n9 url_sub _gswnid=009

    acl for_n11 url_sub _gswnid=011
    acl for_n12 url_sub _gswnid=012
    acl for_n13 url_sub _gswnid=013
    acl for_n14 url_sub _gswnid=014
    acl for_n15 url_sub _gswnid=015
    acl for_n16 url_sub _gswnid=016
    acl for_n17 url_sub _gswnid=017
    acl for_n18 url_sub _gswnid=018
    acl for_n19 url_sub _gswnid=019
    acl for_n21 url_sub _gswnid=021
    acl for_n22 url_sub _gswnid=022
    acl for_n23 url_sub _gswnid=023
    acl for_n24 url_sub _gswnid=024
    acl for_n25 url_sub _gswnid=025
    acl for_n26 url_sub _gswnid=026
    acl for_n27 url_sub _gswnid=027
    acl for_n28 url_sub _gswnid=028
    acl for_n29 url_sub _gswnid=029

    reqidel ^Proxy-Client-IP:.*
    reqidel ^X-gsm-secure:.*
    option forwardfor header Proxy-Client-IP
    option httplog
    log global

    default_backend static
    use_backend node1 if for_n1
    use_backend node2 if for_n2
    use_backend node3 if for_n3
    use_backend node4 if for_n4
    use_backend node5 if for_n5
    use_backend node6 if for_n6
    use_backend node7 if for_n7
    use_backend node8 if for_n8
    use_backend node9 if for_n9

    use_backend node11 if for_n11
    use_backend node12 if for_n12
    use_backend node13 if for_n13
    use_backend node14 if for_n14
    use_backend node15 if for_n15
    use_backend node16 if for_n16
    use_backend node17 if for_n17
    use_backend node18 if for_n18
    use_backend node19 if for_n19

    use_backend node21 if for_n21
    use_backend node22 if for_n22
    use_backend node23 if for_n23
    use_backend node24 if for_n24
    use_backend node25 if for_n25
    use_backend node26 if for_n26
    use_backend node27 if for_n27
    use_backend node28 if for_n28
    use_backend node29 if for_n29
    use_backend wl if for_pe
    use_backend mis if for_mis

backend wl
    option httpchk /pe/oks.jsp
    server web11 10.16.20.11:8080 weight 14 check error-limit 10 on-error
mark-down
    server web12 10.16.20.12:8080 weight 14 check error-limit 10 on-error
mark-down
    server web13 10.16.20.13:8080 weight 14 check error-limit 10 on-error
mark-down
    server web17 10.16.20.17:8080 weight 14 check error-limit 10 on-error
mark-down
    server web18 10.16.20.18:8080 weight 14 check error-limit 10 on-error
mark-down

    server web21 10.16.30.11:8080 backup weight 14 check error-limit 5
on-error mark-down
    server web22 10.16.30.12:8080 backup weight 14 check error-limit 5
on-error mark-down
    server web23 10.16.30.13:8080 backup weight 14 check error-limit 5
on-error mark-down
    server web24 10.16.30.14:8080 backup weight 14 check error-limit 5
on-error mark-down
    server web25 10.16.30.15:8080 backup weight 14 check error-limit 5
on-error mark-down
    server web26 10.16.30.16:8080 backup weight 14 check error-limit 5
on-error mark-down

backend static
    option httpchk GET /index.html
    server web15 10.16.20.15:88 check error-limit 5 on-error mark-down
    server web11 10.16.20.11:88 backup check error-limit 5 on-error
mark-down
    server web12 10.16.20.12:88 backup check error-limit 5 on-error
mark-down
    server web13 10.16.20.13:88 backup check error-limit 5 on-error
mark-down
    server web21 10.16.30.11:88 backup check error-limit 2 on-error
mark-down
    server web22 10.16.30.12:88 backup check error-limit 2 on-error
mark-down
    server web23 10.16.30.13:88 backup check error-limit 2 on-error
mark-down

backend mis
    no option allbackups
    option httpchk /mispot/login.htm
    server jpweb15 10.16.20.15:8080 check error-limit 10 on-error mark-down
    server jpweb04 10.16.43.14:8080 backup check error-limit 10 on-error
mark-down

backend node1
    option httpchk /pe/oks.jsp
    server node1 10.16.43.11:8080 check error-limit 20 on-error mark-down
backend node2
    option httpchk /pe/oks.jsp
    server node2 10.16.43.12:8080 check error-limit 20 on-error mark-down
backend node3
    option httpchk /pe/oks.jsp
    server node3 10.16.43.13:8080 check error-limit 20 on-error mark-down
backend node4
    option httpchk /pe/oks.jsp
    server node4 10.16.43.14:8080 check error-limit 20 on-error mark-down
backend node5
    option httpchk /pe/oks.jsp
    server node5 10.16.43.15:8080 check error-limit 20 on-error mark-down
backend node6
    option httpchk /pe/oks.jsp
    server node6 10.16.43.16:8080 check error-limit 20 on-error mark-down
backend node7
    option httpchk /pe/oks.jsp
    server node7 10.16.43.17:8080 check error-limit 20 on-error mark-down
backend node8
    option httpchk /pe/oks.jsp
    server node8 10.16.43.18:8080 check error-limit 20 on-error mark-down
backend node9
    option httpchk /pe/oks.jsp
    server node9 10.16.43.19:8080 check error-limit 20 on-error mark-down
backend node11
    option httpchk /pe/oks.jsp
    server node11 10.16.20.11:8080 check error-limit 20 on-error mark-down
backend node12
    option httpchk /pe/oks.jsp
    server node12 10.16.20.12:8080 check error-limit 20 on-error mark-down
backend node13
    option httpchk /pe/oks.jsp
    server node13 10.16.20.13:8080 check error-limit 20 on-error mark-down
backend node14
    option httpchk /pe/oks.jsp
    server node14 10.16.20.14:8080 check error-limit 20 on-error mark-down
backend node15
    option httpchk /pe/oks.jsp
    server node15 10.16.20.15:8080 check error-limit 20 on-error mark-down
backend node16
    option httpchk /pe/oks.jsp
    server node16 10.16.20.16:8080 check error-limit 20 on-error mark-down
backend node17
    option httpchk /pe/oks.jsp
    server node13 10.16.20.17:8080 check error-limit 20 on-error mark-down
backend node18
    option httpchk /pe/oks.jsp
    server node18 10.16.20.18:8080 check error-limit 20 on-error mark-down
backend node19
    option httpchk /pe/oks.jsp
    server node19 10.16.20.19:8080 check error-limit 20 on-error mark-down
backend node21
    option httpchk /pe/oks.jsp
    server node21 10.16.30.11:8080 check error-limit 20 on-error mark-down
backend node22
    option httpchk /pe/oks.jsp
    server node22 10.16.30.12:8080 check error-limit 20 on-error mark-down
backend node23
    option httpchk /pe/oks.jsp
    server node23 10.16.30.13:8080 check error-limit 20 on-error mark-down
backend node24
    option httpchk /pe/oks.jsp
    server node24 10.16.30.14:8080 check error-limit 20 on-error mark-down
backend node25
    option httpchk /pe/oks.jsp
    server node25 10.16.30.15:8080 check error-limit 20 on-error mark-down
backend node26
    option httpchk /pe/oks.jsp
    server node26 10.16.30.16:8080 check error-limit 20 on-error mark-down
backend node27
    option httpchk /pe/oks.jsp
    server node27 10.16.30.17:8080 check error-limit 20 on-error mark-down
backend node28
    option httpchk /pe/oks.jsp
    server node28 10.16.30.18:8080 check error-limit 20 on-error mark-down
backend node29
    option httpchk /pe/oks.jsp
    server node29 10.16.30.19:8080 check error-limit 20 on-error mark-down

Reply via email to