我正在寻找一个 HTTP 负载平衡解决方案,它将提供以下内容:
1) 接受端口 X 上的 HTTP 连接,并将它们随机或以循环方式转发到多个其他主机(和/或端口)之一。
2) 如果服务器回复包含具有特定值的某个 HTTP 标头(即'Magic-Number: 12345'),请记住它并将包含相同标头的所有后续请求转发到该服务器。
3) 每隔一定时间,通过向所有目标服务器发送指定的 HTTP 请求来执行保活测试。如果任一服务器没有回复,请停止转发,直到它再次联机。
4)(不重要,但很高兴)接受来自客户端的 HTTPS 连接并将它们转换为与服务器的 HTTP 连接。
该解决方案必须由免费和/或开源软件组成,并在 Windows 200x Server 下运行。
有什么建议么?
更新:如果 Cygwin 或 Portable Ubuntu(或其他 Colinux 发行版)能够运行适当的 *nix 解决方案,它们也是可行的选择。
我知道这不适用于 Windows,但无论如何我都会回答,因为我认为在您的设置中查看这个替代方案会非常有趣。
HAProxy是一个 HTTP 代理(并且可以代理任何其他内容,但将在第 4 层及以下)。它几乎可以完成您希望它做的所有事情。文档不是很漂亮,但是如果您真的花时间阅读它,您会发现它包含您需要的所有信息。
它几乎可以在任何东西上运行,因此除非您使用大量 SSL,否则您不需要购买又大又贵的机器。
我使用 nginx 已经有几年了,对它非常满意。
nginx(发音为“engine X”)是一个轻量级、高性能的 Web 服务器/反向代理和电子邮件 (IMAP/POP3) 代理,在类似 BSD 的许可证下获得许可。
它擅长负载平衡和反向代理。在此处查看示例
我把它写在我的脑海/记忆中,因为我手头没有任何东西来验证它是否正常工作,但我希望这可能对你有一些提示。
所以,我的回答是:
当然,您可以使用 Apache 的
mod_proxy_balancer
. 您应该能够通过以下方式完成此操作:因此,关于第 1 点,请阅读
mod_proxy_balancer
“请求计数算法”部分。关于第 2 点:我真的不知道 HTTP 标头解析。上面的示例使用额外的 URL 参数
MYSESSIONID
来代理作为与同一主机的同一连接的一部分的流量。我想你也可以使用cookies。无论哪种方式,这都应该由标识为 LB1 或 LB2 的应用程序处理(这些被添加为会话 id 或 cookie 的一部分)。Re 3:负载均衡器监控它的所有成员,并在它们无响应时禁用它们。您还可以通过 Web 界面启用/禁用节点(
mod_status
请参阅“启用 Balancer Manager 支持”)。至于第 4 点,您可以设置启用 SSL 的 VirtualHost 侦听端口 443,将所有流量代理到平衡器成员端口 80。
查看基于 HTTP Header 的 LB 的 Pound Load Balancer:
我过去在 Unix 环境中使用 Apache 和 mod_cache。它在用户负载较低的情况下运行良好,但在负载较重的日子里,系统一整天都在停机。
经过一些测试后,我们转移到了 Varnish Cache,现在一切都变得更好了。
问题是只支持Unix环境,新的varnish windows cygwin-based版本存在,但我现在不适合生产环境:
我想说这对于 IIS 7 也是可能的,结合使用 URL 重写和网络负载平衡。基础是