我在这里采用了稍微不同的负载平衡方法,它更多是为了应用程序而不是物理主机的维护和高可用性。
假设我有 2 个 Web 服务,我将它们部署到 2 个 Web 服务器上。到目前为止,设置 HAProxy 以在它们之间进行负载平衡并将流量引导到任一主机都很容易。我想要做的是能够停止主机上的其中一个 Web 服务,这应该使 LB 直接调用另一个主机,而不会影响另一个 Web 服务。
因此,我会停止 Host1 上的 WS1,LB 会将流量引导至 Host2 上运行的 WS1,但 WS2 仍会在两个主机上运行。
答案1
haproxy 支持此功能——检查其“健康检查”功能。
答案2
如果我理解您的问题的话,好像已经有一个 servervault 帖子可以回答这个问题?
我们使用与 Windwos 网络负载均衡器非常相似的设置,并且 Drainstopping 效果很好。
编辑1:
好的,有几件事:
- 作为最佳实践,您应该将相似的服务器分组。因此,如果您有网站 A、B 和 C。这些相同的网站应驻留在负载平衡集群中的所有服务器上。您不应该设置服务器 1 包含站点 A 和 B,服务器 2 包含站点 A 和 C。我提到这一点的原因是,正如您的示例所示,即使只在一个站点上运行,停止整个服务器也没关系。事实上,对于 IIS,我强烈推荐它(假设您使用 IIS)。
- 不管第 1 点如何,您可以做的是,为每个“Web 服务”设置一个单独的负载平衡 IP,然后您可以停止每个单独的站点。我认为您不能指望一个负载平衡 IP 被多个站点使用和预计只能停止一个。但是,我对 HAproxy 不太感兴趣,我必须在 MS NLB 中捣鼓一下才能确认这一点。
这些帮助有用?