使用 HAProxy 或 Nginx 在 VPS 之间进行负载平衡

使用 HAProxy 或 Nginx 在 VPS 之间进行负载平衡

我想要对托管在不同提供商上的多个 vps 网络服务器进行负载平衡 + 故障转移备份。

我听说对于 HAProxy,您需要同一子网下的多个服务器,以及负载均衡器之间的共享(虚拟)IP 地址。

但对我来说这是不可能的,因为每个 VPS 都在不同的节点/网络上。

  1. 有没有办法在这种设置中使用 HAProxy ?(请简短解释一下,我不想听到你的“是”的回答
  2. 那么 NginX 怎么样?使用 Nginx 可以实现相同的结果吗?(当服务器位于不同的网络上时)

我了解 Round Rubin DNS,但它并没有提供真正的故障转移解决方案,也没有提供服务器之间的负载平衡。

答案1

负载平衡和高可用性 (HA) 是两个不同的东西。
是的,您可以使用 NginX 为两个或多个节点配置负载平衡,无论它们位于何处。

对于负载平衡,您有:
DNS -> 服务 IP -> 负载均衡器 -> AppSrv1、AppSrv2、…、AppSrvn -> 一个或多个后端

对于高可用性(HA),您有:

  • 主动/被动:
    正常工作情况:
    DNS -> 虚拟服务 IP(在 LB1 上分配)-> AppSrv1、AppSrv2、...、AppSrvn -> 一个或多个后端 如果 LoadBalancer1 (LB1) 中断:
    Hartbeat 将 VirtualIP 分配给 LB2
    DNS -> 虚拟服务 IP(在 LB2 上分配)-> AppSrv1、AppSrv2、...、AppSrvn -> 一个或多个后端
  • 主动/主动:
    DNS -> VirtIP1 (LB1)、VirtIP2 (LB2)、VirtIPn (LBn) -> AppSrv1、AppSrv2、…、AppSrvn -> 一个或多个后端

基本上,负载均衡器会根据客户端 IP 创建哈希,并将所有具有此哈希的流量转发到同一个 AppSrv(以便保留会话等)。您可以配置首选 AppSrv、故障转移 AppSrv 等

您可以在所有 VPS 上配置 LB,将流量转发到本地 AppSrv(同一个 VPS),如果该 AppSrv 无法访问,则转发到“备份”VPS。但这种实施在很多层面上都存在问题……

答案2

您把 HSRP/VRRP/LVS 与 HAProxy 混淆了。虚拟 IP 部分与 HAProxy 完全分开。

如果您希望两个不同的 VPS 提供商之间共享一个 IP,您无法做到。您能做的最好的事情是从同一个提供商那里获得两个 VPS,在两个 VPS 上运行 heartbeat+haproxy,然后它们就可以拥有同一子网内的 IP。

答案3

您是指位于不同地区的不同农场吗?

然后您可以通过 DNS 将它们路由到 HAProxy 可以进行负载平衡的特定地理场:

webfarm1 -> HAProxy -> appsrv..

webfarm2 -> HAProxy -> appsrv..

您还可以跨地理区域分布的 VPS 之间进行负载平衡,但最终结果不会那么好:这种设置服务器通常为静态内容,例如 CDN。

相关内容