Web服务器的负载平衡(与状态同步)

(我看了其他的问题,我不认为他们中的任何一个都是这样的)

我正在为我们的web服务器场寻找负载平衡解决scheme。 我们目前使用Cisco CSS11000系列设备,但是这些设备有一些限制:

  • 我们目前卸载了SSL,我知道这会将负载放在LB上,而不是在多个Web服务器上横向扩展SSL工作
  • CSS LBs不支持IPv6
  • CSS在故障转移方面效果不佳 – 我们希望能够优雅地移动用户stream量,让我们在不中断服务的情况下升级networking服务器。

目的:

  • 让我们以一种“优雅”的方式去激活一半的networking服务器(即新的用户连接转到一个指定的networking服务器子组,它告诉我们什么时候现有的连接被closures – 如果它能强制closures,吨通知)。
  • 让我们在不中断服务的情况下重新启动/重新configuration负载均衡器
  • 支持你期望的通常的高级内容(如果单个服务器爆炸或崩溃,不要中断)
  • 我想这样做,而不花费商业/硬件负载平衡器$$$
  • 如果可能的话,我想在Linux上这样做,以利用内部的经验。
  • 其余的企业都喜欢“企业”的东西,因为当它出错时,他们会责怪别人。 所以无论我推荐什么,都需要像商业解决scheme一样可靠。

思路:

  • 两对HAProxy。 我们将使用HAProxy套接字控制机制( http://code.google.com/p/haproxy-docs/wiki/UnixSocketCommands )正常删除networking服务器。 每一对将使用心跳维护服务,我们将修改DNS指向另一对将新的用户连接移动到另一对。 需要某种forms的监控来告诉我们何时某个对有0个活动连接。

  • 两台Linux机器通过iptables和-m随机模块进行平衡。 我会使用心跳来让HA VIP保持在其中一台机器上,我会使用conntrackd来同步TCP连接状态,这样我们就可以在不丢失服务的情况下进行故障切换。 将需要一些脚本来插入/删除iptables规则取决于后端的状态(除非有人知道一个工具?)

有没有人对上述有任何意见? 还是其他/更好/免费的想法?

谢谢!

HAProxy是伟大的(从经验),我不知道你是否知道更新的function,如同步使用peers指令的棍子表(如果你有持久性启用)。 有关更多信息,请参阅1.5手册: http : //haproxy.1wt.eu/download/1.5/doc/configuration.txt

HAProxy还能够支持IPv6 – > IPv4转换; 如果您的内部networking仍在使用IPv4地址,但是您的公共networking不是,则非常有用。

有一件事从你的列表中遗漏–LVS / IPVS是Linux内核的一部分。 它也是IPv6的能力(虽然不能翻译,因为不是代理)。 性能非常好,通常与ldirectord(一个Perl守护进程)一起用于健康检查和服务器脱机/联机function。 http://horms.net/projects/ldirectord/ 。 您可以优雅地重新加载ldirectordconfiguration文件,或直接使用ipvsadm命令使服务器脱机,更改权重等.LVS也具有同步function: http ://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS- HOWTO.server_state_sync_demon.html

您没有提到是否需要持久性/粘性,但LVS可以坚持源IP,HAProxy有几种select:Cookie,源IP,RDP cookie。

虽然不能执行SSL终止,但这可以由Stunnel,Pound和其他几个人来处理。

Apache Traffic Server看起来非常有前途。 我现在使用的是BigIPs,这对你所寻找的东西来说很好,但是我不相信你可以节省任何资金。

看看你的目标,我build议你跟KEMP Technologies(www.kemptechnologies.com)交谈,我现在用它来做我自己的networking应用程序,你可以禁用networking服务器,从服务器上去掉连接,这样新的连接就转到其他的连接上服务器和现有服务器将保持一段时间,并将逐渐迁移到其他服务器。 它们提供了高可用性,可以select在单元之间同步连接和关联/持久性表,以便第二个单元知道客户端在通过第一个负载平衡器时连接了哪个服务器。 他们也提供SSL卸载,如果您有大量的SSLstream量,也可以用硬件完成。

他们的成本价值增值清单非常短,这使得在第一次尝试时就可以更容易地获得您想要的东西。