(我看过其他问题,但我认为它们都没有涵盖与此相同的内容)
我正在为我们的 Web 服务器群寻找负载平衡解决方案。我们目前使用 Cisco CSS11000 系列设备,但这些设备有一些限制:
- 我们目前卸载了 SSL,我知道这会给 LB 带来负载,而不是能够在多个 Web 服务器上水平扩展 SSL 工作
- CSS LB 不支持 IPv6
- CSS 在故障转移方面表现不佳 - 我们希望能够优雅地移动用户流量,以便我们在不中断服务的情况下升级网络服务器。
目的:
- 让我们以“优雅”的方式停用一半的网络服务器(即,新用户连接转到指定的网络服务器子组,并告诉我们现有连接何时关闭 - 如果它可以强制它们优雅地关闭以便用户不会注意到,则可以获得加分)。
- 让我们在不中断服务的情况下重新启动/重新配置负载均衡器
- 支持您期望的常见 HA 功能(如果单个服务器爆炸或崩溃,请不要中断)
- 我希望在不花费 $$$ 购买商业/硬件负载平衡器的情况下实现此目的
- 如果可能的话,我想在 Linux 上执行此操作以利用内部经验。
- 其余企业喜欢“企业”产品,因为当出现问题时他们可以责怪别人。因此,无论我建议实施什么,都需要像商业解决方案一样可靠。
思路:
两对 HAProxy。我们将使用 HAProxy 套接字控制机制(http://code.google.com/p/haproxy-docs/wiki/UnixSocketCommands) 来优雅地删除 Web 服务器。每对服务器都会使用心跳来维持服务,我们会修改 DNS 以指向另一对服务器,从而将新用户连接转移到另一对服务器。需要某种形式的监控来告诉我们特定对服务器何时有 0 个活动连接。
两台 Linux 机器使用 iptables 和 -m random 模块进行平衡。我会使用 heartbeat 让 HA VIP 在其中一台机器上保持活动状态,并使用 conntrackd 同步 TCP 连接状态,这样我们就可以在不丢失服务的情况下进行故障转移。需要一些脚本来根据后端的状态插入/删除 iptables 规则(除非有人知道工具?)
有人对以上内容有什么评论吗?或者有其他/更好/补充的想法吗?
谢谢!
答案1
HAProxy 非常棒(从经验来看),我不确定您是否知道更新的功能,例如使用指令同步 stick 表(如果您启用了持久性)peers
。有关更多信息,请参阅 1.5 手册:
http://haproxy.1wt.eu/download/1.5/doc/configuration.txt
HAProxy 还支持 IPv6 -> IPv4 转换;如果您的内部网络仍在使用 IPv4 寻址但面向公众的网络没有使用 IPv4 寻址,那么这非常有用。
您的列表中缺少一项 - LVS/IPVS,它是 Linux 内核的一部分。它也支持 IPv6(尽管不能进行转换,因为它不是代理)。性能非常好,并且经常与 ldirectord(Perl 守护程序)结合使用,用于健康检查和服务器离线/在线功能。 http://horms.net/projects/ldirectord/。您可以正常地重新加载 ldirectord 配置文件,或者直接使用 ipvsadm 命令使服务器脱机、更改权重等。LVS 还具有同步功能: http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.server_state_sync_demon.html
您没有提到持久性/粘性是否是必需的,但 LVS 可以坚持源 IP,并且 HAProxy 有几个选项:cookie、源 IP、RDP cookies。
虽然都不执行 SSL 终止,但这可以由 Stunnel、Pound 以及其他几个工具来处理。
答案2
Apache 流量服务器看起来确实很有前途。我现在使用 BigIPs,它可以很好地满足您的需求,但我认为切换到它们不会为您节省任何费用。
答案3
考虑到您的目标,我建议您与 KEMP Technologies (www.kemptechnologies.com) 联系,我目前将它们用于我自己的 Web 应用程序,您可以禁用会耗尽服务器连接的 Web 服务器,这样新连接就会转到其他服务器,而现有连接将保留一段时间,并逐渐迁移到其他服务器。它们提供高可用性,并可选择在单元之间同步您的连接和亲和性/持久性表,这样第二个单元就知道客户端在通过第一个负载平衡器时连接到哪个服务器。它们还提供 SSL 卸载,如果您有大量 SSL 流量,也可以在硬件中完成。
他们的成本附加值列表很短,这使得您可以更轻松地在第一次尝试时获得满足您需求的东西。