我们有一个需要高度可用的 SaaS 应用程序。我们已经有一个昂贵且维护良好的 Hyper-V 故障转移群集,但今天我们托管该群集的数据中心发生了长达五小时的断电,导致我们完全离线。所以现在我们想知道更好的方法是否可能是使用两个独立数据中心的服务器。假设我们让这两个站点之间的所有后端文件复制和数据复制正常工作,我们想知道如何处理前端路由——难怪我们如何解决这个问题,我们总是以负载平衡器成为单点故障而告终。
所以问题是...我们如何在两个托管站点之间设置负载平衡,以使负载平衡器不会成为单点故障?有没有办法使用两个独立的负载平衡器,每个站点一个?我们应该考虑循环 DNS 吗?
答案1
为了正确执行此操作,您需要具备:
- 两个数据中心中的两个独立实例(如您已确定)
- 两个数据中心之间的同步(如您已经确定)
- 发生故障时将客户端从一个服务器重定向到另一个服务器的方法
有两种常见的方法可以实现这一点。一种方法很简单,另一种则不然。
DNS
循环 DNS 并不完全符合你的要求,因为你很可能想要全部请求转到主 DC,而第二个 DC 仅在第一个 DC 停机期间使用。
你能但是要做的是在 DNS 上设置一个非常低的 TTL(比如 30 秒或 5 分钟),这意味着如果您的 DC 确实出现故障,您只需更新您的 DNS,大约 5 分钟内,您的所有客户端都会指向您的其他 DC。
这意味着,由于您的两个 DC 将具有不同的 IP 布局,因此您需要在数据中心的设置中进行调整。
边界网关协议
基本上,如果你问的是这个问题,那么这超出了你的承受范围。简而言之,你的 IP 地址保持不变,但它们会从一个数据中心“移动”到另一个数据中心。这涉及昂贵的路由器、昂贵的 IP 范围,以及对本地注册中心的 AS 编号和 IP 范围的昂贵订阅。
您的 BGP 路由器停止在主数据中心发布广告,并开始在辅助数据中心发布广告。然后互联网绕过离线数据中心并将流量发送到您的新 DC。
如果你使用 ESXi 和 vSphere 进行虚拟化,VMWare 有一款我们曾经试用过的非常不错的产品,叫做VMWare 站点恢复管理器,它基本上为你做了所有事情。它保持你的虚拟机配置同步,并在第一个站点离线时在第二个站点上启动它们。不过这需要大笔费用。
答案2
多年以后...但对于那些仍在寻找的人来说,这些似乎是 DNS 故障转移最经济/最简单的解决方案:
答案3
您需要对负载均衡器进行负载平衡。
你能使用 DNS 循环来实现这一点,但这种方法存在很多问题。您无法控制缓存条目的时间超过您希望的客户端,也无法强制流量流向某个位置。
您还可以使用全局服务器负载平衡 (GSLB) 来实现这一点。这是一种利用 DNS 的更高级方法,可让您从互联网上查看多个数据中心。简而言之,您设置了一些机制将流量分成多个部分,并使用 DNS 选择一个部分。我们使用配置的 DNS 解析器的哈希来为客户端执行查找。其他人使用地理位置路由到“最近”的数据中心。如果该数据中心或集群的某个单点故障发生,您需要添加一些机制来快速从 GSLB 中删除 IP。
http://www.eukhost.com/web-hosting/kb/global-server-load-balancing/
最后,一些非常先进的人使用 Anycast DNS 来解决这个问题。这再次尝试利用“最近”数据中心的方法。使用 Anycasting 服务意味着您需要消除任何“状态性”。这可能很难。