假设我有两个 Web 服务器,A 和 B。我想要设置 DNS,以便 83% 的时间首先返回 A 的 IP,17% 的时间首先返回 B 的 IP。
是否有企业级 DNS 服务可以帮助解决这个问题?
编辑:我知道还有其他方法可以实现 DNS 功能,但说实话,到目前为止,DNS 似乎是最糟糕的选择。除了使用 DNS,我还可以采用负载平衡器(许多人都建议如此),或者更适合我的用例的 alt-svc 标头。
答案1
DNS 协议无法像 MX 记录那样在 A 记录上使用。通过 DNS 进行加权轮询并不是最佳实践,您应该改用负载均衡器
但如果你真的想要:
它似乎:
dyn.com 通过“托管 DNS -> 流量管理”提供这种可能性:https://help.dyn.com/traffic-management-address-pools/
AWS Route 53:https://aws.amazon.com/route53/faqs/?nc1=h_ls#does_route53_support_wrr
这个答案也许能帮到你: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
像这样设置多个 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
在两个 DNS 服务器(一个记录为 10.10.10.1,另一个记录为 10.10.10.2)前设置具有适当平衡规则的负载平衡器。
- 将 A 记录指向具有适当平衡规则的负载均衡器。
- 我对这个软件一无所知,只是在谷歌上搜索了一下: 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