HTTP负载平衡器与基于头的路由?

我正在寻找一个HTTP负载平衡解决scheme,将提供以下内容:

1)接受端口X上的HTTP连接,并随机或以循环方式将其转发到多个其他主机(和/或端口)之一。

2)如果服务器应答包含一个具有一定值的特定的HTTP报头(即“Magic-Number:12345”),记住它,并将包含相同报头的所有后续请求转发给该服务器。

3)按照一定的时间间隔,通过向所有目标服务器发送指定的HTTP请求来执行保持活动testing。 如果其中一个服务器没有回复,请停止转发,直到它再次联机。

4)(不重要,但很好)接受来自客户端的HTTPS连接,并将其转换为HTTP连接到服务器。

该解决scheme必须由免费和/或开源软件组成,并在Windows 200x Server下运行。

有什么build议么?

更新: Cygwin或便携式Ubuntu(或其他Colinux发行版)也是可行的select,如果他们能够运行适当的* nix解决scheme。

我把这些写在我的脑海/记忆里,因为我手边没有任何东西来validation它是否正常工作,但我希望这可能是对你的一些暗示。

所以,我的答案是:

当然你可以用Apache的mod_proxy_balancer来做到这一点。 你应该可以用这样的东西来实现这个:

 ProxyPassReverse / http://host1:80/ ProxyPassReverse / http://host2:80/ <Proxy balancer://cluster> BalancerMember http://host1:80 route=LB1 BalancerMember http://host2:80 route=LB2 ProxySet stickysession=MYSESSIONID </Proxy> 

因此,关于第1点,请阅读mod_proxy_balancer的“请求计数algorithm”部分。

关于第2点:我真的不知道HTTP头parsing。 上面的示例使用额外的URL参数MYSESSIONID来代理与同一主机相同连接的一部分的stream量。 我想你也可以使用cookies。 无论如何,这应该由LB1或LB2标识的应用程序来处理(这些被添加为会话ID或cookie的一部分)。

重新3:负载均衡器监视它的所有成员,并禁用它们,当他们没有响应。 您也可以通过Web界面启用/禁用节点( mod_status ,请参阅“启用平衡器pipe理器支持”)。

至于第4点,您可以设置启用SSL的VirtualHost侦听端口443,代理所有的stream量到平衡器成员端口80。

我知道这不是Windows,但我会回答,因为我认为这将是真正有趣的在你的设置看这个替代。

HAProxy是一个HTTP代理(可以代理其他任何东西,但是会在第4层和以下)。 它不仅仅是你想要的一切。 文档不是很漂亮,但如果你真的花时间阅读,你会发现它有你需要的所有信息。

这几乎可以运行在任何东西上,所以你不需要购买大而昂贵的机器(除非你明显做了很多的SSL)。

我使用nginx已经有好几年了,非常满意。

nginx(发音为“X”)是一种轻量级,高性能的Web服务器/反向代理和电子邮件(IMAP / POP3)代理,以BSD类许可证的forms获得许可。

它在负载平衡和反向代理方面很好。 看看这里的例子

检查磅负载平衡器,这是基于HTTP头的LB:

我在Unix环境下使用了mod_cache的Apache。 它在低用户负载的情况下运行良好,但负载较重的日子整天都在下降。

经过一些testing,我们转到了Varnish Cache,现在一切都变好了。

问题是只有Unix环境支持,一个新的基于Windows cygwin的版本存在,但我现在不适用于生产环境:

我会说这也可以与IIS 7,使用URL重写结合networking负载平衡。 基础是

  • 使用NLB分配多个主机上的stream量
  • 使用IIS的URL重写基于头写重写规则。