使用DNS进行故障转移,使用多个A记录

时间:2011-03-16 00:24:32

标签: dns

最近我注意到,为主机名设置多个A记录不仅可以用于循环负载平衡,还可以用于自动故障转移。

所以我尝试了测试它:

  1. 我从我们的域
  2. 加载了一个页面
  3. 注意到我们的哪些服务器已提供此页面
  4. 关闭该主机上的网络服务器
  5. 重新加载页面
  6. 实际上,浏览器会自动尝试使用其他服务器来加载页面。这适用于Opera,Safari,IE和Firefox。只有Chrome无法尝试使用其他服务器。

    但是在离开该服务器几分钟并查看访问日志后,我发现对其他服务器的请求数量没有显着增加。由于3台服务器中有1台处于脱机状态,我原本预计其余2台服务器的访问量将大致增加50%,但我只看到了7-10%。这只能意味着基于DNS的故障转移对大多数浏览器/访问者都不起作用,这与我刚刚测试的内容完全相反。

    有没有人知道基于DNS的Web浏览器故障转移是什么?可能的原因是什么原因导致自动故障转移对我有用,但对我们的大多数访问者不起作用?

2 个答案:

答案 0 :(得分:15)

正在发生的事情是浏览器没有进行自动DNS故障转移。

如果您在域上有多个A记录,那么当您的名称服务器请求您输入浏览器的域的IP时,它将从SOA请求一个。它可以是任何A记录。然后它传递它。

有些名称服务器“聪明”足以请求新的A记录,如果它获得的那个不起作用而有些则不起作用。因此,如果您设置多个A记录,那么您将设置伪冗余故障转移,但仅适用于具有“智能”名称服务器的人员。剩下的就是他们获得IP的骰子,如果它工作那么好,如果没有,那么它将无法像在Chrome中那样加载。

如果您想专门测试这个,那么您可以在Windows中使用主机文件C:\Windows\system32\drivers\etc\hosts,在Linux中使用/etc/hosts来指定您想要使用哪个域来查看是否获得真实的IP故障转移 - 正如您在实际中遇到的那样,网络上的DNS服务器将根据其TTL缓存您的域名解析。因此,如果/当您遇到真正的失败时,该IP仍然需要解决,否则将被移植到另一个名称服务器。

答案 1 :(得分:3)

另一种可能的解释是,对于大多数公共网站而言,大部分流量来自机器人,而非来自浏览器。根据机器人的不同,在处理域的多个A记录时,它们可能不如浏览器那么聪明。

此外,一些机器人使用keep-alives来保持TCP连接打开和放大。通过同一连接发出多个HTTP请求。鉴于DNS查找仅在建立连接时完成,它们将至少在连接保持打开的情况下继续向旧IP地址发出请求。

如果上述说明有任何重量,您应该可以通过检查用户代理字符串在日志中看到它。