我有一个服务运行在大型主机托管设施的服务器上。其他服务器会向该服务器报告启动/关闭情况。非常基础的东西。每个远程服务器上的客户端代理都有一个指向的条目 - 用于报告 - 并且该软件没有容错能力。
我想做的是实施 Round-Robin DNS 来处理 colo 监控服务器的主要互联网连接。此系统具有大量连接,但如果它离线,我会收到一堆错误警报,提示代理服务器已离线 - 但实际上并非如此 - 这是因为 colo 线路已关闭或该线路的防火墙已关闭。
如果我在 DNS 中输入 2 个条目,第一个是带宽大的主防火墙,第二个是带宽小的防火墙。那么这些来自目标代理的“我在线/离线”的小数据包会不会工作得更好?我知道这不是最佳选择,但软件没有为代理尝试 2 个单独的条目的代码。报告服务器没有离线,它非常稳定(双 SAN 和 3 个 VMWare 服务器 - 冗余)...但我在防火墙和主线路中有一个单点故障。只是想尝试让这种情况变得更好一点,以防该线路或防火墙出现故障。
有什么想法吗?
答案1
如果我在 DNS 中输入 2 个条目,第一个是带宽大且是主防火墙,第二个是带宽小且是较小的防火墙。那么来自目标代理的这些“我在线/离线”小数据包会不会工作得更好?
不会。如果你的主防火墙坏了,将会发生以下情况:
- 客户端系统执行 DNS 查询并获取指向主防火墙的条目 #1。
- 您的客户端现在有了一个 IP 地址。DNS 的职责已经完成。
- 客户端尝试访问 IP 地址,但该地址没有连接。
- 痛苦的泪水。
DNS 是一个简单的键值存储,除此之外什么都不知道。如果使用循环法,您的系统仍然会失败。公平地说,它们失败的几率只有一半,这意味着另一半时间会成功。如果其中一个防火墙关闭,则循环法会在一半时间内给出您主机托管空间中正常运行的防火墙/互联网连接的 IP 地址,结果非常不可预测。在任何给定点,如果两个防火墙中的一个关闭,并且有两个循环条目,则只有一半一些DNS 查询将针对有效的 IP 地址。因此,从好的方面来看,我想这总比没有好吧?
问题的真正解决方案是通过更好的提供商、SLA 和硬件使连接更可靠,或者使用某种链路绑定。使用 Elfiq 负载平衡器之类的东西来管理绑定。当然,这会引入一个新的单点故障。然后,您可以在主动/被动集群中将 Elfiq 加倍。然后您会注意到它们都在同一个电源电路上,因此您的机柜会获得单独的电源下降。然后您会注意到这两个电路在同一个电网上……
...然后你意识到永远不会有不存在 SPOF 的情况,所以你只需将该 SPOF 转移给另一个人,这样你就可以责怪他们,或者转移到一个足够棒的设备/系统上,让你晚上睡不着觉。直到你意识到你的开发人员没有对应用程序的输入进行健全性检查。
答案2
你想要的不是 DNS 循环,而是冗余连接(您的托管服务提供商应该已经为您提供了,至少在他们的边缘。如果他们没有多个冗余上行链路和适当的路由配置,以便在一个链路断开时进行故障转移寻找新的主机托管设施)。
如果你有一个防火墙/网络上行链路,并且这个单点故障对你来说是不可接受的,那么是时候投资冗余防火墙以及到 ISP 核心的冗余链路(最好通过不同的接入交换机)。几乎任何名副其实的商业防火墙都可以做到这一点。你甚至可以用免费防火墙如果你的预算有限。