

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用多重挂载将 EBS 卷挂载到多个 EC2 实例
<a name="ebs-volumes-multi"></a>

通过 Amazon EBS 多重挂载，您可以将单个预置 IOPS SSD（`io1` 或 `io2`）卷挂载到位于同一可用区中的多个实例。您可以将多个启用多重挂载的卷附加到一个实例或一组实例。卷附加到的每个实例都对共享卷拥有完全读取和写入权限。通过多重挂载，您可以更轻松地在管理并发写入操作的应用程序中实现更高的应用程序可用性。

**定价和计费**  
使用 Amazon EBS 多重挂载不会产生额外费用。您需要按照适用于预置 IOPS SSD（`io1` 和 `io2`）卷的标准计费。有关更多信息，请参阅 [Amazon EBS 定价](https://aws.amazon.com/ebs/pricing/)。

**Topics**
+ [注意事项和限制](#considerations)
+ [多重挂载卷的性能](ebs-multi-attach-perf.md)
+ [启用多重挂载](working-with-multi-attach.md)
+ [禁用多重挂载](disable-multi-attach.md)
+ [NVMe 预留](nvme-reservations.md)

## 注意事项和限制
<a name="considerations"></a>
+ 启用多重挂载的卷最多可以挂载到位于相同可用区内的基于 [Nitro 系统](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)构建的 16 个实例。
+ **Linux 实例**支持启用多重挂载的 `io1` 和 `io2` 卷。**Windows 实例**仅支持启用多重挂载的 `io2` 卷。
+ 您可以挂载到实例的最大 Amazon EBS 卷数取决于实例类型和实例规模。有关更多信息，请参阅[实例卷限制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html)。
+ 仅在[预调配 IOPS SSD（`io1` 和 `io2`）卷](provisioned-iops.md#EBSVolumeTypes_piops)上才支持多重挂载。
+ `io1` 卷的多重挂载仅在以下区域可用：美国东部（弗吉尼亚州北部）、美国西部（俄勒冈州）和亚太地区（首尔）。

  适用于 `io2` 的多重挂载功能已在所有支持 `io2` 的区域中提供。
**注意**  
为了以更低的成本获得更好的性能、一致性和耐用性，我们建议您使用 `io2` 卷。
+ 当[基于 Nitro System 而构建的实例](https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html)仅支持可扩展的可靠数据报（SRD）网络协议时，将不支持启用了多重挂载的 `io1` 卷。要将多重挂载与这些实例类型结合使用，必须使用 `io2`。
+ 标准文件系统（例如 XFS 和 EXT4）不能被多个服务器（例如 EC2 实例）同时访问。您应使用集群文件系统来确保生产工作负载的数据恢复能力和可靠性。
+ 启用多重挂载的 `io2` 卷支持 I/O 隔离栏。I/O 隔离栏协议控制共享存储环境中的写入访问，以保持数据一致性。您的应用程序必须为附加的实例提供写入顺序，以保持数据一致性。有关更多信息，请参阅 [将 NVMe 预留与启用了多重挂载的 Amazon EBS 卷结合使用](nvme-reservations.md)。

  启用多重挂载的 `io1` 卷不支持 I/O 隔离栏。
+ 无法将启用多重挂载的卷创建为引导卷。
+ 可以将启用多重挂载的卷附加到每个实例的一个块储存设备映射。
+ 无法在实例启动过程中使用 Amazon EC2 控制台或 RunInstances API 启用多重挂载。
+ 在 Amazon EBS 基础结构层存在问题的启用多重挂载的卷对于所有附加的实例都不可用。Amazon EC2 或网络层的问题可能仅影响某些挂载的实例。
+ 下表显示了创建后对启用多重挂载的 `io1` 和 `io2` 卷的卷修改支持。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ebs/latest/userguide/ebs-volumes-multi.html)

  \$1当卷挂载到实例时，您无法启用或禁用多重挂载。
+ 如果最后一个附加的实例终止，并且该实例配置为在终止时删除卷，则启用多重挂载的卷将在实例终止时被删除。如果卷附加到多个实例，而这些实例在其卷块储存设备映射中具有不同的终止时删除设置，则最后一个附加的实例的块储存设备映射设置决定终止时删除行为。

  要确保对终止行为进行可预测删除，为卷挂载到的所有实例启用或禁用“终止时删除”。有关更多信息，请参阅[实例终止时保留数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/preserving-volumes-on-termination.html)。
+ 您可以使用 Amazon EBS 卷的 CloudWatch 指标监控启用了多重挂载的卷。在所有附加的实例之间聚合数据。您无法监控单个附加的实例的指标。有关更多信息，请参阅 [亚马逊 EBS 的亚马逊 CloudWatch 指标](using_cloudwatch_ebs.md)。

# 多重挂载 Amazon EBS 卷的性能
<a name="ebs-multi-attach-perf"></a>

每个附加的实例都能够将其最大 IOPS 性能提升到卷的最大预置性能。但是，所有附加的实例的总体性能不能超过卷的最大预置性能。如果附加实例的 IOPS 需求高于卷的预置 IOPS，则卷不会超过其预置性能。

例如，假设您使用 `io2` 预置 IOPS 创建 `80,000` 启用了多重挂载的卷，然后将其挂载到最高支持 `40,000` IOPS 的 `m7g.large` 实例和最高支持 `60,000` IOPS 的 ` r7g.12xlarge` 实例。每个实例都可以提升其最大 IOPS，因为它小于卷的预置 IOPS `80,000`。但是，如果两个实例同时提升对卷的 I/O，则其组合 IOPS 不能超过卷的预置性能 `80,000` IOPS。

为了实现一致的性能，最佳做法是在启用多重挂载的卷的扇区间平衡由附加实例提升的 I/O。

有关 Amazon EC2 实例类型的 IOPS 性能的更多信息，请参阅《*Amazon EC2 用户指南*》中的 [Amazon EBS 优化的实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)。

# 为 Amazon EBS 卷启用多重挂载
<a name="working-with-multi-attach"></a>

启用了多重挂载的卷的管理方式与管理任何其他 Amazon EBS 卷的方式大致相同。但是，为了使用多重挂载功能，您必须为卷启用它。

当您创建新卷时，默认情况下，多重挂载处于禁用状态。您可以在创建卷时启用多重挂载。

您还可以在创建 `io2` 卷之后，仅在这些卷没有挂载到任何实例的情况下，为其启用多重挂载。在创建之后，您不能为 `io1` 卷启用多重挂载。

为卷启用多重挂载后，您可以按照与附加任何其他 EBS 卷相同的方式将卷附加到实例。有关更多信息，请参阅 [将 Amazon EBS 卷挂载到 Amazon EC2 实例](ebs-attaching-volume.md)。

------
#### [ Console ]

**在卷创建过程中启用多重挂载**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Volumes**。

1. 选择**创建卷**。

1. 对于**卷类型**，选择**预调配 IOPS SSD (`io1`)** 或**预调配 IOPS SSD (`io2`)**。

1. 对于**大小**和 **IOPS**，选择所需的卷大小和要预置的 IOPS 数。

1. 对于**可用区**，请选择实例所在的相同可用区。

1. 对于 **Amazon EBS Multi-Attach**（Amazon EBS 多重挂载），选择 **Enable Multi-Attach**（启用多重挂载）。

1. （可选）对于**快照 ID**，选择快照并从中创建卷。

1. 设置卷的加密状态。

   如果选定的快照已加密，或者您的账户已启用[默认加密](encryption-by-default.md)，则加密会自动启用，而且您无法禁用它。您可以选择用于加密卷的 KMS 密钥。

   如果选定的快照未加密，且默认情况下账户未启用加密，则加密是可选的。要加密卷，请为 **Encryption**（加密）选择 **Encrypt this volume**（加密此卷），然后选择要用于加密卷的 KMS 密钥。

   加密卷只能附加到支持 Amazon EBS 加密的实例上。有关更多信息，请参阅 [Amazon EBS 加密](ebs-encryption.md)。

1. （可选）要为卷分配自定义标签，请在**标签**部分中选择**添加标签**，然后输入标签键和值对。

1. 选择**创建卷**。

**在创建后启用多重挂载**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Volumes**。

1. 选择所需卷，然后选择 **Actions**（操作）、**Modify Volume**（修改卷）。

1. 对于 **Amazon EBS Multi-Attach**（Amazon EBS 多重挂载），选择 **Enable Multi-Attach**（启用多重挂载）。

1. 选择 **Modify**(修改)。

------
#### [ AWS CLI ]

**在卷创建过程中启用多重挂载**  
将 [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html) 命令与 `--multi-attach-enabled` 选项结合使用。

```
aws ec2 create-volume \
    --volume-type io2 \
    --multi-attach-enabled \
    --size 100 \
    --iops 2000 \
    --region us-west-2 \
    --availability-zone us-west-2b
```

**在创建后启用多重挂载**  
将 [modify-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-volume.html) 命令与 `--multi-attach-enabled` 选项结合使用。

```
aws ec2 modify-volume \
    --volume-id vol-01234567890abcdef \
    --multi-attach-enabled
```

------
#### [ PowerShell ]

**在卷创建过程中启用多重挂载**  
将 [New-EC2Volum](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Volume.html) cmdlet 与 `-MultiAttachEnabled` 参数结合使用。

```
New-EC2Volume `
    -VolumeType io2 `
    -MultiAttachEnabled $true `
    -Size 100 `
    -Iops 2000 `
    -Region us-west-2 `
    -AvailabilityZone us-west-2b
```

**在创建后启用多重挂载**  
将 [Edit-EC2Volume](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2Volume.html) cmdlet 与 `-MultiAttachEnabled` 参数结合使用。

```
Edit-EC2Volume `
    -VolumeId vol-01234567890abcdef `
    -MultiAttachEnabled $true
```

------

# 为 Amazon EBS 卷禁用多重挂载
<a name="disable-multi-attach"></a>

只有当 `io2` 卷挂载到不超过一个实例时，您才能对其禁用多重挂载。

在创建之后，您不能为 `io1` 卷禁用多重挂载。

------
#### [ Console ]

**在创建后禁用多重挂载**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Volumes**。

1. 选择所需卷，然后选择 **Actions**（操作）、**Modify Volume**（修改卷）。

1. 对于 **Amazon EBS 多重挂载**，清除 **Enable Multi-Attach**（启用多重挂载）。

1. 选择**修改**。

------
#### [ AWS CLI ]

**在创建后禁用多重挂载**  
将 [modify-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-volume.html) 命令与 `-no-multi-attach-enabled` 选项结合使用。

```
aws ec2 modify-volume \
    --volume-id vol-01234567890abcdef \
    --no-multi-attach-enabled
```

------
#### [ PowerShell ]

**在创建后禁用多重挂载**  
将 [Edit-EC2Volume](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2Volume.html) cmdlet 与 `-MultiAttachEnabled` 参数结合使用。

```
Edit-EC2Volume `
    -VolumeId vol-01234567890abcdef `
    -MultiAttachEnabled $false
```

------

# 将 NVMe 预留与启用了多重挂载的 Amazon EBS 卷结合使用
<a name="nvme-reservations"></a>

启用多重挂载的 `io2` 卷支持 NVMe 预留，这是一组行业标准的存储隔离栏协议。这些协议可让您创建和管理预留，以控制和协调多个实例对共享卷的访问。共享存储应用程序使用预留来确保数据一致性。

**Topics**
+ [要求](#nvme-reservations-reqs)
+ [启用对 NVMe 预留的支持](#nvme-reservations-enable)
+ [支持的 NVMe 预留命令](#nvme-reservations-commands)
+ [定价](#nvme-reservations-cost)

## 要求
<a name="nvme-reservations-reqs"></a>

仅启用多重挂载功能的 `io2` 卷支持 NVMe 预留。启用多重挂载的卷仅可以连接到基于 Nitro 系统构建的实例。

以下操作系统上支持 NVMe 预留：
+ SUSE Linux Enterprise 12 SP3 和更高版本
+ RHEL 8.3 和更高版本
+ Amazon Linux 2 和更高版本
+ Windows Server 2016 及更高版本

**注意**  
对于日期为 2023.09.13 及之后的受支持 Windows Server AMI，包括所需的 NVMe 驱动程序。对于早期的 AMI，您必须更新到 NVMe 驱动程序版本 1.5.0 或更高版本。有关更多信息，请参阅 [AWS NVMe 驱动程序](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/aws-nvme-drivers.html)。

如果您使用 EC2Launch v2 初始化磁盘，则必须升级到版本 **2.0.1521** 或更高版本。有关更多信息，请参阅[使用 EC2Launch v2 代理](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch-v2.html)。

## 启用对 NVMe 预留的支持
<a name="nvme-reservations-enable"></a>

**2023 年 9 月 18 日**之后创建的所有启用多重挂载的 `io2` 卷均默认启用对 NVMe 预留的支持。

要为 2023 年 9 月 18 日之前创建的现有 `io2` 卷启用对 NVMe 预留的支持，您必须将所有实例与该卷分离，然后重新连接所需的实例。在分离所有实例后创建的所有附件都将启用 NVMe 预留。

## 支持的 NVMe 预留命令
<a name="nvme-reservations-commands"></a>

Amazon EBS 支持以下 NVMe 预留命令：

**Reservation Register**  
注册、取消注册或替换预留密钥。注册密钥用于识别和验证实例。向卷注册预留密钥会在实例和卷之间建立关联。您必须先向卷注册实例，然后该实例才能获得预留。

**Reservation Acquire**  
获取卷上的预留，抢占命名空间上保存的预留，以及中止在卷上保存的预留。可以获取以下预留类型：  
+ 写专属预留
+ 专属访问预留
+ 写专属 - 仅限注册者预留
+ 专属访问 - 仅限注册者预留
+ 写专属 - 所有注册者预留
+ 专属访问 - 所有注册者预留

**Reservation Release**  
释放或清除卷上保存的预留。

**Reservation Report**  
描述卷的注册和预留状态。

## 定价
<a name="nvme-reservations-cost"></a>

启用和使用多重挂载不会产生额外费用。