1)接受端口X上的HTTP连接,并将它们随机或以循环方式转发到多个其他主机(和/或端口)中的一个.
2)如果服务器回复包含具有特定值的某个HTTP标头(即’Magic-Number:12345′),请记住它并将包含相同标头的所有后续请求转发到此服务器.
3)在一定的时间间隔内,通过向所有目标服务器发送指定的HTTP请求来执行保持活动测试.如果任一服务器没有回复,请停止转发,直到它再次联机.
4)(并不重要,但很高兴)接受来自客户端的HTTPS连接并将它们转换为与服务器的HTTP连接.
该解决方案必须包含免费和/或开源软件,并在Windows 200x Server下运行.
有什么建议?
更新:Cygwin或Portable Ubuntu(或其他Colinux发行版)也是可行的选择,如果他们能够运行适当的* nix解决方案.
所以,我的答案是:
当然你可以用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的“请求计数算法”部分.
关于第2点:我真的不知道HTTP头解析.上面的示例使用额外的URL参数MYSESSIONID来代理作为同一主机的同一连接的一部分的流量.我想你也可以使用cookies.无论如何,这应该由标识为LB1或LB2的应用程序处理(这些是作为会话ID或cookie的一部分添加的).
Re 3:负载均衡器监视其所有成员,并在它们没有响应时禁用它们.您还可以通过Web界面启用/禁用节点(mod_status,请参阅“启用Balancer Manager支持”).
对于第4点,您可以在端口443上设置启用SSL的VirtualHost监听,该端口代理所有流量到达平衡器成员端口80的流量.