我想负载平衡 + 故障转移备份托管在不同供应商的多个 vps 网络服务器。
我听说对于 HAProxy,您需要同一子网下的多个服务器,以及负载均衡器之间的共享(虚拟)IP 地址。
但在我的情况下这是不可能的,因为每个 VPS 都在不同的节点/网络上。
- 有没有办法在这种设置中使用 HAProxy?(请简要说明,我不想听到你的“是”答案)
- NginX 呢?使用 Nginx 是否有可能达到相同的结果?(当服务器位于不同网络时)
我知道 Round Rubin DNS,但它没有提供真正的故障转移解决方案,也没有提供服务器之间的负载平衡。
负载平衡和高可用性 (HA) 是两个不同的东西。
是的,您可以使用 NginX 为两个或多个节点配置负载平衡,无论它们位于何处。
对于负载平衡,您有:
DNS -> 服务 IP -> 负载平衡器 -> AppSrv1,AppSrv2,...,AppSrvn -> 一个或多个后端
对于高可用性 (HA),您有:
正常工作情况:
DNS -> Virtual Service IP (assigned on LB1) -> AppSrv1,AppSrv2,...,AppSrvn -> One or more Backends If LoadBalancer1 (LB1) breaks:
Hartbeat assigns VirtualIP to LB2
DNS - > 虚拟服务 IP(在 LB2 上分配)-> AppSrv1,AppSrv2,...,AppSrvn -> 一个或多个后端
DNS -> VirtIP1 (LB1),VirtIP2 (LB2), VirtIPn (LBn) -> AppSrv1,AppSrv2,...,AppSrvn -> 一个或多个后端
基本上,Load Balancer 基于客户端 IP 创建散列,并将具有此散列的所有流量转发到相同的 AppSrv(以保留会话等)。您可以配置首选 AppSrv、故障转移 AppSrv 等
您可以在所有 VPS 上使用 LB 进行配置,它将流量转发到本地 AppSrv(同一 VPS),如果该 AppSrv 不可访问,则转发到“备份”VPS。但是这样的实施在很多层面上都存在问题......
您将 HSRP/VRRP/LVS 与 HAProxy 混淆了。虚拟 IP 部分与 HAProxy 完全分开。
如果您想要在两个不同的 VPS 提供商之间共享一个 IP,则不能。你能做的最好的事情是从同一个提供商那里获得两个 VPS,在两者上运行 heartbeat + haproxy,然后它们可以在同一个子网中拥有 IP。
您的意思是位于不同地区的不同农场?
然后,您将通过 DNS 将它们路由到 HAProxy 可以负载平衡的特定地理场:
webfarm1 -> HAProxy -> appsrv..
webfarm2 -> HAProxy -> appsrv..
您还可以在分布在不同地理区域的 vps 之间进行负载平衡,但最终结果不会那么好:这种设置服务器通常是静态内容,例如 CDN。