我们已经拥有负载平衡的 Web 服务器。尽管不应该发生中断,但由于各种原因,它们还是会发生。(中央交换机故障、ISP 路由器配置错误、主干网故障、共享基础设施遭受 DOS 攻击)我想将第二组服务器放置在完全不同的地理位置,使用完全不同的连接。我可以使用多种不同的技术同步 SQL 服务器,所以这不是问题。但我不知道如何在主服务器发生故障或无法访问时透明地将现有用户 Web 会话重定向到备份服务器。
据我所知,解决此问题最常见的三种方法是:
- DNS 负载平衡,它使用非常低的 TTL 来智能地将 DNS 请求解析到最佳环境中的服务器 IP。
- 智能重定向,使用第三方站点将用户权威地重定向到知名的但次要的 DNS 名称,例如 na1.mysite.com 和 eu.mysite.com。
- 使用智能、最小的代理服务器将请求中继到不同的站点,同时在云端的某个地方托管代理服务器。
但在站点发生故障的情况下,第一种方法会导致用户无法访问服务器,直到 TTL 导致客户端重新查询 DNS 并解析到 DR 站点,或导致过多的额外 DNS 请求。第二种方法仍然给我们留下了潜在的单点故障(尽管我可以看到多个 A 记录被用于在环境之间复制主“登录”角色),但当用户当前正在使用的站点发生故障时,仍然不会重定向用户。如果云发生故障,第三种方法根本不是多余的。(因为它们时不时都会发生)
根据我对网络的了解,有没有办法为两个地理上分离的环境中的两个不同服务器提供相同的重叠 IP 地址,并让 IP 数据包路由接管并将流量路由到接受请求的服务器?这只适用于 IPv6 吗?它叫什么?为什么 DR 站点故障转移目前不使用这种技术?更新:这称为任播。我该如何实现这一点?值得这么麻烦吗?
澄清一下:这个问题只针对 HTTP 服务器流量,允许服务中断最多 60 秒。用户不需要关闭浏览器、返回登录页面或刷新任何内容。移动用户无法接受每个页面请求的额外 DNS 查询。
答案1
概括起来,DNS 不是一个解决方案,原因有很多,其中一些您已经指出了。其中一些在以上链接问题的答案中。
唯一的真实的实现地理弹性的方法是使用 BGP,并将 /23 细分为 2 个 /24,让上游进行通告,然后从那里执行单独的 DNS 操作。
然后你会遇到它们之间令人恼火的同步问题,但那是另一个故事。
我可以使用多种不同的技术同步 SQL 服务器,所以这不是问题。
嗯,这还不是你遇到的问题。
如果您使用智能重定向(通过更改主机名或代理请求),那么您还会遇到另一个问题。“您将代理放在哪里,这样它就不会成为 SPOF”
否则,您将拥有 N 个地理位置分散的站点,但有一个故障点(代理/重定向引擎)。
我想,理论上你可以使用 MPLS 来使你的位置看起来像是在同一个 L2 网络上,尽管我不确定这实际上如何有助于提高对故障的恢复能力。
答案2
DNS 本身不提供自动故障转移功能。但结合浏览器的客户端重试,它确实提供了一种免费(就网络投资而言)且低延迟(~1s)的解决方案。有关更多详细信息,请参阅下面的参考资料。
http://blog.engelke.com/2011/06/07/web-resilience-with-round-robin-dns/
多个数据中心和 HTTP 流量:DNS 循环是确保即时故障转移的唯一方法吗?