Hello!

My name is Zack, and I have been in the middle of an on going HAProxy issue 
that has me scratching my head.

Here is the setup:

Our setup is hosted by amazon, and our HAProxy (1.6.3) boxes are in each region 
in 3 regions. We have 2 HAProxy boxes per region for a total of 6 proxy boxes.

These boxes are routed information through route 53. Their entire job is to 
forward data from one of our clients to our database backend. It handles this 
absolutely fine, except between the hours of 7pm PST and 7am PST. During these 
hours, our route53 health checks time out thus causing the traffic to switch to 
the other HAProxy box inside of the same region.

During the other 12 hours of the day, we receive 0 alerts from our health 
checks.

I have noticed that we get a series of SSL handshake failures (though this 
happens throughout the entire day) that causes the server to hang for a second, 
thus causing the health checks to fail. During the day our SSL failures do not 
cause the server to hang long enough to go fail the checks, they only fail at 
night. I have attached my HAProxy config hoping that you guys have an answer 
for me. Lemme know if you need any more info.

I have done a few tcpdump captures during the SSL handshake failures (not at 
night during it failing, but during the day when it still gets the SSL 
handshake failures, but doesn’t fail the health check) and it seems there is a 
d/c and a reconnect during the handshake.

Here is my config, I will be running a tcpdump tonight to capture the packets 
during the failure and will attach it if you guys need more info.

 #---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2

    pidfile     /var/run/haproxy.pid
    maxconn     30000
    user        haproxy
    group       haproxy
    daemon
    ssl-default-bind-options no-sslv3 no-tls-tickets
    tune.ssl.default-dh-param 2048

 # turn on stats unix socket
#    stats socket /var/lib/haproxy/stats`

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    retries                 3
    timeout http-request    5s
    timeout queue           1m
    timeout connect         31s
    timeout client          31s
    timeout server          31s
    maxconn                 15000

# Stats
    stats                            enable
    stats uri                       /haproxy?stats
    stats realm                  Strictly\ Private
    stats auth                    $StatsUser:$StatsPass

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------

frontend shared_incoming
    maxconn 15000
    timeout http-request 5s

#    Bind ports of incoming traffic
    bind *:1025 accept-proxy # http
    bind *:1026 accept-proxy ssl crt /path/to/default/ssl/cert.pem ssl crt 
/path/to/cert/folder/ # https
    bind *:1027 # Health checking port
    acl gs_texthtml url_reg \/gstext\.html    ## allow gs to do meta tag 
verififcation
             acl gs_user_agent hdr_sub(User-Agent) -i globalsign    ## allow gs 
to do meta tag verififcation

#      Add headers
    http-request set-header $Proxy-Header-Ip %[src]
    http-request set-header $Proxy-Header-Proto http if !{ ssl_fc }
    http-request set-header $Proxy-Header-Proto https if { ssl_fc }

#     Route traffic based on domain
    use_backend gs_verify if gs_texthtml or gs_user_agent    ## allow gs meta 
tag verification
    use_backend 
%[req.hdr(host),lower,map_dom(/path/to/map/file.map,unknown_domain)]

#     Drop unrecognized traffic
    default_backend unknown_domain

#---------------------------------------------------------------------
# Backends
#---------------------------------------------------------------------

backend server0  ## added to allow gs ssl meta tag verification
    reqrep ^GET\ /.*\ (HTTP/.*)    GET\ /GlobalSignVerification\ \1
    server server0_http server0.domain.com:80/GlobalSignVerification/

backend server1
    server server1_http server1.domain.net:80

backend server2
    server server2_http server2.domain.net:80

backend server3
    server server3_http server3.domain.net:80

backend server4
    server server4_http server4.domain.net:80

backend server5
    server server5_http server5.domain.net:80

backend server6
    server server6_http server6.domain.net:80

backend server7
    server server7_http server7.domain.net:80

backend server8
    server server8_http server8.domain.net:80

backend server9
    server server9_http server9.domain.net:80

backend unknown_domain
    timeout connect 4s
    timeout server 4s
    errorfile 503 /etc/haproxy-shared/errors/404.html

Attachment: haproxy.cfg
Description: haproxy.cfg

Reply via email to