我正在对我们的系统进行压力测试。目前,我们有 5 个 m1.large 实例在 ELB 后面运行,位于东部地区。在西部地区,有 3 个小型实例(使用 JMeter),我使用它们来测试系统。
在进行测试时,仅将应用实例推至其 CPU 限制的 80%-90%(当时我们的瓶颈),我看到了一个奇怪的行为,ELB 报告所有 5 个实例都“停止服务 - 暂时错误 - 请稍后检查”,所有实例都停止接收请求,大约 5-10 秒后一切恢复正常。这种情况每 30 秒左右发生一次。但是!每次我运行测试时都不会发生这种情况。我刚刚运行了半小时的压力测试,使用相同的设置,一切都运行正常。发生了什么?
顺便说一下我的健康检查是
Ping Target: HTTP:80/index.html Timeout: 60 seconds Interval: 300 seconds Unhealthy Threshold: 10 Healthy Threshold: 2
所以不可能是失败了。我以前从来没有遇到过这种情况,直到昨天。
答案1
我们还遇到了一个暂时的“盒子无缘无故地无法通过健康检查”问题,通过与亚马逊支持部门的合作,我们发现 ELB 和 Apache KeepaliveTimeout 之间存在交互。如果健康检查间隔大于超时,那么健康检查器可以尝试重用不良连接,导致测试失败并将您的实例从 ELB 中剔除。他们称我们的 60 秒间隔“异常长”。我们现在正在处理它,但请尝试将您的间隔设置为较低,并将其与 Apache 中的 keepalive 设置相匹配。
答案2
对 ELB 进行压力测试的最佳方法是获取它们提供的 cname 后面使用的 ips。使用这些 ips 来命中负载均衡器。确保在为 ELB 选择的每个 az 中至少有一个图像。Amazon 动态扩展 ELB 后面的 ips,您的负载均衡器可能只命中一个 ip。我不确定您遇到的零星行为。
答案3
这可能是由于 JVM 或 OS 级别的 DNS 缓存,因此您的所有请求都会影响 1 个 ELB IP 或被分发,因此 ELB 本身成为故障点,而不是提供故障转移。
从 JMeter 2.12 及以上版本开始DNS 缓存管理器配置元素可用于测试负载平衡应用程序。
看DNS 缓存管理器:测试负载平衡应用程序的正确方法指南以获得更详细的解释和说明。