我正在尝试为 AWS 中的 Web 服务器创建一个自动扩展组。
我执行以下操作:
1.- 创建负载均衡器。此负载均衡器检查自动缩放组的第一个实例。
健康检查标签
听众标签
2.- 使用 AMI 创建自动扩展组。策略如下:
- 增加:如果最大 CPU 使用率 >= 70% 持续 1 分钟,则根据 AMI 启动 1 个实例。等待 60 秒后才允许进行另一项扩展活动。
- 减少:如果最大 CPU 使用率在 5 分钟内小于等于 25%,则会删除最新实例。它会等待 0 秒,然后才允许另一个扩展活动。
在自动缩放组的详细信息选项卡中,我有以下内容:- 所需:1
最小值: 1
最大:5
健康检查类型:EC2
健康检查宽限期:60
终止政策:NewestInstance
默认冷却时间 60
这些就是配置。
显然它运行良好。当我们使用 JMeter 为实例充电时,AWS 使用 INCREASE 策略启动一个新实例。问题是,似乎新实例未被使用。因为,当我检查 AWS 的监控图时,CPU 始终保持在 0。所以我认为 AWS 启动的新实例未被使用。我认为这是因为我的负载均衡器配置不正确,但我真的不知道。我该怎么办?
答案1
很多人都忽略了这一点。
当对 ELB 后面带有多个 EC2 实例的 Elastic Load Balancer 进行负载测试时,您需要从多个客户端位置运行测试。每个测试都需要来自一个唯一的 IP 地址。
原因在于 ELB 处理 DNS 请求的方式。根据使用的可用区数量、后端 EC2 实例数量等,ELB 可能会不断将来自同一远程 IP 地址的请求发送到同一后端 EC2 实例。
一些注意事项:
这与“粘性会话”不同,后者使用 cookie 将相同的浏览器会话发送到相同的后端 EC2 实例。
如果您使用多个客户端进行负载测试,请确保您的 PC 不在同一个 NAT 或防火墙后面。由于所有连接都经过 NAT/防火墙,ELB 会将所有连接视为来自同一 IP 地址(NAT/防火墙的 IP 地址)。所以这还不够好。
使用类似的工具http://whatismyipaddress.com查看你的“外部”IP 地址是什么。
参考:
- 个人经验
- 我与 AWS Support 的讨论
- 评估 Elastic Load Balancing 的最佳实践- 请参阅“DNS 解析”部分
- 使用 AWS 弹性负载均衡器的 6 个注意事项- 请参阅“不要被基础设施热点所蒙蔽”部分
- Amazon Elastic Load Balancer (ELB) 的弹性有多大?似乎不太好- 摘自本文:
因此单个负载测试客户端只会命中一个 ELB 实例
- 剖析 Amazon ELB:您应该知道的 18 件事- 参见第 9 点
更新:
再一个参考:
- DNS 缓存管理器:测试负载平衡应用程序的正确方法- 本文特别提到了使用 JMeter 针对 AWS ELB 进行负载测试的问题。
答案2
这里有 2 件事要做。
1) 如果您已将负载均衡器附加到 Auto Scaling 组,则可以选择让 Auto Scaling 在确定实例的运行状况时包含 Elastic Load Balancing 运行状况检查的结果。添加这些运行状况检查后,如果 Elastic Load Balancing 将实例状态报告为 OutOfService,Auto Scaling 也会将实例标记为不正常。建议将 HC 设置为 ELB 而不是 EC2。根据所附的屏幕截图,情况并非如此。
2) 增加流量后,检查 ELB --> 实例选项卡并查看另一个实例启动,以验证该实例是否实际在您所指的 ELB 中注册。
干杯!