注意:这是我之前关于 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 设置我的名称服务器条目?
- ns1.serverA.com
- ns2.serverA.com
- ns1.serverB.com
- ns2.serverB.com
方法 2:或者我将 GoDaddy 作为我的名称服务器并添加 A 记录,如下所示:
- 答@1.1.1.1
- 答:@1.1.1.2
- 答:@2.2.2.1
- 答:@2.2.2.2
我的问题是,DNS 循环是否可以与这两种方法一起使用?如果不行,那么实现目标的最佳方法是什么?
答案1
目标:如果一个服务器立即瘫痪,则让客户端的 Web 浏览器选择下一个可用的服务器。
这通常是通过引入第三台服务器(称为负载平衡器)来实现的。负载平衡器:
- 将流量导向 2 个 Web 服务器。
- 监控 2 个 Web 服务器的运行状况。
- 如果一个 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 网络配置有趣/信息丰富。