双数据中心场景中的 DNS 故障转移

双数据中心场景中的 DNS 故障转移

我正在尝试实施一种低成本的网站高可用性解决方案。我正在寻找以下场景的缺点:

我有两台服务器,配置、内容、mysql 复制(双主)。它们位于不同的数据中心 - 我们称它们为服务器 A 和服务器 B。用户使用服务器 A - 服务器 B 更像是备份。现在,我想使用 DNS 故障转移,在服务器 A 发生故障时将用户从服务器 A 切换到服务器 B。

我的想法是在服务器 A 和服务器 B 上设置 DNS 服务器 (bind/powerdns) - 我们将它们称为 ns1.website.com 和 ns2.website.com(假设我拥有 website.com)。然后我将我的域配置为使用它们作为其名称服务器。两个 DNS 服务器都将返回服务器 A 的 IP 作为我的网站的 IP。如果服务器 A 发生故障,我可以(手动或从服务器 B 自动)更改服务器 B 的 DNS 配置,以返回服务器 B 的 IP 作为网站的 IP。当然,TTL 会很低,因为它应该处于 DNS 故障转移中。

我知道切换到服务器 B 可能需要一些时间(DNS ttl、检测服务器 A 故障的时间、服务器 B DNS 重新配置等),而且一小部分用户无论如何都不会使用服务器 B。我对此没意见。但这种方法还有哪些缺点呢?

另一种情况是,ns1.website.com 将返回 serverA IP 作为网站的 IP,而 ns2.website.com 将返回 serverB IP 作为网站的 IP。但据我所知,客户端并不总是使用主名称服务器,有时会使用辅助名称服务器。因此,一小部分用户会使用 serverB 而不是 serverA,这并不完全符合我的要求。您能否确认 DNS 客户端的行为方式是那样,您能否说出有多少百分比的客户端可能会使用 serverB 而不是 serverA(统计上)?这种方法也有缺点,即当 serverA 恢复时,它将自动用作网站的主服务器,这也是一种糟糕的情况(冷缓存、mysql 复制在此期间可能会失败等)。所以我只是将它添加为一种理论上的替代方案。

我曾经考虑过使用一些专业的 DNS 故障转移公司,但是他们会根据 DNS 请求次数收费,而且费用非常高(为什么?)

答案1

“故障转移”不是本机 DNS 服务器功能;它必须始终在另一层实现。

也就是说,确实有两种方法可以执行它:使用任播的地理冗余和本地性(即返回的 IP 取决于请求来自哪里,或其他标准),或者对 DNS 数据进行临时更改。

由于您概述的原因,后者永远不会像前者那么快。

也就是说,后者自己实现起来相当简单;您所需要的只是实现 ddns 更新的权威服务器。

检测故障,使用 nsupdate 更新名称服务器,并等待 TTL 到期。

相关内容