置放群组 - Amazon Elastic Compute Cloud

置放群组

在您启动新的 EC2 实例时,EC2 服务会尝试以某种方式放置实例,以便将所有实例分布在基础硬件上以最大限度减少相关的故障。您可以使用置放群组影响如何放置一组相互依赖的实例,从而满足您的工作负载需求。根据工作负载类型,您可以使用以下置放策略之一创建置放群组:

  • 集群 – 将一个可用区中靠近的实例打包在一起。通过使用该策略,工作负载可以实现所需的低延迟网络性能,以满足高性能计算(HPC)应用程序通常使用的紧密耦合的节点到节点通信的要求。

  • 分区 – 将实例分布在不同的逻辑分区上,以便一个分区中的实例组不会与不同分区中的实例组使用相同的基础硬件。该策略通常为大型分布式和重复的工作负载所使用,例如,Hadoop、Cassandra 和 Kafka。

  • 分布 – 将一小组实例严格放置在不同的基础硬件上以减少相关的故障。

创建置放群组无需支付费用。

置放群组策略

您可以使用以下一种置放策略创建置放群组。

集群置放群组

集群置放群组是单个可用区中的实例的逻辑分组。集群置放群组可横跨同一区域中的对等虚拟专用网络(VPC)。同一集群置放群组中的实例可针对 TCP/IP 流量享受更高的每流吞吐量限制,并且这些实例将处于网络的同一高等分带宽段中。

下图显示放入集群置放群组中的实例。


                    集群置放群组。

建议将集群置放群组用于可受益于低网络延迟和/或高网络吞吐量的应用程序。如果大部分网络流量在组中的实例之间进行,也建议使用集群置放群组。要为置放群组提供最低延迟和最高每秒数据包数的网络性能,请选择支持增强联网的实例类型。有关更多信息,请参阅增强联网

我们建议您按照以下方法启动您的实例:

  • 使用单个启动请求在置放群组中启动所需的实例数。

  • 对置放群组中的所有实例使用相同的实例类型。

如果您以后尝试将更多实例添加到置放群组,或者如果您尝试在置放群组中启动多个实例类型,都会增大发生容量不足错误的可能性。

如果您停止置放群组中的某个实例,然后重启该实例,则其仍将在该置放群组中运行。但是,如果没有足够容量可用于该实例,则启动将会失败。

如果您在已有正在运行的实例的置放群组中启动实例时接收到容量错误信息,请在该置放群组中停止并启动所有实例,然后尝试再次启动。启动实例可能会将实例迁移至具有针对所有请求实例的容量的硬件。

分区置放群组

分区置放群组可帮助您的应用程序减少相关硬件故障的可能性。在使用分区置放群组时,Amazon EC2 将每个群组划分为多个逻辑段(称为“分区”)。Amazon EC2 确保置放群组中的每个分区具有自己的一组机架。每个机架具有自己的网络和电源。置放群组中的任何两个分区将不会分享相同的机架,从而让您可以在您的应用程序中隔离硬件故障的影响。

下图是单个可用区中的分区置放群组简单的直观表示。它显示了放入到一个分区置放群组的实例,该置放群组具有三个分区 — 分区 1分区 2分区 3。每个分区均包含多个实例。一个分区中的实例不与其他分区中的实例共享机架,这使您可以将单一硬件故障的影响限定在相关的分区内。


                    具有 3 个分区的分区置放群组。

可使用分区置放群组跨不同机架部署大型分布式和重复的工作负载,例如 HDFS、HBase 和 Cassandra。当您在分区置放群组中启动实例时,Amazon EC2 将尝试跨您指定数量的分区均匀分发实例。您还可以在特定分区中启动实例,以更好地控制实例的放置位置。

分区置放群组可以在同一区域的多个可用区中具有分区。对于每个可用区,一个分区置放群组最多可具有 7 个分区。可在分区置放群组启动的实例的数量仅受账户限制的限制。

此外,分区置放群组提供对分区的可见性,您可以查看哪些实例位于哪些分区中。您可以与具有感知技术能力的应用程序共享此信息,例如 HDFS、HBase 和 Cassandra。这些应用程序使用此信息做出智能数据复制决策,用于提升数据的可用性和持久性。

如果在一个分区置放群组中启动一个实例,而没有足够的独特硬件来满足请求,则请求将失败。Amazon EC2 会随着时间的推移提供更多不同的硬件,因此,您稍后可以重试请求。

