Amazon Elastic Compute Cloud
用户指南(适用于 Linux 实例)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

置放群组

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

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

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

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

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

集群置放群组

集群置放群组是单个可用区中的实例的逻辑分组。置放群组可跨越同一区域中的对等 VPC。除了 10 Gbps 流限制之外,集群置放群组的主要优点还包括连接的非阻塞、非超额订阅、完全双截面特性。也就是说,置放群组内的所有节点都可以以 10 Gpbs 流和 25 次聚合的全线速率与该置放群组内的所有其他节点进行通信,而不会由于超额订阅而发生任何减速。

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


                集群置放群组

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

我们建议您在单个启动请求中启动置放群组中需要数量的实例,并对置放群组中的所有实例使用相同的实例类型。如果您以后尝试将更多实例添加到置放群组,或者如果您尝试在置放群组中启动多个实例类型,都会增大发生容量不足错误的可能性。

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

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

分区置放群组

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

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


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

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

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

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

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

分布置放群组

分布置放群组是一组具有以下特点的实例:每个实例放置在不同的机架上,并且每个机架具有各自的网络和电源。

下图显示单个可用区中的 7 个实例,这些实例已放入一个分布置放群组。7 个实例放置在 7 个不同的机架上。


                分布置放群组

建议在具有少量应单独放置的重要实例的应用程序中使用分布置放群组。通过在分布置放群组中启动实例,可以降低在实例具有相同机架时同时发生故障的风险。分布置放群组可以访问不同的机架,因而适合混用不同类型的实例或随着时间的推移启动实例。

分布置放群组可以跨越同一区域中的多个可用区。每个群组在每个可用区中最多有 7 个正在运行的实例。

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

置放群组规则和限制

一般规则和限制

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

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

  • 不能合并置放群组。

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

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

  • 无法在置放群组中启动租赁为 host 的实例。

  • 如果实例启用了增强联网,则在使用 IPv4 或 IPv6 地址对同一区域中实例之间的流量进行寻址时,对于单个流的流量,实例最多可使用 5 Gbps;对于多个流的流量,实例最多可使用 25 Gbps。一个流表示一个点对点的网络连接。

集群置放群组规则和限制

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

  • 将实例启动到集群置放群组中时,只能使用以下实例类型:

    • 通用型:A1、M4、M5、M5a、M5ad 和 M5d

    • 计算优化型:C3、C4、C5、C5d、C5n 和 cc2.8xlarge

    • 内存优化型:cr1.8xlarge、R3、R4、R5、R5a、R5ad、R5d、X1、X1e 和 z1d

    • 存储优化型:D2、H1、hs1.8xlarge、I2、I3 和 I3en

    • 加速计算型:F1、G2、G3、P2 和 P3

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

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

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

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

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

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

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

分区置放群组规则和限制

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

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

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

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

  • 专用主机 不支持分区置放群组。

分布置放群组规则和限制

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

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

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

创建置放群组

您可以使用 Amazon EC2 控制台或命令行创建置放群组。

创建置放群组(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 指定群组的名称。

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

  5. 选择 Create

创建置放群组(命令行)

创建分区置放群组 (AWS CLI)

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

    aws ec2 create-placement-group --group-name HDFS-Group-A --strategy partition --partition-count 5

在置放群组中启动实例

您可以专门创建一个 AMI 以在置放群组中启动实例。为此,请启动一个实例,并在该实例上安装所需的软件和应用程序。然后,从该实例中创建一个 AMI。有关更多信息,请参阅创建 Amazon EBS 支持的 Linux AMI

在置放群组中启动实例(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

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

    • 选择一个 Amazon 系统映像 (AMI) 页上,选择一个 AMI。要选择您创建的 AMI,请选择我的 AMI

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

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

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

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

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

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

在置放群组中启动实例(命令行)

  1. 使用以下命令之一为实例创建 AMI:

  2. 使用以下选项之一将实例启动到置放群组:

在分区置放群组的特定部分中启动实例 (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"

描述置放群组中的实例

您可以使用 Amazon EC2 控制台或命令行查看实例的置放信息。可使用控制台查看置放群组。当前只能使用 API 或 AWS CLI 查看分区置放群组中实例的分区编号。

查看实例的置放群组(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择实例,在详细信息窗格中,检查 Placement group (置放群组)。如果实例未在置放群组中,则此字段为空。否则,将显示置放群组名称。如果置放群组是分区置放群组,则检查 Partition number (分区编号) 以查看实例的分区编号。

查看分区置放群组中实例的分区编号 (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 命令并指定具有 placement-group-nameplacement-partition-number 筛选条件的 --filters 参数。在此示例中,置放群组名为 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 开发工具包来更改实例的置放群组。

将实例移至置放群组(命令行)

  1. 使用以下命令之一停止实例:

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

    aws ec2 modify-instance-placement --instance-id i-0123a456700123456 --group-name MySpreadGroup

    或者,使用 Edit-EC2InstancePlacement 命令 (适用于 Windows PowerShell 的 AWS 工具)。

  3. 使用以下命令之一重新启动实例:

删除置放群组中的实例(命令行)

  1. 使用以下命令之一停止实例:

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

    aws ec2 modify-instance-placement --instance-id i-0123a456700123456 --group-name ""

    或者,使用 Edit-EC2InstancePlacement 命令 (适用于 Windows PowerShell 的 AWS 工具)。

  3. 使用以下命令之一重新启动实例:

删除置放群组

如果您需要替换或不再需要某个置放群组,您可以将其删除。您必须先终止在您的置放群组中启动的所有实例或将这些实例移动到另一个置放群组,然后才能删除您的置放群组。

终止或移动实例并删除置放群组(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择并终止置放群组中的所有实例。在终止实例之前,您可以在详细信息窗格中检查置放组值以确认该实例位于某个置放组中。

    或者,执行更改实例的置放群组中的步骤以将实例移动到其他置放群组。

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

  5. 选择该置放群组,然后选择删除置放群组

  6. 当系统提示进行确认时,选择 Delete

终止实例并删除置放群组(命令行)

您可以使用以下任一命令集。有关这些命令行界面的更多信息,请参阅 访问 Amazon EC2