Назад | Перейти на главную страницу

Преобразователи Haproxy не обновляют DNS при неудачной проверке работоспособности

Использование 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, никаких новых функций не добавляется - единственными выпусками должны быть исправления ошибок и исправления безопасности - поэтому рекомендуется обновить до последней версии в этой серии.