我在 AWS 堆栈上运行基于电子商务的 ruby on rails 应用程序。我正在使用弹性负载均衡器运行 ubuntu 10.04 ec2 实例,并且我在可用区 1a 和 1b 中保持了相同数量的实例。但根据我的观察,ELB 似乎将更多流量推向 1a,而不是平均分配。尽管在 1b 中运行的实例的运行状况良好,而且我还禁用了 ELB 上的粘性会话。我在两个可用区上运行了 2 个大型实例和 1 个中型实例。
负载平均分配的原因是什么。
我在 AWS 堆栈上运行基于电子商务的 ruby on rails 应用程序。我正在使用弹性负载均衡器运行 ubuntu 10.04 ec2 实例,并且我在可用区 1a 和 1b 中保持了相同数量的实例。但根据我的观察,ELB 似乎将更多流量推向 1a,而不是平均分配。尽管在 1b 中运行的实例的运行状况良好,而且我还禁用了 ELB 上的粘性会话。我在两个可用区上运行了 2 个大型实例和 1 个中型实例。
负载平均分配的原因是什么。
根据我的经验,如果不成比例的流量来自单个网络或 IP 地址,就会发生这种情况。
ELB 使用不同的平衡层。DNS 负载均衡会将其发送到两个区域之一中的一组 IP 地址,并且软件负载均衡器将在区域中的实例之间分配流量。
如果您有大量来自同一个网络的流量,很可能很多用户在您的负载均衡器上获得相同的 DNS 解析并最终进入同一个区域。
如果源流量来自单个网络/IP 范围或 IP 地址,ELB 可能会不成比例地将流量负载平衡到后端。我已经在我的博客“剖析 ELB”中讨论了这一点以及关于 ELB 的其他一些需要注意的细节。我在一些流行的 OSS LB 实现中也注意到了这种行为,您可以将平衡算法作为“源”并结合会话粘性。如果会话 ID 没有在 HTTP 上发送,那么它将基于“源”进行负载平衡。