我一直在阅读有关 DNS 故障转移和许多其他技术术语的文章,但我在这方面还是个新手,所以对我来说,这些都听起来像天书。基本上,我只需要以下内容:
我有两个来自不同提供商的共享主机帐户(服务器 A 和服务器 B)。每个帐户都包含完全相同的网站内容。
在正常情况下,输入我的域名应该指向服务器 A 的 IP。但是在服务器 A 出现故障或无法访问的糟糕情况下,我的域名应该以最快的方式指向服务器 B 的 IP。
您如何实现这一点?您可以推荐哪些服务?谢谢。
笔记:这个问题有一个后续问题:DNS 循环:多个名称服务器 VS 多个 A 记录?
答案1
简单的答案是使用内容分发/交付网络处理您的流量。他们已经拥有处理此类故障转移的基础设施。
如果你必须自己托管,可以采取以下方法:
- 将 DNS TTL 设置得很低
- 设置一个监控网络服务器的服务器
- 如果其中一个 Web 服务器出现故障,则在监控服务器上自动执行脚本以修改 DNS 并删除故障服务器
不过,我的第一个建议仍然是使用 CDN。
答案2
它永远不会只适用于共享托管帐户。您需要一些智能的东西来处理中断。有很多选择:
1. @Hyppy 写的 CDN
这是最简单的,可以说是最便宜的静态内容解决方案。您将静态内容(js、html、图像等)上传到 CDN,然后它会将其分发到全球。您的内容具有高可用性,访问者将从最近的服务器下载您的内容,而不是整个互联网。CDN 无法提供动态内容(好吧,有些像 Akamai 可以,但它很昂贵,无法提供所有内容)
2. 负载均衡器
您可以使用 HAProxy 将自己的服务器设置为负载均衡器。您可以将 DNS 记录指向负载均衡器,然后负载均衡器会将流量路由到目标服务器。当所有服务器都正常时,负载均衡器可以管理负载分配,当某些服务器死机时,负载均衡器可以禁用流量。
如果您需要 HA,则应使用虚拟 IP(使用类似 KeepAlived 的东西)备份更多负载均衡器。如果两个负载均衡器都在同一个网络上,则很容易实现,但如果您想让这些负载均衡器位于不同的提供商中,则非常困难(您最终会得到所谓的多宿主 AS、您自己的 IP 子网和其他东西)。您可以使用专用硬件作为负载均衡器,例如来自 F5 的设备。
从购买角度来说,这是一个昂贵的解决方案,但从 TCO 角度来说,它比 CDN 更便宜,而且处理内容不受限制。