如何在2个不同的可用区域中的2个ec2实例之间传播2个任务?

时间:2017-07-14 15:14:12

标签: amazon-web-services amazon-ec2 availability-zone

我有一个集群,比方说我的集群。它有2个服务正在运行。让我们称他为我的服务。每个服务都有1个任务在运行。 my-task1和my-task2。

EC2实例由自动缩放组启动,该组启动2个EC2实例。我正在使用应用程序负载均衡器。

当我创建服务时,我选择了AZ-balance-spread,其描述如下:"此模板将跨可用区域和可用区域内的任务跨越实例传播任务。学到更多。 策略:spread(属性: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个任务。但是当我只有两个任务时,它会将它们全部放在一个EC2实例中。

在解决这个谜团时,非常感谢你的帮助!

谢谢!

1 个答案:

答案 0 :(得分:1)

这不是亚马逊无法完美运行的原因。我为此找到的最佳解决方法是将Placement Strategic配置为在ec2之间随机分布。 问题在于,在每个服务中都设置了所有展示位置策略,因此,如果我们配置为使用InstanceID进行传播,则该服务中的任务将使用此设置,但是其他服务不使用此信息,而是使用相同的策略进行传播,在相同的InstanceID(可能是由于数字顺序)。

因此,我已将所有服务配置为随机服务,如果这些服务具有可伸缩性,那么这不是一个好方法,但就我而言,我有24个服务,每个服务只有一项任务。使用随机策略,它们在所有群集实例之间传播。

"placementStrategy": [
    {
        "type": "random"
    }
]

taks spread between instances