Использование haproxy 1.6.1 (великолепное программное обеспечение!) С (частичным) файлом conf ниже. Проблема возникает, когда внутренний сервер выключается AWS (спотовый экземпляр) и заменяется. После того, как новый экземпляр запущен и работает, на странице статистики по-прежнему отображается ошибка проверки работоспособности. tcpdump показывает успешные исходящие запросы на 172.16.0.23 для zos-e-e01.mycompany.com. Похоже, что haproxy запрашивает IP-адрес, получает правильный ответ, но не обновляет текущую конфигурацию. Повторная загрузка haproxy решает проблему.
resolvers aws
nameserver aws1 172.16.0.23:53
resolve_retries 3
timeout retry 1s
hold valid 30s
backend zos
cookie ZOS insert indirect nocache
option httpchk GET /robots.txt HTTP/1.1\r\nHost:\ zos.mycompany.com
balance leastconn
no log
option tcp-smart-connect
server zos-e-c01 zos-e-c01.mycompany.com:80 cookie balancer.zos-e-c01 check port 80 inter 2000 rise 2 fall 3 maxconn 60 check resolvers aws
server zos-e-d01 zos-e-d01.mycompany.com:80 cookie balancer.zos-e-d01 check port 80 inter 2000 rise 2 fall 3 maxconn 60 check resolvers aws
server zos-e-e01 zos-e-e01.mycompany.com:80 cookie balancer.zos-e-e01 check port 80 inter 2000 rise 2 fall 3 maxconn 60 check resolvers aws
После 1.6.1, но до выпуска версии 1.6.5, которая является текущим выпуском на момент написания этой статьи, в HAProxy внесено множество исправлений асинхронного DNS.
Мне не удалось найти ни одного исправления в журнале изменений, которое, очевидно, объясняет именно то условие, с которым вы столкнулись, но если я правильно помню, разрешение имени при запуске выполняется синхронно, тогда как во время выполнения оно асинхронно, по двум разным путям кода - так что проблема с гораздо более новым асинхронным кодом не повлияла бы на разрешение при запуске.
HAProxy 1.6 все еще находился в процессе становления по-настоящему стабильным до версии 1.6.5. В серию 1.6 вошло множество новых функций, и, прочитав список рассылки, обнаружился ряд проблем, которые никогда не возникали во время разработки и тестирования. Теперь, когда выпущен 1.6, никаких новых функций не добавляется - единственными выпусками должны быть исправления ошибок и исправления безопасности - поэтому рекомендуется обновить до последней версии в этой серии.