在某些情况下,AWS ELB不会将请求分发到自动扩展组EC2实例

Joe*_* Wu 5 jmeter amazon-web-services amazon-elb autoscaling

我正在尝试使用jmeter对我的AWS自动缩放组进行性能测试.

首先,我进行了扩大/缩小测试.我将阈值设置为70%cpu利用率2个周期,每个周期为2分钟.ELB工作正常,并且在系统向外扩展后,请求被分发到自动扩展组中的所有EC2实例,尽管不相等.

接下来,我想测试两个实例的加载是否是一个实例的两倍.我修复了自动缩放组的实例编号,我将最小/最大/期望实例计数设置为2.当我从单个JMeter推送负载时,总是只有一个实例工作且其cpu利用率几乎达到100%,但是另一个实例的cpu利用率仍为零....如果我从包含多个从属的JMeter集群推送负载,则所有实例都会加载.

有人说,也许负载不够重,所以ELB认为只有一个实例可以处理它并且没有向其他实例发送请求.我不这么认为,因为我只是从这个JMeter集群的一个slave推送负载,但是我增加了负载,只有一个实例处理请求.

我发现一个博客说ELB在HA方面很棒,但没有负载平衡. https://www.stackdriver.com/elb-affinity-problems 但是,我不认为只有一个实例处理请求的行为是正常的.

ELB负载平衡机制到底是什么?我糊涂了.

kuk*_*ido 3

弹性负载均衡机制

\n\n
    \n
  • DNS 服务器使用 DNS 循环来确定特定可用区中的哪个负载均衡器节点将接收请求
  • \n
  • 选定的负载均衡器检查“粘性会话”cookie
  • \n
  • 选定的负载均衡器将请求发送到负载最少的实例
  • \n
\n\n

更详细地说:

\n\n

可用区不太可能是你的情况

\n\n

默认情况下,负载均衡器节点将流量路由到同一可用区内的后端实例。为了确保您的后端实例能够处理每个可用区中的请求负载,每个可用区中拥有大致相等数量的实例非常重要。例如,如果您在可用区 us-east-1a 中有 10 个实例,在 us-east-1b 中有两个实例,则流量仍将在两个可用区之间平均分配。因此,us-east-1b 中的两个实例必须提供与 us-east-1a 中的 10 个实例相同的流量。

\n\n

会话很可能是你的情况

\n\n

默认情况下,负载均衡器将每个请求独立路由到负载最小的服务器实例。相比之下,粘性会话将用户的会话绑定到特定的服务器实例,以便会话期间来自用户的所有请求都将发送到同一服务器实例。

\n\n

当为应用程序启用粘性会话时,AWS Elastic Beanstalk 使用负载均衡器生成的 HTTP cookie。负载均衡器使用特殊的负载均衡器\xe2\x80\x93生成的cookie来跟踪每个请求的应用程序实例。当负载均衡器收到请求时,它首先检查请求中是否存在此 cookie。如果是,则请求将发送到 cookie 中指定的应用程序实例。如果没有cookie,负载均衡器将根据现有的负载均衡算法选择应用程序实例。将 cookie 插入到响应中,用于将同一用户的后续请求绑定到该应用程序实例。策略配置定义了 cookie 过期时间,它确定了每个 cookie 的有效期。

\n\n

路由算法不太可能是你的情况

\n\n

负载均衡器节点使用最少连接路由算法将请求发送到同一可用区内的健康实例。最少连接路由算法有利于具有最少连接或未完成请求的后端实例。

\n\n

资料来源:Elastic Load Balancing 术语和关键概念

\n\n

希望能帮助到你。

\n