分布置放群组

分布置放群组是将实例分别置放在不同硬件上的实例群组。

建议在具有少量应单独放置的重要实例的应用程序中使用分布置放群组。通过在分布置放群组中启动实例,可以降低在实例位于同一设备中时同时出现故障的风险。分布置放群组使用不同的硬件,因而适合混用不同类型的实例或随着时间推移逐步启动实例的场景。

如果在一个排列置放群组中启动一个实例,而没有足够的独特硬件来满足请求,则请求将失败。Amazon EC2 会随着时间的推移提供更多不同的硬件,因此,您稍后可以重试请求。置放群组可以跨机架或主机分布实例。主机级别分布置放群组只能用于 AWS Outposts。

机架级别分布置放群组

下图显示单个可用区中的 7 个实例,这些实例已放入一个分布置放群组。将七个实例置放在七个不同的机架上,每个机架都具有自己的网络和电源。


                    分布置放群组。

机架分布置放群组可以跨越同一区域中的多个可用区。对于机架分布置放群组,每个群组在每个可用区中最多可以运行七个实例。

主机级别分布置放群组

主机级别置放群组仅适用于 AWS Outposts。对于主机级别分布置放群组,每个 Outpost 上可运行的实例数量没有限制。有关更多信息,请参阅AWS Outposts 上的置放群组

置放群组规则和限制

一般规则和限制

在使用置放群组之前,请注意以下规则:

  • 在每个区域中,最多可以为每个账户创建 500 个置放群组。

  • 您为置放群组指定的名称在您的区域 AWS 账户中必须是唯一的。

  • 不能合并置放群组。

  • 一次可在一个置放群组中启动一个实例;实例不能跨多个置放群组。

  • 按需容量预留zonal 预留实例 为特定的可用区中的 EC2 实例提供容量预留。置放群组中的实例可以使用容量预留。使用带有容量预留的集群置放群组时,建议您在集群置放群组内预留容量。有关更多信息,请参阅集群置放群组中的容量预留

    可用区预留实例在特定的可用区中提供实例容量预留。置放群组中的实例可以使用容量预留。但是,您无法使用可用区预留实例为置放群组显式预留容量。

  • 您无法在置放群组中启动专用主机。

集群置放群组规则和限制

以下规则适用于集群置放群组:

  • 支持以下实例类型:

  • 一个集群置放群组不能跨过多个可用区。

  • 集群置放群组中的两个实例之间的最大网络吞吐量流量速度受两个实例中的较慢实例限制。对于具有高吞吐量要求的应用程序,请选择其网络连接满足您要求的实例类型。

  • 对于启用了增强联网的实例,以下规则适用:

    • 对于单个流的流量,集群置放群组中的实例最多可以使用 10 Gbps。对于单个流的流量,不在集群置放群组中的实例最多可以使用 5 Gbps。

    • 在同一个区域中,通过公有 IP 地址空间或者通过 VPC 终端节点往返于 Amazon S3 存储桶之间的流量可以使用所有可用的实例聚合带宽。

  • 您可以将多种类型的实例启动到集群置放群组中。不过,这会降低提供所需容量以成功完成启动的可能性。我们建议集群置放群组中的所有实例使用相同的实例类型。

  • 指向 Internet 的网络流量以及通过 AWS Direct Connect 连接指向本地资源的流量限制为 5 Gbps。

分区置放群组规则和限制

以下规则适用于分区置放群组:

  • 对于每个可用区,一个分区置放群组最多支持 7 个分区。您可在分区置放群组中启动的实例的数量仅受账户限制的限制。

  • 当您在分区置放群组中启动实例时,Amazon EC2 将尝试跨所有分区均匀分发实例。Amazon EC2 不保证跨所有分区均匀分发实例。

  • 具有 专用实例 的分区置放群组最多可具有 2 个分区。

  • 容量预留不会在分区放置组中预留容量。

分布置放群组规则和限制

以下规则适用于分布置放群组:

  • 机架分布置放群组最多支持在每个可用区运行七个实例。例如,在具有三个可用区的区域中,您可以在组中总共运行 21 个实例,每个可用区 7 个实例。如果您尝试在同一可用区和同一个分布置放群组中启动第八个实例,则该实例将无法启动。如果需要在一个可用区中运行超过七个实例,则建议使用多个分布置放群组。使用多个分布置放群组并不能保证实例在群组之间分布,但可帮助确保每个群组内的分布,从而限制某些故障类别的影响。

  • 专用实例 不支持分布置放群组。

  • 主机级别分布置放群组仅适用于 AWS Outposts 上的置放群组。主机级别分布置放群组对于可运行的实例数量没有限制。

  • 容量预留不会在分布放置组中预留容量。

