如何设置 DNS 以便服务器以受控方式获取流量?

如何设置 DNS 以便服务器以受控方式获取流量?

假设我有两个 Web 服务器,A 和 B。我想要设置 DNS,以便 83% 的时间首先返回 A 的 IP,17% 的时间首先返回 B 的 IP。

是否有企业级 DNS 服务可以帮助解决这个问题?

编辑:我知道还有其他方法可以实现 DNS 功能,但说实话,到目前为止,DNS 似乎是最糟糕的选择。除了使用 DNS,我还可以采用负载平衡器(许多人都建议如此),或者更适合我的用例的 alt-svc 标头。

答案1

DNS 协议无法像 MX 记录那样在 A 记录上使用。通过 DNS 进行加权轮询并不是最佳实践,您应该改用负载均衡器

但如果你真的想要:

它似乎:

这个答案也许能帮到你:https://serverfault.com/a/358256/214665

答案2

简短回答:是的,但是您想要的是负载平衡,但您不会在 DNS 级别执行此操作。

它的工作原理是,你将 DNS 指向一个 IP,并在此 IP 下运行负载平衡服务,例如哈普罗西。您可以在那里设置如下内容:

Listen 192.168.0.1:80
Balance source
Server servera 192.168.0.2 weight 83
Server serverb 192.168.0.3 weight 17

这样,83%的流量被路由到192.168.0.2,17%的流量被路由到192.168.0.3。

您没有指定要平衡的服务。如果是 Web 服务器,Apache 的 mod_proxy 提供负载平衡功能: https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html

编辑:正如补充:你有一个 DNS A 记录指向多个 IP,但它不支持权重,仅支持循环。

答案3

  1. 像这样设置多个 A 记录:

    websrv  IN A 10.10.10.1
            IN A 10.10.10.1
            IN A 10.10.10.1
            IN A 10.10.10.2
    
  2. 在两个 DNS 服务器(一个记录为 10.10.10.1,另一个记录为 10.10.10.2)前设置具有适当平衡规则的负载平衡器。

  3. 将 A 记录指向具有适当平衡规则的负载均衡器。
  4. 我对这个软件一无所知,只是在谷歌上搜索了一下: http://simpledns.com/plugin-wrrobin

答案4

喜欢布罗科据说,它不应该在 DNS 级别执行。就像 haproxy 一样,您可以使用 nginx 进行负载平衡,如果您需要企业支持,则可以使用 nginx plus。

https://www.nginx.com/blog/load-balancing-dns-traffic-nginx-plus/

https://www.nginx.com/resources/admin-guide/load-balancer/#weight

基本配置如下:

stream {
    upstream dns_servers {
        server 192.168.136.130:53 weight=83;
        server 192.168.136.131:53 weight=17;
    }


    server {
        listen 53  udp;
        listen 53; #tcp
        proxy_pass dns_servers;
        error_log  /var/log/nginx/dns.log info;
    }
}

因此,83%的请求被发送到192.168.136.130,17%被发送到192.168.136.131

相关内容