使用 haproxy 1.6.1(非常棒的软件!)和下面的(部分)conf 文件。当 AWS(现货实例)关闭并替换后端服务器时,就会出现问题。新实例启动并运行后,统计页面仍然显示运行状况检查失败。tcpdump 显示对 zos-e-e01.mycompany.com 的 172.16.0.23 的传出查询成功。看来 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
在 1.6.1 之后、1.6.5 版(即撰写本文时的当前版本)发布之前,HAProxy 中存在大量异步 DNS 修复。
我无法在变更日志中找到一个可以准确解释您所遇到的情况的修复程序,但如果我没记错的话,启动时的名称解析是同步完成的,而在运行时它是异步的,遵循两个不同的代码路径——因此,较新的异步代码的问题不会影响启动时的解析。
HAProxy 1.6 直到 1.6.5 才真正稳定下来。1.6 系列中引入了许多新功能,从邮件列表来看,现场遇到了许多在开发和测试期间从未出现过的问题。现在 1.6 已经发布,没有添加任何新功能 - 唯一的发布应该是错误修复和安全修复 - 因此建议升级到该系列中的最新版本。