使用置放群组

创建置放群组

您可以使用以下一种方法创建置放群组。

注意

您只能在创建时使用命令行工具标记置放群组。

Console
使用控制台创建置放群组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Placement Groups (置放群组),然后选择 Create placement group (创建置放群组)

  3. 指定群组的名称。

  4. 选择适用于群组的置放策略。如果选择 Partition (分区),则选择群组中的分区数。

    选择适用于群组的置放策略。

    • 如果选择 Spread(分布),则需要选择分布级别。

      • Rack(机架)– 无限制

      • Host(主机)– 仅适用于 Outposts

    • 如果选择 Partition (分区),则选择群组中的分区数。

  5. 要标记置放群组,请选择 Add tag(添加标签),然后输入键和值。为每个要添加的标签选择 Add tag(添加标签)。

  6. 选择创建组

AWS CLI
使用 AWS CLI 创建置放群组

使用 create-placement-group 命令。以下示例创建一个名为 my-cluster 的置放群组,它使用 cluster 放置策略,并应用键为 purpose 且值为的 production 标签。

aws ec2 create-placement-group --group-name my-cluster --strategy cluster --tag-specifications 'ResourceType=placement-group,Tags={Key=purpose,Value=production}'
使用 AWS CLI 创建分区置放群组

使用 create-placement-group 命令。使用 --strategy 值指定 partition 参数,并使用所需分区数指定 --partition-count 参数。在此示例中,分区置放群组名为 HDFS-Group-A,并包含 5 个分区。

aws ec2 create-placement-group --group-name HDFS-Group-A --strategy partition --partition-count 5
PowerShell
使用 AWS Tools for Windows PowerShell 创建置放群组

使用 New-EC2PlacementGroup 命令。

标记置放群组

要对现有置放群组进行分类和管理,可以使用自定义元数据标记它们。有关标签的工作原理的更多信息,请参阅标记 Amazon EC2 资源

当您标记置放群组时,不会自动标记启动到置放群组中的实例。您需要显式标记启动到置放群组中的实例。有关更多信息,请参阅在启动实例时添加标签

您可以使用 的控制台和命令行工具查看、添加和删除标签。

New console

您可以使用以下方法之一查看、添加和删除标签。

Console
查看、添加或删除现有置放群组的标签
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  3. 在导航窗格中,选择 Placement Groups

  4. 选择置放群组,然后依次选择 Actions (操作)Manage tags (管理标签)

  5. Manage tags (管理标签) 部分显示分配给置放群组的所有标签。执行以下操作以添加或删除标签:

    • 要添加标签,请选择 Add tag (添加标签),然后输入标签键和值。每个置放群组最多可添加 50 个标签。有关更多信息,请参阅标签限制

    • 要删除标签,请选择要删除的标签旁边的 Remove (删除)

  6. 选择 Save changes(保存更改)。

AWS CLI
查看置放群组标签

使用 describe-tags 命令可查看指定资源的标签。在以下示例中,您描述所有置放群组的标签。

aws ec2 describe-tags \ --filters Name=resource-type,Values=placement-group
{ "Tags": [ { "Key": "Environment", "ResourceId": "pg-0123456789EXAMPLE", "ResourceType": "placement-group", "Value": "Production" }, { "Key": "Environment", "ResourceId": "pg-9876543210EXAMPLE", "ResourceType": "placement-group", "Value": "Production" } ] }

还可以使用 describe-tags 命令通过指定置放群组 ID 来查看置放群组的标签。在以下示例中,您将描述 pg-0123456789EXAMPLE 的标签。

aws ec2 describe-tags \ --filters Name=resource-id,Values=pg-0123456789EXAMPLE
{ "Tags": [ { "Key": "Environment", "ResourceId": "pg-0123456789EXAMPLE", "ResourceType": "placement-group", "Value": "Production" } ] }

还可以通过描述置放群组来查看置放群组的标签。

使用 describe-placement-groups 命令可查看指定置放群组的配置,其中包括为置放群组指定的任何标签。

