HAProxy 配置文件中的主机名

Nai*_*aba 10 load-balancing hosts hostname haproxy

我的 haproxy.cfg 文件有两个使用主机名的后端服务器:

server ops-ca-revealv2e-prod-1 ops-ca-revealv2e-prod-1:443 cookie ops-ca-revealv2e-prod-1 ssl weight 1 maxconn 512 check

server ops-ca-revealv2e-prod-2 ops-ca-revealv2e-prod-2:443 cookie ops-ca-revealv2e-prod-2 ssl weight 1 maxconn 512 check
Run Code Online (Sandbox Code Playgroud)

这些主机名是 Amazon OpsWorks 的一部分,并且会在实例启动或关闭时自动注入 /etc/hosts。如果我在其中一个实例关闭时尝试重新启动 HAProxy,则会收到错误消息:

[ALERT] 362/225440 (27202) : parsing [/opt/haproxy-ssl/haproxy.cfg:42] : 'server ops-ca-revealv2e-prod-2' : invalid address: 'ops-ca-revealv2e-prod-2' in 'ops-ca-revealv2e-prod-2:443'
[ALERT] 362/225440 (27202) : Error(s) found in configuration file : /opt/haproxy-ssl/haproxy.cfg
[ALERT] 362/225440 (27202) : Fatal errors found in configuration.
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 HAProxy 检查主机名是否有效?如果有效,则使用它,如果无效,则忽略它。

Bha*_*rat 10

在 haproxy >= 1.7 中,您应该可以使用该init-addr选项,指定 none 以防止在启动时进行 DNS 解析。

文档

init-addr {last | libc | none | <ip>},[...]*

如果服务器使用 FQDN,请指示在启动时解析服务器地址的顺序。通过依次应用逗号分隔列表中提到的每个方法来尝试解析地址。使用第一种成功的方法。如果在没有找到工作方法的情况下到达列表的末尾,则会引发错误。方法“last”建议选择出现在状态文件中的地址(参见“服务器状态文件”)。方法“libc”使用 libc 的内部解析器(gethostbyname() 或 getaddrinfo(),具体取决于操作系统和构建选项)。方法“none”明确表示服务器应该在没有任何有效 IP 地址的情况下启动。在启动时忽略一些 DNS 问题会很有用,等待情况稍后解决。最后,可以提供 IP 地址(IPv4 或 IPv6)。

所以你的配置行可能是:

server s1 myhostname init-addr none