我想创建一个具有不同 EC2 实例的 AWS Elastic Classic 负载均衡器。我有不同的 EC2 实例:例如,带有 Ubuntu OS 的 m3 实例,另一个实例是带有 RHEL7 OS 的 m4-large 实例。
是否可以将这两个实例拉到同一个负载均衡器下?如果是不同的实例,应该进行什么配置?
答案1
我的一般建议是将相同大小的实例放在 ELB 后面。
根据 AWS 文档,ELB 使用最少未完成请求算法,因此它会尝试将请求发送到负载最小的服务器。然而,2013 年,一名 AWS 员工表示,ELB 使用循环赛。这意味着您想要使用相同大小的实例。鉴于文档更精确,我倾向于遵循文档所说的内容,但他们是这样说的。
Davin@AWS(来自他们的论坛)
您说得对,ELB 在可用区级别使用轮询算法。这意味着,如果您的 ELB 是多可用区的,则传入请求将在可用区之间分配,然后在每个可用区内的实例之间分配。
因此,我们建议将您的流量分配到每个可用区内相同数量的实例上,以确保请求得到均匀处理。我们还建议使用相同大小的实例,以实现一致的监控和管理行为。
如果您确实混合了实例大小,那么您可能会发现较小的实例在峰值负载期间缺乏资源,而较大的实例可能未得到充分利用并浪费资源。
场景:服务器最初各自获得 5 个作业。较快的服务器完成两个作业,而较慢的服务器只完成一个作业。因此接下来的两个作业将交给较快的服务器。此时,较慢的服务器已完成其工作,因此它很可能会获得下一个请求。
总而言之,我认为这会没问题 - 较慢的服务器将承担较少的工作,至少如果你有一个相当标准的用例。
服务器上的操作系统无关紧要,只要它们都能处理请求即可。它们甚至不必以相同的方式处理请求,但如果它们以相同的方式处理请求,那就最好了。
除非你完全了解 T2 实例和应用程序的负载行为,否则我也会避免将 t2 实例放在 ELB 后面。如果你的实例耗尽了 CPU 信用,ELB应该只要它确实进行最少的连接,就向其发送较少的流量。但是,如果流量被快速处理,并且流量很大,路由算法可能无法有效地分配流量。