DNS 循环:多个名称服务器 VS 多个 A 记录?

DNS 循环:多个名称服务器 VS 多个 A 记录?

注意:这是我之前关于 DNS 故障转移的问题

目标:如果一个服务器立即瘫痪,则让客户端的 Web 浏览器选择下一个可用的服务器。

我曾在某处读到过,多个 A 记录(虽然不是最好的解决方案)是 HTTP/基于浏览器的应用程序唯一可能的“即时故障转移”解决方案。

以下是场景/示例:

我有两台服务器 A 和 B,它们包含完全相同的内容。服务器 A 的 IP 地址是 1.1.1.1 和 1.1.1.2 服务器 B 的 IP 地址是 2.2.2.1 和 2.2.2.2 我在 GoDaddy 注册了一个域名。如果我想使用 DNS 轮询,哪种方法最好?

方法 1:我是否像这样在 GoDaddy 设置我的名称服务器条目?

  1. ns1.serverA.com
  2. ns2.serverA.com
  3. ns1.serverB.com
  4. ns2.serverB.com

方法 2:或者我将 GoDaddy 作为我的名称服务器并添加 A 记录,如下所示:

  1. 答@1.1.1.1
  2. 答:@1.1.1.2
  3. 答:@2.2.2.1
  4. 答:@2.2.2.2

我的问题是,DNS 循环是否可以与这两种方法一起使用?如果不行,那么实现目标的最佳方法是什么?

答案1

目标:如果一个服务器立即瘫痪,则让客户端的 Web 浏览器选择下一个可用的服务器。

这通常是通过引入第三台服务器(称为负载平衡器)来实现的。负载平衡器:

  1. 将流量导向 2 个 Web 服务器。
  2. 监控 2 个 Web 服务器的运行状况。
  3. 如果一个 Web 服务器发生故障,则将流量切换到剩余的 Web 服务器。

通过使用 2 个负载均衡器 (LB),即总共至少 4 台服务器(2 个 LB、2 个 Web 应用服务器),负载均衡器本身可实现高可用性。但是,许多小型商店只使用一个负载均衡器,因为它们的系统相对简单,并且通常非常可靠。

方法 1:我是否应该像这样在 GoDaddy 设置我的域名服务器条目?1. ns1.serverA.com 2. ns2.serverA.com 3. ns1.serverB.com 4. ns2.serverB.com

绝对不是。名称服务器仅用于解析 IP 地址网络服务器。将域名的名称服务器保留为注册商/DNS 主机 (GoDaddy) 的默认值。

方法 2:或者我将 GoDaddy 作为我的名称服务器并添加如下 A 记录:1. A @ 1.1.1.1 2. A @ 1.1.1.2 3. A @ 2.2.2.1 4. A @ 2.2.2.2

当 DNS 循环 (DNS RR) 用作高端故障转移/高可用性设置的一部分时,IP 地址为 DNS RR指着具有高可用性。换句话说,每个 IP 地址都是由 2 个设备处理的虚拟 IP。作为纯粹的高可用性解决方案,没有高可用性服务器 IP,DNS RR效果不太好. 基本问题是有些客户可能继续使用“无效”IP 地址,您依赖客户端做“正确的事情”,但并非所有客户端都这样做。使用真正的 HTTP 负载平衡器更好。

尽管如此,许多小型网站使用 DNS RR 来仅分配负载并取得良好的结果。我想这全取决于你的期望。

在 DNS RR 情况下,每个物理服务器拥有 2 个 IP 地址不会给您带来任何好处,只会增加复杂性。因此,只需为每个服务器使用一个 IP,如下所示:

A @ 1.1.1.1
A @ 2.2.2.1

答案2

您通常会选择“A 记录”方法。您也可以在 A 记录上控制 TTL,而一些 ICANN 注册商可能会在 NS 记录上忽略这些 TTL。

循环 DNS 很棒,但要注意某些浏览器(例如较旧的 IE)可能会将记录缓存太长时间,因此如果您的某个 Web 服务器发生故障,并且您将其 IP 从已发布的 DNS 中删除,那么您可能仍会有一些访问者访问该 IP(尽管百分比很小,但足以引起一两起投诉)。但它非常适合负载平衡。

答案3

您所描述的方法 1 会破坏 DNS 并且不提供故障转移。DNS 记录还应具有权威来源 - 不能有两个相冲突的权威来源(但可以有同一 conf 的多个副本)。

答案4

我认为您的建议不会完全实现您所希望做的事情。

您记录的 A 记录方法将提供全部这些 IP 地址适合从中获取你的内容,因此用户的网络浏览器可以自由使用任何其中。如果所选的特定服务器确实宕机,那么用户的浏览器可能选择尝试不同的 IP 地址,但它不会接近立即的

我也对为单个服务器列出多个 IP 持怀疑态度。假设服务器 A 宕机;如果我的浏览器尝试连接到1.1.1.1,然后(在超时后)尝试连接到,1.1.1.2那么我将等待更长时间才能收到内容。

如果你真的想要在 Web 服务器之间实现可靠的快速故障转移,你可能需要研究类似HAProxy

编辑:具体来说,您需要一对运行 HAProxy 的盒子,它们之间共享一个“浮动”IP 地址。然后运行类似心跳在这些盒子上,这样如果其中一个发生故障,另一个将检测到并自动接管“浮动”IP 地址。最后,您将一个 A 记录指向浮动 IP(它始终指向一个或另一个 HAProxy 实例)。

你可能会发现Stack Overflow 网络配置有趣/信息丰富。

相关内容