使用 HAPROXY 实现 DNS 负载平衡

使用 HAPROXY 实现 DNS 负载平衡

我有一个包含 2 个 DNS 服务器(主服务器和从服务器)的网络,但我不希望客户端直接向它们询问。因此,在同一个网络中,我有一台安装了 haproxy 1.7.5 的 debian 机器。我希望客户端在其/etc/resolv.conf记录代理的 IP。我希望代理在两台服务器之间平衡负载。

IP DNS master = 10.10.24.2
IP DNS slave  = 10.10.24.4
IP PROXY      = 10.10.24.5

在文件中/etc/haproxy/haproxy.cfg最后我补充道:

resolvers mydns
    nameservers dns1 10.10.24.2:53
    nameservers dns2 10.10.24.4:53

然后我启动haproxy:

haproxy -f /etc/haproxy/haproxy.cfg

如果我在代理中执行:

netstat -tuna

我得到了以下两条新线:

udp    0    0    10.10.24.5:35000    10.10.24.2:53    ESTABLISHED
udp    0    0    10.10.24.5:35000    10.10.24.4:53    ESTABLISHED

但我期望收到这样的信息:

udp    0    0    10.10.24.5:53    10.10.24.2:53    ESTABLISHED
udp    0    0    10.10.24.5:53    10.10.24.4:53    ESTABLISHED

显然,从客户端到代理的 DNS 请求不起作用……

是否可以使用 haproxy 实现这一点?

答案1

您不需要对 DNS 服务器进行负载平衡。在客户端配置两个 DNS 服务器就足够了。

如果您没有另一台机器充当负载均衡器,那么您将为 DNS 服务创建单点故障。

这是一篇类似的帖子服务器故障

答案2

看起来完全没问题。IP 连接的传出部分(从10.10.24.510.10.24.2)通常使用随机端口(或半随机端口),它不需要与目标机器具有相同的端口号。

更重要的是你还有这样一行:

udp        0      0 10.10.24.5:53      0.0.0.0:*               LISTEN

这表明 HAProxy 确实在 UDP 端口 53 上监听 DNS 请求,并准备将其转发到后续服务器。

相关内容