负载均衡DNS请求

我想知道是否有可能只是使用DNSlogging来“负载均衡”stream量到我的域名服务器。

我想每个名称服务器有多个Alogging,就像这样:

IN NS ns1.example.com IN NS ns2.example.com ns1 IN A 10.0.0.1 ns1 IN A 10.0.0.2 ns2 IN A 10.0.0.1 ns2 IN A 10.0.0.2 

这个想法是,请求将被均匀地路由到两台服务器,即使parsing器总是selectns1,或者如果一个中间DNS高速caching导致麻烦。

我用MX这样的东西,它的作品,但我不知道它是否也适用于NSslogging。 我真的不明白为什么不这样做,但我希望你的意见。

谢谢。

编辑

要清楚的是,我并不是在寻找一个完美的负载均衡解决scheme,而且我知道如果第一个客户端出现故障,客户端将不得不重试第二个NS。

我只是想在每个服务器上重新分配一个相同的带宽,并不是因为负载过重,而是因为我在每台服务器上都有一个stream量限制,所以我想避免90%的请求到达ns1,rest到ns2。

DNS已经负载均衡

DNS(在大多数情况下)通过两种机制之一固有地负载平衡。

NSlogging按随机顺序返回

大多数DNS服务器将以随机顺序返回NS查询。

请注意下面的两个查询。 看看后续的查询如何改变名称服务器的顺序。

 dig @8.8.8.8 NS serverfault.com ;; ANSWER SECTION: serverfault.com. 300 IN NS ns1.serverfault.com. serverfault.com. 300 IN NS ns3.serverfault.com. serverfault.com. 300 IN NS ns4.serverfault.com. serverfault.com. 300 IN NS ns2.serverfault.com. ;; ANSWER SECTION: serverfault.com. 300 IN NS ns2.serverfault.com. serverfault.com. 300 IN NS ns3.serverfault.com. serverfault.com. 300 IN NS ns1.serverfault.com. serverfault.com. 300 IN NS ns4.serverfault.com. 

DNSparsing器行为

大多数DNSparsing器将select列表中的第一个名称服务器并对其进行查询。 有些人会随机select一个名字服务器。

在任何情况下,如果您的DNS服务器随机化您的NSlogging,那么stream量应该是平衡的。

负载平衡的DNS

在你的情况下,你指向NS1 / NS2到相同的IP地址。 这是没有必要的。 但是,如果你有。

 ns1.domain.com 10.0.0.1 ns1.domain.com 10.0.0.2 ns2.domain.com 10.0.0.3 ns2.domain.com 10.0.0.4 

你不会在两台服务器上拆分NS1的stream量。 这将在两台服务器上传播对NS1的请求。 在DNS提供商开始使用任播方法之前,这是一种stream行的技术。

(请注意,IPv6有一些变化。
http://blogs.technet.com/b/networking/archive/2009/04/17/dns-round-robin-and-destination-ip-address-selection.aspx

一个Alogging到许多IP地址的概念被称为“循环DNS”。 它已经存在很长时间了。

这不是一个平均分配stream量的保证方法,还有很多其他的方式来configuration负载平衡或高可用性或者两者的DNS,但是为了简单起见,你肯定不能一箭三雕。

但是,据我了解解决scheme,客户将永远select最快的响应NS。 除非你能够在逻辑上或地理上把每个NS的速度提高到50%,否则一个NS会比另一个更受欢迎。

我会避免它,因为没有办法表明一个服务器是打开或closures,所以如果10.0.0.1是closures的,这意味着约50%的请求发送到您的服务器将失败的第一次,需要重试,这将负面影响任何使用DNS。 BillThor和suprjami已经指出,响应速度更快的服务器会带来更多的stream量,这很可能意味着您需要手动调整以平衡。

适当的负载平衡考虑到了工作机器的状态,他们正在做的工作量,并且通常可以做出透明的改变来调整情况而不需要你的干预。

DNS服务器可以接收(基本上)两种types的DNSstream量。 从技术上讲,它是recursion非recursion的 ,但更容易想到的是客户端其他服务器 。 客户可能正在查找互联网上的任何东西,期待您的DNS服务器充当服务器,并找出他们的信息。 其他服务器只会向您的DNS服务器询问您被列为授权的域名。

对于其他服务器 ,您只需要为您的域列出多个NSlogging(包括您的域名和DNS注册商),而互联网上的其他服务器将自动随机select要使用的服务器。 他们甚至可能更喜欢最快或最近的服务器。 当然,请确保这些服务器实际上拥有从主服务器正确复制的区域的权威副本。 我不确定NSlogging背后的多个Alogging是否可以工作,但是只要列出4个NSlogging就可以得到你想要的结果。

对于客户端 ,他们不使用DNS来查找使用哪个DNS服务器。 这是不可能的,因为它会引入循环依赖(DNS查找取决于DNS查找)。 客户端configuration通常非常简单,只需按每个DNS查询的相同顺序尝试一个(短)IP列表即可。 DNS服务器的域名不被客户端使用。 如果您想为客户端负载均衡DNS,则需要使用某种真正的负载均衡器。 确保负载均衡UDP和TCP,因为这两者都是DNS可靠运行所必需的。

DNSstream量已经被负载平衡(和caching)。 添加额外的Alogging将增加所有名称服务器的负载,因为它们将需要提供额外的地址。

如果其中一个名称服务器过载,而另一个不查看服务器configuration或networkingconfiguration。 如果一台服务器无法访问,stream量将转移到另一台服务器造成负载不平衡。

同时检查您的TTL值,以确保服务器可以caching您的数据一段合理的时间。 在大多数情况下,您的数据应该可以caching数小时或数天。 如果地址正在改变,减lessTTL并承担负载。

同时检查以确保您的服务器不能用于DNS放大。 来自互联网,它只应回应它的权威性的查询。 这可能会很快使用您的带宽,而不提供预期的服务。

编辑:如果你想减lessstream量到你的服务器,在不同的networking上添加辅助。 有几个组织提供辅助DNS服务。 stream量使用循环调度在更多的服务器上传播。