假设我有一个完全正常运行、负载平衡的应用程序服务器环境。
所有服务器都必须能够正常地进行故障转移。对于应用服务器来说,这相对容易实现,但是如何使用前端负载平衡器实现故障转移呢?
我可以让多个负载均衡器监听同一个 IP 和端口吗?一旦发现旧负载均衡器坏了,我是否必须立即运行新的负载均衡器?
答案1
基本来说:
- 您同时运行两个或更多负载均衡器
- 它们都配置了相同的配置、IP 地址等
- 它们心跳
- 任何时候都只能有一个处于活动状态
- 当活动节点的心跳消失(失败)时,其余节点将相互协商谁将接下来上线
基本上,无论您使用哪种技术,主动/被动集群中的高可用性工作方式都是相同的,因此上述内容适用于负载均衡器、数据库服务器、虚拟机管理程序等。
在 Linux 中,这是通过多种工具完成的,其中一个工具实际上被调用heartbeat
(并且同步您的配置通常是通过完成的drdb
)。
在 Windows 中,您通常会使用故障转移群集或网络负载平衡,这两者都提供由多台服务器共享的虚拟 IP 地址。可以使用DFS-R
网络负载平衡同步您的配置,或者群集实际上能够共享注册表配置单元并在发生故障转移时重新配置它。
答案2
我可能会在几天内测试以下内容作为一些“真实”Web 服务器的高可用性负载平衡器:
- 两台 Archlinux 服务器(非常“基本”的安装)
- 每个都
Pound
作为反向代理和负载均衡器运行 Keepalived
负责 IP 故障转移
我将运行主动/被动配置,即每个 IP(我有大约 20 个)仅在其中一台服务器上处于活动状态。如果其中一台服务器发生故障,另一台服务器将负责所有 IP。Pound 可以检测到其中一个 Web 服务器是否发生故障并采取相应的措施:Pound 不会将任何请求重定向到该服务器,直到它再次恢复正常。
不确定类似的解决方案是否可以应用到您的应用服务器,但我完全引用了 Mark Henderson 的话
尽管概念大致相同,但“硬件”负载均衡器往往仅使用上述概念的专有实现