我使用 HaProxy 将流量转发到具有 DNS 名称而不是网络地址的后端服务器:
backend default-backend
server external somedomain.com:80
问题是,在某些情况下,它可能无法解决。在这种情况下,HaProxy 说:
服务器 default-backend/external 即将关闭以进行维护(DNS NX 状态)。剩余 0 个活动服务器和 0 个备份服务器。0 个活动会话,0 个重新排队,0 个剩余在队列中。后端 default-backend 没有可用的服务器!
我希望 HaProxy 再次检查 DNS 解析,并在目标 DNS 名称再次可解析时开始转发流量。问题是我必须声明resolvers
部分和至少一个nameserver
可以解析此类地址的部分,如下所示:
resolvers rslvr
nameserver dns0 8.8.8.8:53
如果我不想声明任何解析器怎么办?我只希望 HaProxy 以与启动时相同的方式检查 DNS 解析。可以吗?
nameserver
如果我不使用解析器,后端就会停止工作,并且不会检查此域是否再次可用。当我在resolvers
部分中没有任何解析器时,也会发生同样的事情。
有没有办法省略明确nameserver
声明或者在启动时使用 HaProxy 使用的某些默认解析器?
答案1
haproxy 1.9 版为解析器部分引入了一个新参数,从而无需手动列出名称服务器。
parse-resolv-conf
看他们的文档了解更多信息,但本质上这可以让你替换
resolvers mydns
nameserver dns1 10.0.0.1:53
nameserver dns2 10.0.0.2:53
hold valid 10s
和
resolvers mydns
parse-resolv-conf
hold valid 10s
假设您的 resolv.conf(当您没有解析器部分时由 haproxy 读取)已配置 10.0.0.1:53 和 10.0.0.2:53。