Haproxy Resolvers Section + Amazon ELB
I'm currently using Haproxy-1.6-dev2 in front of an amazon ELB, and I'm running into DNS resolution issues. I'm working with the dev version of haproxy because of the new resolvers
feature, but haven't been able to have Haproxy trigger a change in it's internal ip address listing for a server without restarting the haproxy process. Amazon updates the IPs of its ELBs and Haproxy continues using the old IP addresses without updating. A simplified config file is below.
global
log 127.0.0.1 local0
stats socket /var/run/haproxy.sock
defaults
log global
mode http
option httpchk GET /
option log-health-checks
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
resolvers dns
nameserver public-0 xx.xx.xx.xx:53
hold valid 1s
frontend http
bind *:8000
default_backend site-backend
backend site-backend
balance leastconn
server site sub.example.com:80 resolvers dns check inter 1000
I create a temporary A record in AWS Route53, and the health check fails because the A record points to an invalid location.
I then update the A record to point to a valid location and the health check continues to fail. A simple restart of haproxy means the health checks start passing.
I also pinged the stats socket to get a bit more info:
nameserver public-0:
sent: 153
valid: 0
update: 0
cname: 0
cname_error: 0
any_err: 0
nx: 0
timeout: 0
refused: 0
other: 0
invalid: 0
too_big: 0
outdated: 51
The haproxy documentation did not offer much help as to what "outdated" might mean.
Please run HAProxy in debug mode ('debug' statement in global section or '-d' when running haproxy deamon) and report here output of stdout and stderr.
In the mean time, please take a tcpdump of the DNS traffic of the box and send it to the dev who did the DNS work in HAProxy: [email protected].
Baptiste
It seems to be a matter of an 1ms default timeout instead of a 1s default timeout. Setting timeout retry 1s
should resolve the issue for anyone else with this problem on Haproxy-1.6-dev2. I imagine this will be resolved in the official 1.6 release.