我理解,要实现 HAProxy 负载平衡设置的故障转移,您需要两台运行 HAproxy 的机器(并将其路由到多个 Web 服务器实例)。但在这种情况下,假设是 abcd.com,我们如何将此流量拆分/路由到 2 个 IP 地址而不是一个?DNS 通常将域名解析为单个 IP。我们如何使用免费/廉价的工具/服务来做到这一点?
答案1
如果您的负载太大,需要在两个 haproxy 实例之间进行负载平衡,那么 DNS 轮询不失为一个好主意(不过,如果您有这种负载,我会感到惊讶)。但是 DNS 轮询无法提供良好的故障转移。
在 Stack Overflow,我们使用heartbeat
单个虚拟 IP,该 IP 一次只能在一个 haproxy 主机上处于活动状态(如果该主机发生故障,另一个主机将接管该 IP)。您可以使用 heartbeat 在每台机器上都有一个 IP,然后在两台机器之间进行 DNS 轮询。如果其中一台发生故障,那么另一台将拥有这两个 IP。
HAProxy 使用我们物理服务器上大约 1-5% 的 CPU 来平衡只有一个 的流量Intel(R) Xeon(R) CPU E5504 @ 2.00GHz
。因此 HAProxy 通常可以轻松处理大量流量。
答案2
正如 Kyle 所说,心跳可以使两个 haproxy 服务器充当故障转移对。然而,虽然许多人确实使用心跳为了工作,保持活跃由 haproxy 的作者建议。
他在 haproxy 邮件列表中概述了详细信息:http://www.formilux.org/archives/haproxy/1003/3259.html
简而言之,它是这样的:
heartbeat 是面向集群的。它确保只有一台服务器可以访问资源(即 SAN 存储)
keepalived 是面向网络的。它确保至少有一台服务器具有相关 IP。