我正在查看显示 EC2 实例 CPU 负载的图表。我发现当 EC2 实例 1 的 CPU 增加时,实例 2 的 CPU 会同时减少。一段时间(5 分钟)后,它们的变化是实例 1 减少而实例 2 增加,接下来的 5 分钟后它们再次发生变化,依此类推。
问题
- 这是否意味着 aws ELB 会在一段时间内将请求路由到实例?例如,1 个实例需要 10 秒,另一个实例需要 10 秒?
- 或者它会路由批量请求?例如,前 100 个请求发送到 1 EC2,接下来的 100 个请求发送到 2,依此类推?
文档说 AWS ELB 使用循环赛。但我认为,如果他们将每个请求路由到下一个实例,就不会出现不同的方向,例如,所有实例的负载都会有 1-2% 的差异,但趋势相同(增加或减少)。我说得对吗?
图表如下(大约 18 个 EC2,左边是 CPU 负载百分比):
更新
- 它是经典的负载均衡器
- 有 2 个可用区域,每个区域有 9 个实例。
答案1
从 AWS 站点
传统负载均衡器,接收请求的负载均衡器节点使用循环路由算法(对于 TCP 侦听器)和最少未完成请求路由算法(对于 HTTP 和 HTTPS 侦听器)选择注册实例。
但是,如果您启用了粘性会话,情况可能会发生变化。使用粘性会话:
您可以使用粘性会话功能(也称为会话亲和性),该功能使负载均衡器能够将用户的会话绑定到特定实例。这可确保会话期间来自用户的所有请求都发送到同一个实例。
http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html
粘性会话是否会导致您所看到的行为?
答案2
正如迈克尔提到的,粘性会话可能会影响传入连接的负载平衡方式。
我不知道您正在运行什么类型的应用程序,但您可以随时检查 Web 服务器的访问日志或中间件访问日志,这可以让您了解哪些节点在何时接收流量。