在Amazon EC2中负载平衡?

我们在亚马逊EC2上已经和HAProxy打了几天了, 迄今为止的经验已经非常好,但是我们却一直在阻碍软件负载平衡器的性能提升。 我们并不完全是Linuxnetworking专家(我们通常是一个.NET商店),但是我们迄今为止一直都在持有我们自己的产品,试图设置合适的限制,检查内核消息和tcpdump是否有任何违规行为。 到目前为止,我们已经达到了约1700个请求/秒的高峰,此时客户端超时(我们一直在使用和调整httperf为此目的)。 一位同事和我正在听最近的Stack Overflow播客,其中Reddit创始人指出,他们的整个网站都跑掉了一个HAProxy节点,而且到目前为止还没有成为一个瓶颈。 确认! 要么是没有看到那么多的并发请求,我们做了一些可怕的错误,或者EC2的共享特性限制了Ec2实例的networking堆栈(我们使用的是一个大的实例types)。 考虑到Joel和Reddit创始人都同意networking可能成为限制因素,这有可能是我们看到的限制吗?

任何想法,非常感谢!

编辑它看起来像实际问题不是,实际上,与负载平衡节点! 罪魁祸首实际上是运行httperf的节点,在这种情况下。 由于httperf为每个请求构build和拆分套接字,所以在内核中花费了大量的CPU时间。 当我们提高请求速率时,TCP FIN TTL(默认为60s)将套接字保持太长时间,对于这种使用情况,ip_local_port_range的默认值过低。 基本上,在客户端(httperf)节点持续创build和销毁新套接字几分钟之后,未使用的端口数量用完了,并且在此阶段后续的“请求”出错,产生低的请求/秒数和大量的错误。

我们也看过nginx,但是我们一直在和RighScale合作,他们已经有了HAProxy的插件脚本。 噢,当然,除非certificate是绝对必要的,否则我们的时间太紧了。 实际上,在AWS上允许我们使用nginx并行地(如果有保证的话)testing另一个设置,并在晚些时候进行切换。

这个页面很好地描述了每个sysctlvariables(在这种情况下,调整了ip_local_port_range和tcp_fin_timeout)。

不是真正的答案你的问题,但nginx和英镑都有负载平衡器良好的声誉。 WordPress只是切换到nginx ,效果不错。

但更具体地说,要debugging你的问题。 如果你没有看到100%的CPU使用率(包括I / O等待),那么你是networking绑定,是的。 EC2在内部使用一个千兆networking,尝试使用一个XL实例,所以你有自己的底层硬件,而不必共享那个千兆networking端口。

不直接回答这个问题,但EC2现在支持通过Elastic Load Balancing进行负载平衡,而不是在EC2实例中运行自己的负载平衡器。

编辑:亚马逊的路线53 DNS服务现在提供了一个方法来指向一个ELB顶级域名与“别名”的logging。 由于Amazon知道ELB的当前IP地址,因此它可以返回该当前IP的Alogging,而不必使用CNAMElogging,同时仍然可以随时更改IP。

是的,你可以使用一个非现场负载平衡器..在裸机LVS是一个很好的select,但你的延迟将是可怕的! 有传言说,亚马逊正在修复CNAME问题。 然而,他们不太可能添加https,深度或自定义运行状况检查,反馈代理,URL匹配,cookie插入(并且一些架构良好的人也会说得很对。)但是,这就是为什么Scalr,RightScale和其他人使用HAProxy通常是两个他们在一个循环的DNS入口后面。 在Loadbalancer.org,我们即将启动我们自己的EC2负载均衡应用程序: http ://blog.loadbalancer.org/ec2-load-balancer-appliance-rocks-and-its-free-for-now-anyway/我们正在计划使用SSH脚本来进行自动缩放,就像使用权限一样,博客上的任何评论都会被赞赏。 谢谢

我会考虑切换到非现场负载均衡器,而不是在云端,并在其上运行类似IPVS的东西。 如果亚马逊没有限制源数据包的源IP,那么你可以使用单向负载平衡机制。 我们做这样的事情,同时得到大约80万个请求(虽然我们没有处理延迟)。 我也会说使用“ab2”(阿帕奇板凳),因为它是多一点用户友好,并容易在我的愚见使用。

即使你的问题解决了。 KEMP Technologies现在拥有一套全面的AWS负载平衡器。 可以为你节省一些麻烦。