aws ec2 describe-placement-groups \ --group-name my-cluster
{ "PlacementGroups": [ { "GroupName": "my-cluster", "State": "available", "Strategy": "cluster", "GroupId": "pg-0123456789EXAMPLE", "Tags": [ { "Key": "Environment", "Value": "Production" } ] } ] }
使用 AWS CLI 标记现有置放群组

可以使用 create-tags 命令标记现有的资源。在以下示例中,使用 Key=Cost-CenterValue=CC-123 标记现有置放群组。

aws ec2 create-tags \ --resources pg-0123456789EXAMPLE \ --tags Key=Cost-Center,Value=CC-123
使用 AWS CLI 从置放群组中删除标签

您可以使用 delete-tag 命令从现有资源中删除标签。有关示例,请参阅 AWS CLI Command Reference 中的示例

PowerShell
查看置放群组标签

使用 Get-EC2Tag 命令。

描述特定置放群组的标签

使用 Get-EC2PlacementGroup 命令。

标记现有置放群组

使用 New-EC2Tag 命令。

从置放群组中删除标签

使用 Remove-EC2Tag 命令。

在置放群组中启动实例

如果使用以下一种方法满足置放群组规则和限制,则可以在置放群组中启动实例。

Console
使用控制台将实例启动到置放群组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 从 EC2 控制台控制面板中,在 Launch instance(启动实例)框中,选择 Launch instance(启动实例),然后从显示的选项中选择Launch instance(启动实例)。根据提示填写表单,注意完成以下操作:

    • Instance type(实例类型)下,选择可以启动到置放群组中的实例类型。

    • Number of instances(实例数)下的 Summary(汇总)框中,输入该置放群组中需要的实例总数,因为此后可能无法向其中添加实例。

    • Advanced details(高级详细信息)下,对于 Placement group name(置放群组名称),您可以选择将实例添加到某个新置放群组或现有置放群组。如果选择具有分区策略的置放群组,则对于 Target partition(目标分区),选择要在其中启动实例的分区。

Old Console
使用控制台将实例启动到置放群组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择 Launch Instance(启动实例)。按指示完成向导,注意执行以下操作:

    从 EC2 控制台控制面板中,在 Launch instance(启动实例)框中,选择 Launch instance(启动实例),然后从显示的选项中选择Launch instance(启动实例)。按指示完成向导,注意执行以下操作:

    • Choose an Instance Type 页面上,选择可以启动到置放群组中的实例类型。

    • Configure Instance Details (配置实例详细信息) 页面上,以下字段适用于置放群组:

      • Number of instances (实例数) 中,输入您在该置放群组中所需的实例总数,因为您以后可能无法向其中添加实例。

      • 对于 Placement group (置放群组),选择 Add instance to placement group (向置放群组添加实例) 复选框。如果您在此页面上没有看到置放群组,请确认您是否已选择可启动到置放群组的实例类型。否则,此选项不可用。

      • 对于 Placement group name (置放群组名称),您可以选择将实例添加到现有置放群组,或者添加到您创建的新置放群组。

      • 对于 Placement group strategy (置放群组策略),选择适当的策略。如果您选择 partition (分区),则对于 Target partition (目标分区),选择 Auto distribution (自动分配) 以让 Amazon EC2 尽可能在群组的所有分区中平均地分配实例。或者指定要在其中启动实例的分区。

AWS CLI
使用 AWS CLI 在置放群组中启动实例

使用 run-instances 命令,并使用 --placement "GroupName = my-cluster" 参数指定置放群组名称。在此示例中,置放群组名为 my-cluster

aws ec2 run-instances --placement "GroupName = my-cluster"
使用 AWS CLI 在分区置放群组的特定部分中启动实例

使用 run-instances 命令,并使用 --placement "GroupName = HDFS-Group-A, PartitionNumber = 3" 参数指定置放群组名称和分区。在此示例中,置放群组名为 HDFS-Group-A,分区编号为 3

aws ec2 run-instances --placement "GroupName = HDFS-Group-A, PartitionNumber = 3"
PowerShell
使用 AWS Tools for Windows PowerShell 在置放群组中启动实例

使用 New-EC2Instance 命令并使用 -Placement_GroupName 参数指定置放群组名称。

描述置放群组中的实例

您可以使用以下一种方法查看实例的置放信息。您还可以使用 AWS CLI 按分区编号筛选分区置放群组。

