负载均衡器、多个数据中心和基于 URL 的路由

负载均衡器、多个数据中心和基于 URL 的路由

有一个数据中心 - dc1。业务需要在另一个地区设置另一个数据中心 - dc2,并且将来可能会有更多数据中心,例如 dc3。

在数据中心 dc1 内:

  • 有两个 Web 服务器,即 WS1 和 WS2。这两个 Web 服务器目前不共享任何内容。预计没有必要在每个 dc 内安装更多 Web 服务器。
  • dc1 还具有一个本地负载均衡器,该均衡器已设置了会话粘性。因此,如果用户(比如 u1)登录到 dc1,并且负载均衡器决定将他的第一个请求路由到 WS1,那么从那时起,u1 的所有请求都将路由到 WS1。
  • 本地负载均衡器和 Web 服务器对用户不可见。本地负载均衡器监听分配给 Web 服务器 ws1 和 ws2 虚拟集群的虚拟 IP 上的流量。虚拟 IP 是主机名在 DNS 中解析到的 IP。
  • 目前没有客户端特定的子域,而是有一个客户端特定的 url(上下文)。例如:www.example.com/client1 和 www.example.com/client2。

鉴于上述情况,当 dc2 接入时,我希望根据客户端在 dc1 和 dc2 之间路由流量。到目前为止,我发现的选项如下。

  • 具有客户端特定的子域,例如 client1.example.com 和 client2.example.com,并为每个子域分配我想要将它们路由到的数据中心的虚拟 IP。

或者

  • 将 www.example.com 和 www1.example.com 分配给第一个 dc,即 dc1,并将 www2.example.com 分配给 dc2。所有请求将首先路由到 dc1,其中 WS1 和 WS2 将根据 URL 是以 /client1 还是 /client2 结尾,将用户重定向到 www1.example.com 或 www2.example.com。

我需要以下方面的帮助

  • 如果我在 dc1 和 dc2 之间设置全局负载均衡器,我还有其他解决方案吗?也就是说,全局负载均衡器可以根据 url 路由流量吗?
  • 与 www1 解决方案相比,基于子域的解决方案是否存在缺点?对于 www1 解决方案,我担心它至少在第一次请求时会对 dc1 产生依赖,并且用户会发现他被重定向到不同的 URL。

答案1

您是否希望手动将客户分配到每个 DC,还是只想寻找一种简单的方法来分配负载?如果是后者,基于地理位置的负载平衡通常会为您提供最佳性能。

基于地理位置的负载平衡器几乎总是基于 DNS,这意味着您在 DNS 查找时不会拥有 URL 信息,因此无法做出决定。但是,我见过这样的方案:一个位置的 Web 服务器在检查请求后,如果请求的对象在其他地方能得到更好的服务,则会将 301 重定向发送到另一个位置的服务。

至于基于地理位置的负载平衡,目前有几种 DNS 即服务产品;我推荐 Dynect(http://dyn.com/dns/dynect-managed-dns/)。它们可以进行地理定位和站点监控,并在发生中断时将失效的 VIP 从 DNS 轮换中拉出。

也存在不少基于设备的解决方案,例如 F5 的 GTM 和 Citrix 的 Netscaler,但它们的成本比基于云的解决方案高得多。

基于 DNS 的解决方案的最大缺点是,某些客户端在发生故障转移时无法可靠地刷新其 DNS 缓存。在我工作的站点(一个大型站点)上,我们会看到客户端在从 DNS 中删除其 IP 几天到几周后访问已弃用的 VIP。修复此问题的方法非常奇特,通常依赖于使用路由协议将 VIP 从一个站点“移动”到另一个站点,以及 DNS 更改。

相关内容