使用两个不同数据中心的两台服务器进行简单的冗余设置?

使用两个不同数据中心的两台服务器进行简单的冗余设置?

问题范围

这个问题仅仅是为了将请求域的客户端发送example.com到两个可用服务器之一。从那里开始如何处理是另一个需要解决的问题,因此应该不是在答案中被提及。

可用工具

我可用的工具是两台专用服务器(server A和),分布在位于另一个物理位置的server B两个不同的数据中心(data center A和)。data center B纯属虚构的 IP 地址server A表示为a.a.a.a, 的 IP 地址server B表示为b.b.b.b。两台服务器都配有 Linux 发行版,这并不重要。

因为我想自己掌控一切,所以我不想使用任何第三方服务(托管 DNS、CDN 等)。因此这些是我唯一的工具。

目标

我所指望的灾难是,在我正确设置两台服务器一周后,一颗氢弹摧毁了两座数据中心之一。我希望我的域名example.com始终可用,尽管我不会为几秒钟甚至几分钟的停机时间而烦恼,因为服务器非常可靠,它们甚至可能不会在一年内崩溃超过一次。此外,一个简单的页面显示“我们正在忙于解决问题”,可以将这个可接受的停机时间延长到一个小时左右。

我的固定解决方案

我问这个问题已经有一段时间了,现在我有一个合理的冗余设置。由于它已关闭,我无法将其作为答案发布 :(

事实证明,两台服务器都具有相同的域名 DNS 记录example.com

# DNS records for both server A and server B
example.com. NS ns1a.example.com.
example.com. NS ns1b.example.com.
example.com. NS ns2a.example.com.
example.com. NS ns2b.example.com.
ns1a.example.com. A a.a.a.a
ns2a.example.com. A a.a.a.a
ns1b.example.com. A b.b.b.b
ns2b.example.com. A b.b.b.b
www.example.com. CNAME example.com.
example.com. A a.a.a.a
example.com. A b.b.b.b

两台服务器都运行着脚本,每分钟检查一次对方的可用性。两台服务器都是 example.com 域的名称服务器,因此它们都可以更改 DNS 记录。如果出现问题,仍然在线的服务器将检测到这种情况,并从 DNS 记录中删除另一台服务器。除此之外,当另一台服务器仍在 DNS 记录中时,浏览器将在 2 秒内自动回退到另一台服务器(使用 Mozilla Firefox 测试)!这是一个非常有用的功能。

因为server A有“权限”,example.com我不知道如何添加server B能够控制 DNS 的权限。事实证明,您可以为任何域添加记录,但只有当第一个使用 DNS 记录注册该域的人将此服务器添加为 DNS 记录中带有“NS”的名称服务器时,这些记录才会被尊重。

我希望这对遇到类似问题的人有所帮助。

答案1

不可能。就是那样。DNS 不是为此而设计的。

如果出现以下情况,你可以伪造:

  • 您将 DNS TTL 保持在极低的水平,基本上按照 RFC 使所有缓存无效 - 对于大多数“需要”最低 TTL 的域名来说,这是不“合法”的
  • 使用备份服务器上的脚本检查主服务器是否关闭(ping 中断等),然后自动更改域中的 DNS 条目。

DNS 本身没有 HA 机制 - 它以循环方式分发答案,并且它们被缓存,因此通常需要时间才能恢复。

HA 是通过让两个服务器使用相同的 IP 来处理的 - 为此您需要多个 IP 地址(存在技术限制),然后使用路由协议让该 IP 转移到另一个数据中心。

1:否

2:你告诉我。从逻辑上讲,数据中心 B 的 IP 地址空间变得无法访问。就是这样 - DNS 没有发生其他变化,人们仍然去那里连接到服务器。

3:你告诉我。从逻辑上讲,数据中心 A 的 IP 地址空间变得无法访问。就是这样 - DNS 没有发生其他事情,人们仍然去那里连接到服务器。

4:如何实现?将一半的人发送到 A,将另一半的人发送到 B - 不管 A 和 B 是否在线?DNS 对高可用性没有任何规定。

5:不,您的注册商什么也不做。您去注册商那里,将名称指向 IP 地址。通过检查您是否足够聪明,能够正确地将条目输入数据库,人们“知道”那里有正确的条目。您的注册商可能并不关心。现在,所有权 - 这是一个法律问题。您的注册商已将域名出售给您,并告知该域名的根注册机构。他们为您提供用户名和密码。谁“拥有”您访问此网站的密码?

我建议你读一本关于 DNS 工作原理的书。忘记用 DNS 解决可用性问题 - DNS 不是为高可用性而设计的。哦,投票关闭 - 根据常见问题解答,这里不欢迎初学者提问。在这种情况下不是一个好决定,但规则仍然有效。

相关内容