我遇到过这样的情况:我们的服务器位于远程位置。它与互联网的连接(例如 IP 1.1.1.1)可能不稳定,因此我们在另一个提供商上建立了备用连接(例如通过 IP 2.2.2.2)。第一个提供商更经济,但当它出现故障时,我们希望通过第二个提供商连接到该服务器,后者将收取带宽使用费。第二个提供商更可靠,但价格要贵得多。
我需要有一个指向远程服务器的 DNS 条目,该条目通常指向 1.1.1.1,但当连接不佳时可以更改为 2.2.2.2 作为替代方案,或者以其他方式将城市中的客户端定向到通过任一连接可靠且对客户端不可见的远程服务器。
我该如何处理这个问题?
似乎可以在 DNS 级别解决该问题,但使用我所知道的任何技术都无法解决。还有什么方法可以解决?
答案1
我需要在远程服务器上有一个 DNS 条目,该条目通常指向 1.1.1.1,但当连接不好时可以更改为 2.2.2.2。
不,你需要的是一种将两个连接结合在一起的方法。但是,这是一个入站链路聚合系统,由每个单独的 ISP 的 BGP 路由处理。我不知道是否有一种方法可以将一个连接置于另一个连接之上,但我并不是这个方案的专家。如果你在广告 BGP 路由方面遇到一些不靠谱的 ISP 的麻烦,而 BGP 路由允许你拥有一个实际上在两个连接之间浮动的 IP 地址,我并不感到惊讶。
这不是 DNS 可以解决的问题(轻松或可靠*)。假设 DNS 就是 DNS,它是一个简单的键值对信息存储和检索系统。在你问之前,循环赛也帮不了你。=)
*好的,好的,是的,你可以做一些类似于使用 DNS 进行入站链接平衡的事情。这是邪恶的,涉及传播延迟作为 SLA 的一部分,并且还依赖 DNS 管理员不弄乱你的记录的 TTL 值,这不是一个安全的选择。我甚至不会在这里解释 DNS 故障转移(或者我称之为“DNS 故障转移”),因为我认为它不是特别可靠/专业,但我会链接到它,如果将来链接对人们来说消失了,也不会造成任何伤害,因为......它是邪恶的。别说我没有警告过你。
答案2
为该服务创建主机名。为该主机名创建一条指向 1.1.1.1 的 A 记录。创建一条 SOA 记录,指定非常短的 TTL、刷新和过期时间,以便快速获取对 A 记录的更改。
监控主链路,如果出现故障,则发布指向 2.2.2.2 的新 A 记录。
作为此解决方案的更高级版本,使用监控工具监视两个链接,并根据服务器稳定性自动交换适当的 DNS 记录。
其工作原理取决于您的 DNS 服务器中使用的技术堆栈,但如果您在 Unix 或 Linux 服务器上运行 DNS,则可以使用 Nagios 等监控工具根据监控脚本的结果交换区域文件。
答案3
我的建议是自动 DNS 故障转移。这样,您可以将流量发送到您想要发送的任何数据中心,并且如果出于任何原因(网络问题或硬件故障),您将自动故障转移到另一个数据中心。您可以看到http://www.dnsmadeeasy.com/services/dns-failover-system-monitoring/举个例子。
答案4
您始终可以进行 DNS 故障转移,但实际上您应该做的是某种下游负载平衡。故障转移是有风险的,而且并不是 DNS 的设计初衷。在传播新地址时,将会出现一定程度的停机时间。而且您必须拥有一台处于闲置状态的服务器。
如果您已经实现了某种负载平衡,那么两台服务器都可以提供流量,并且如果一台服务器出现故障,流量将自动转至另一台。