我们已经在亚马逊EC2上与 HAProxy 争夺了几天;到目前为止,这种体验一直很好,但我们仍然在努力从软件负载均衡器中挤出更多性能。我们并不完全是Linux网络高手(我们通常是.NET商店),但我们到目前为止仍然拥有自己的,试图设置适当的ulimits,检查内核消息和tcpdumps是否存在任何异常情况。 到目前为止,我们达到了大约1,700个请求/秒的平台,此时客户端超时比比皆是(我们一直在使用和调整 httperf 。一位同事和我正在收听最新的Stack Overflow播客,其中Reddit创始人注意到他们的整个站点都运行在一个HAProxy节点上,并且到目前为止它还没有成为瓶颈。确认!要么以某种方式没有看到许多并发请求,我们正在做一些可怕的错误,或者EC2的共享性质限制了Ec2实例的网络堆栈(我们使用的是大型实例类型)。考虑到Joel和Reddit创始人都认为网络可能是限制因素这一事实,我们看到的限制是否可能?

非常感谢任何想法!

编辑事实上,实际问题似乎与负载均衡器节点无关!罪魁祸首实际上是运行httperf的节点,在这个例子中。由于httperf为每个请求构建并拆除套接字,因此它在内核中花费了大量的CPU时间。当我们提高请求率时,TCP FIN TTL(默认为60秒)会使套接字保持太长时间,并且ip_local_port_range的默认值对于此使用方案来说太低了。基本上,在客户端(httperf)节点持续创建和销毁新套接字几分钟后,未使用的端口数量用尽,后续“请求”在此阶段出错,产生的请求数/秒数较少且数量较多错误。

我们也看过nginx,但我们一直在使用RighScale,他们已经有了HAProxy的插件脚本。哦,当然,除非证明是绝对必要的,否则我们的截止日期太紧了[当然]。幸运的是,在AWS上允许我们并行测试使用nginx的另一个设置(如果有保证),并在稍后进行切换。

此页相当好地描述了每个sysctl变量(在这种情况下,调整了ip_local_port_range和tcp_fin_timeout)。

有帮助吗?

解决方案

不是你的问题的答案,但是nginx和pound都有良好的声誉作为负载均衡器。 Wordpress只需切换到nginx 即可获得良好的效果。

但更具体地说,调试你的问题。如果你没有看到100%的CPU使用率(包括I / O等待),那么你是网络绑定的,是的。 EC2内部使用千兆网络,尝试使用XL实例,因此您可以自己拥有底层硬件,而不必共享该千兆网络端口。

其他提示

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

编辑:亚马逊的Route 53 DNS服务现在提供了一种方法,可以使用“别名”指向ELB的顶级域名。记录。由于亚马逊知道ELB的当前IP地址,因此它可以返回当前IP的A记录,而不必使用CNAME记录,同时还可以随时自由更改IP。

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

我会考虑切换到异地负载均衡器,而不是在云端,并在其上运行类似IPVS的东西。 [之所以脱离亚马逊的云是因为内核的东西]如果亚马逊没有限制来自你的数据包的源IP,你可以使用单向负载平衡机制。我们做这样的事情,它给我们带来了大约800,000个同时发出的请求[虽然我们没有处理延迟]。我也会说使用“ab2”。 (apache bench),因为它更加用户友好,并且在我的拙见中更容易使用。

即使您的问题已解决。 KEMP Technologies现在拥有适用于AWS的全面负载均衡器。可能会为你省去一些麻烦。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top