Console
使用控制台查看实例的置放群组和分区编号
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择实例。

  4. Details (详细信息) 选项卡中的 Host and placement group (主机和置放群组) 下,找到 Placement group (置放群组)。如果实例未在任何置放群组中,则此字段为空。否则,此字段将包含相应置放群组的名称。如果该置放群组是分区置放群组,则分区编号中将包含该实例的分区编号。

AWS CLI
使用 AWS CLI 查看分区置放群组中实例的分区编号

使用 describe-instances 命令并指定 --instance-id 参数。

aws ec2 describe-instances --instance-id i-0123a456700123456

响应包含置放信息,其中包含实例的置放群组名称和分区编号。

"Placement": { "AvailabilityZone": "us-east-1c", "GroupName": "HDFS-Group-A", "PartitionNumber": 3, "Tenancy": "default" }
使用 AWS CLI 筛选特定分区置放群组和分区编号的实例

使用 describe-instances 命令并指定具有 --filtersplacement-group-name 筛选条件的 placement-partition-number 参数。在此示例中,置放群组名为 HDFS-Group-A,分区编号为 7

aws ec2 describe-instances --filters "Name = placement-group-name, Values = HDFS-Group-A" "Name = placement-partition-number, Values = 7"

响应列出了位于指定置放群组的指定分区中的所有实例。以下示例输出仅显示所返回实例的实例 ID、实例类型和置放信息。

"Instances": [ { "InstanceId": "i-0a1bc23d4567e8f90", "InstanceType": "r4.large", }, "Placement": { "AvailabilityZone": "us-east-1c", "GroupName": "HDFS-Group-A", "PartitionNumber": 7, "Tenancy": "default" } { "InstanceId": "i-0a9b876cd5d4ef321", "InstanceType": "r4.large", }, "Placement": { "AvailabilityZone": "us-east-1c", "GroupName": "HDFS-Group-A", "PartitionNumber": 7, "Tenancy": "default" } ],

更改实例的置放群组

您可以通过以下任一方法更改实例的置放群组:

  • 将现有实例移动到置放群组

  • 将实例从一个置放群组移动到另一个置放群组

  • 从置放群组中删除实例

在移动或删除实例之前,实例必须处于 stopped 状态。您可以使用 AWS CLI 或 AWS 开发工具包移动或删除实例。

AWS CLI
使用 AWS CLI 将实例移动到置放群组
  1. 使用 stop-instances 命令停止实例。

  2. 使用 modify-instance-placement 命令,并指定要将实例移到的置放群组的名称。

    aws ec2 modify-instance-placement --instance-id i-0123a456700123456 --group-name MySpreadGroup
  3. 使用 start-instances 命令启动实例。

PowerShell
使用 AWS Tools for Windows PowerShell 将实例移动到置放群组
  1. 使用 Stop-EC2Instance 命令停止实例。

  2. 使用 Edit-EC2InstancePlacement 命令,并指定要将实例移到的置放群组的名称。

  3. 使用 Start-EC2Instance 命令启动实例。

 

AWS CLI
使用 AWS CLI 从置放群组中删除实例
  1. 使用 stop-instances 命令停止实例。

  2. 使用 modify-instance-placement 命令,并为置放群组名称指定一个空字符串。

    aws ec2 modify-instance-placement --instance-id i-0123a456700123456 --group-name ""
  3. 使用 start-instances 命令启动实例。

PowerShell
使用 AWS Tools for Windows PowerShell 从置放群组中删除实例
  1. 使用 Stop-EC2Instance 命令停止实例。

  2. 使用 Edit-EC2InstancePlacement 命令,并为置放群组名称指定一个空字符串。

  3. 使用 Start-EC2Instance 命令启动实例。

删除置放群组

如果您需要替换或不再需要某个置放群组,您可以将其删除。您可以使用以下一种方法删除置放群组。

要求

在删除置放群组之前,该群组中不能包含任何实例。您可以终止在置放群组中启动的所有实例,将这些实例移动到另一个置放群组,或者将其从置放群组中删除

Console
使用控制台删除置放群组
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Placement Groups

  3. 选择该置放群组,然后依次选择操作删除

  4. 提示进行确认时,输入 Delete,然后选择 Delete(删除)。

AWS CLI
使用 AWS CLI 删除置放群组

使用 delete-placement-group 命令并指定置放群组名称以删除置放群组。在此示例中,置放群组名称为 my-cluster

aws ec2 delete-placement-group --group-name my-cluster
PowerShell
使用 AWS Tools for Windows PowerShell 删除置放群组

使用 Remove-EC2PlacementGroup 命令删除置放群组。