如何在 2 个不同可用区的 2 个 ec2 实例之间分配 2 个任务?

Posted

技术标签:

【中文标题】如何在 2 个不同可用区的 2 个 ec2 实例之间分配 2 个任务?【英文标题】:How can I spread 2 tasks between 2 ec2 instances in 2 different Availability zones? 【发布时间】:2017-12-19 18:10:17 【问题描述】:

我有一个集群,比如说我的集群。它有 2 个服务正在运行。让我们称它们为我的服务。每个服务有 1 个任务正在运行。我的任务 1 和我的任务 2。

EC2 实例由启动 2 个 EC2 实例的自动扩展组启动。我正在使用应用程序负载平衡器。

当我创建服务时,我选择了 AZ-balance-spread,它被描述为:“此模板将跨可用区分布任务,并在可用区内跨实例分布任务。了解更多信息。 策略:spread(attribute:ecs.availability-zone), spread(instanceId)"

我的 EC2 实例位于不同的可用区。但是,当我单击 my-cluster 并选择 ECS-instances 选项卡时,我看到 2 个任务都在 1 个容器实例上运行。另一个容器实例说 0 个任务正在运行。

我期待 2 个容器实例,每个容器实例运行 1 个任务。

我的问题是,如果我选择了 AZ-balance-spread,这些任务不应该分布在位于不同 AZ 的 2 个 EC2 实例之间吗?

我想设置它,以便所有任务都分布在 AZ 之间,这样如果一个实例出现故障,另一个 AZ 中另一个实例上的另一个任务仍然运行。但我似乎无法弄清楚如何做到这一点。话虽如此,如果我创建 4 个任务,它确实会将它们分布在两个实例之间。一个任务2个,另一个任务2个。但是当我只有 2 个任务时,它会将它们全部放在一个 EC2 实例中。

非常感谢您在解开这个谜团方面的帮助!

谢谢!

【问题讨论】:

【参考方案1】:

这是亚马逊未能完美运作的东西。我找到的最佳解决方法是将放置策略配置为在 ec2 之间随机分布。 问题是每个服务都设置了所有放置策略,所以如果我们配置为使用 InstanceID 进行传播,该服务内的任务将使用此设置,但其他服务不使用此信息并使用相同的策略进行传播,启动相同的 InstanceID(可能是因为编号顺序)。

所以我已将所有服务配置为随机的,如果这些服务是可扩展的,这不是一个好方法,但就我而言,我有 24 个服务,每个服务只有 1 个任务。使用随机策略,它们在所有集群实例之间传播。

"placementStrategy": [
    
        "type": "random"
    
]

【讨论】:

以上是关于如何在 2 个不同可用区的 2 个 ec2 实例之间分配 2 个任务?的主要内容,如果未能解决你的问题,请参考以下文章

为啥所有 EC2 实例都在同一个可用区启动?

EC2中的2个不同可用区是作为WAN还是LAN?

如何在不使用 Auto-scaling 的情况下在一个区域的 3 个不同 AZ 中启动三个相同的 EC2 实例

无法在 AWS VPC 中不同可用区的子网之间路由

我们可以将两种不同类型的 AWS EC2 实例与弹性 beantalk 负载均衡器一起使用吗

同一子网中具有相同安全组的 2 个 ec2 实例,但 1 个不可访问