

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

# 克隆 Amazon DocumentDB 集群卷
<a name="db-cluster-cloning"></a><a name="cloning"></a>

通过使用 Amazon DocumentDB 克隆功能，您可以创建一个新集群，该集群使用相同的 Amazon DocumentDB 集群卷并具有与原始集群卷相同的数据。该过程旨在快速且经济高效。我们将新集群及其关联的数据卷称为*克隆*。与使用其他技术（如还原快照）实际复制数据相比，创建克隆速度更快且空间利用效率更高。

Amazon DocumentDB 支持从预配置的 Amazon DocumentDB 集群创建 Amazon DocumentDB 预配置克隆。使用与源不同的部署配置创建克隆时，源的 Amazon DocumentDB 引擎的最新版本将被用于创建克隆。

当您从 Amazon DocumentDB 集群创建克隆时，将在您的账户（即拥有源 Amazon DocumentDB 集群的同一个账户）中 AWS 创建克隆。

**Topics**
+ [Amazon DocumentDB 克隆概述](#db-cloning-overview)
+ [Amazon DocumentDB 克隆的限制](#db-cloning-limitations)
+ [Amazon DocumentDB 克隆的工作原理](#db-how-db-cloning-works)
+ [创建 Amazon DocumentDB 克隆](#db-creating-db-clone)

## Amazon DocumentDB 克隆概述
<a name="db-cloning-overview"></a>

Amazon DocumentDB 使用*copy-on-write 协议*来创建克隆。此机制占用最少的额外空间来创建初始克隆。首次创建克隆时，Amazon DocumentDB 会保留源数据库集群和新（克隆的）Amazon DocumentDB 集群使用的数据的单个副本。只有当源 Amazon DocumentDB 集群或 Amazon DocumentDB 集群克隆对数据（在 Amazon DocumentDB 存储卷上）进行更改时，才会分配额外的存储空间。要了解有关该 copy-on-write协议的更多信息，请参阅[Amazon DocumentDB 克隆的工作原理](#db-how-db-cloning-works)。

Amazon DocumentDB 克隆非常适合使用您的生产数据快速设置测试环境，且不会有损坏数据的风险。您可以将克隆用于多种类型的应用程序，例如：
+ 对潜在的变化（例如模式变化和参数组变化）进行试验，以评估所有影响。
+ 执行工作负载密集型操作，例如导出数据或在克隆上运行分析查询。
+ 为开发、测试或其他用途创建生产数据库集群的副本。

您可以从同一个 Amazon DocumentDB 集群创建多个克隆。您还可以从另一个克隆创建多个克隆。

创建 Amazon DocumentDB 克隆后，您可以对 Amazon DocumentDB 实例实现与源 Amazon DocumentDB 集群不同的配置。例如，您可能不需要用于开发目的的克隆来满足与源生产 Amazon DocumentDB 集群相同的高可用性要求。在这种情况下，您可以使用单个 Amazon DocumentDB 实例来配置克隆，而不是使用 Amazon DocumentDB 集群使用的多个数据库实例。

当克隆完成测试、开发等使用目的时，您可以将其删除。

## Amazon DocumentDB 克隆的限制
<a name="db-cloning-limitations"></a>

Amazon DocumentDB 克隆目前具有以下限制：
+ 您可以根据需要创建任意数量的克隆，最多为 AWS 区域中允许的最大数据库集群数。但是，在创建 15 个克隆后，下一个克隆是完整副本。克隆操作就像 point-in-time恢复一样。
+ 您无法在与源 Amazon DocumentDB 集群不同的 AWS 区域创建克隆。
+ 您无法从没有数据库实例的 Amazon DocumentDB 集群创建克隆。您只能克隆具有至少一个数据库实例的 Amazon DocumentDB 集群。
+ 您可以在与 Amazon DocumentDB 集群不同的虚拟私有云（VPC）中创建克隆。如果这样做，则的子网 VPCs 必须映射到相同的可用区。

## Amazon DocumentDB 克隆的工作原理
<a name="db-how-db-cloning-works"></a>

Amazon DocumentDB 克隆运行于 Amazon DocumentDB 集群的存储层。就支持 Amazon DocumentDB 存储卷的底层耐用媒体而言，它使用的*copy-on-write*协议既快速又节省空间。您可以在 [管理 Amazon DocumentDB 集群](db-clusters.md) 中了解有关 Amazon DocumentDB 集群卷的更多信息。

**Topics**
+ [了解 copy-on-write协议](#db-copy-on-write-protocol)
+ [删除源集群卷](#db-deleting-source-cluster-volume)

### 了解 copy-on-write协议
<a name="db-copy-on-write-protocol"></a>

Amazon DocumentDB 集群将数据存储在底层 Amazon DocumentDB 存储卷的页面中。

例如，在下图中，您可以找到拥有四个数据页（1、2、3 和 4）的 Amazon DocumentDB 集群（A）。假设从 Amazon DocumentDB 集群创建了一个克隆 B。创建克隆时，未复制任何数据。相反，克隆指向与源 Amazon DocumentDB 集群相同的页面集。

![\[Amazon DocumentDB 集群卷包含 4 个页面，适用于源集群 A 和克隆 B\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-1.png)


创建克隆时，通常不需要额外的存储空间。该 copy-on-write协议在物理存储介质上使用与源数据段相同的分段。只有当源段的容量不足以容纳整个克隆段时，才需要额外的存储空间。如果是这种情况，源段将被复制到另一个物理设备。

在下图中，您可以找到使用相同集群 A 及其克隆 B 的 copy-on-write协议示例，如前所示。如果您对 Amazon DocumentDB 集群（A）进行更改，那么第 1 页上保存的数据也将随之而发生改变。Amazon DocumentDB 没有写入原始页面 1，而是创建了一个新页面 1[A]。集群（A）的 Amazon DocumentDB 集群卷现在指向页面 1[A]、2、3 和 4，而克隆（B）仍引用原始页面。

![\[Amazon DocumentDB 源数据库集群卷及其克隆，均已更改。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-2.png)


在克隆上，对存储卷的第 4 页进行了更改。Amazon DocumentDB 没有写入原始页面 4，而是创建了一个新页面 4[B]。克隆现在指向页面 1、2、3 和页面 4[B]，而集群（A）继续指向 1[A]、2、3 和 4。

![\[Amazon DocumentDB 源数据库集群卷及其克隆，均已更改。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-copy-on-write-protocol-3.png)


随着时间推移，当源 Amazon DocumentDB 集群卷和克隆上出现了更多更改时，因此需要更多存储空间来捕获和存储更改。

### 删除源集群卷
<a name="db-deleting-source-cluster-volume"></a>

删除与一个或多个克隆关联的源集群卷时，克隆不会受到影响。克隆继续指向以前由源集群卷拥有的页面。

## 创建 Amazon DocumentDB 克隆
<a name="db-creating-db-clone"></a>

您可以在与源 Amazon DocumentDB 集群相同的 AWS 账户中创建克隆。为此，您可以使用 AWS 管理控制台 或 AWS CLI 以及以下步骤。

通过使用 Amazon DocumentDB 克隆，您可以从预配置的 Amazon DocumentDB 集群中创建预配置的 Amazon DocumentDB 集群克隆。

------
#### [ Using the AWS 管理控制台 ]

以下过程介绍了如何使用 AWS 管理控制台克隆 Amazon DocumentDB 集群。

使用带有一个 Amazon DocumentDB 实例的 Amazon DocumentDB 集群中的 AWS 管理控制台 结果创建克隆。

 这些说明适用于创建克隆的同一个 AWS 账户所拥有的数据库集群。数据库集群必须归同一个 AWS 账户所有，因为 Amazon DocumentDB 不支持跨账户克隆。

**要创建您的 AWS 账户拥有的数据库集群的克隆，请使用 AWS 管理控制台**

1. [登录 AWS 管理控制台，然后在 /docdb 上打开亚马逊文档数据库控制台。https://console.aws.amazon.com](https://console.aws.amazon.com/docdb)

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

1. 从列表中选择您的 Amazon DocumentDB 集群，从**操作**中选择**创建克隆**。  
![\[创建克隆首先需要选择 Amazon DocumentDB 集群。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-1.png)

   “创建克隆”页面打开后，您可以配置 Amazon DocumentDB 集群克隆的**集群标识符**和**实例类**以及其他选项。

1. 在**设置**部分，执行以下操作：

   1. 在**集群标识符**中，请输入您要为克隆的 Amazon DocumentDB 集群拟定的名称。

   1. 对于**实例配置**，请为克隆的 Amazon DocumentDB 集群选择适当的**实例类**。  
![\[创建克隆首先需要选择 Amazon DocumentDB 集群并指定数据库实例大小。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-2.png)

   1.  对于**网络设置**，请选择使用案例的**子网组**和关联的 VPC 安全组。

   1.  对于 **E ncryption-at-rest**，如果源集群（正在克隆的集群）启用了加密，则克隆的集群还必须启用加密。如果这种情况适用，则**启用加密**选项将显示为灰色（禁用），但选中了**启用加密**选项。相反，如果源集群未启用加密，则**启用加密**选项可用，您可以选择启用或禁用加密。  
![\[为您的 Amazon DocumentDB 集群克隆指定网络和加密设置。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-3-nw-encryption.png)

   1. 通过选择要导出的日志类型（可选）、输入用于连接到集群的特定端口、以及启用防止意外删除集群的保护（默认启用），完成新的集群克隆配置。  
![\[通过选择性地选择要导出的日志类型、用于连接到集群的特定端口以及防止意外删除集群的保护，完成新的克隆配置。\]](http://docs.aws.amazon.com/zh_cn/documentdb/latest/developerguide/images/db-cloning-create-clone-4-log-options-del-prot-b.png)

   1. 完成 Amazon DocumentDB 集群克隆的所有设置。要了解有关 Amazon DocumentDB 集群和实例设置的更多信息，请参阅 [管理 Amazon DocumentDB 集群](db-clusters.md)。

1. 选择**创建克隆**以启动所选 Amazon DocumentDB 集群的 Amazon DocumentDB 克隆。

克隆创建完成后，它将会与您的其他 Amazon DocumentDB 集群一起列在控制台**数据库**部分，而且其当前状态也会一起显示。当其状态为**可用**时，您的克隆即可以使用。

------
#### [ Using the AWS CLI ]

使用克隆您 AWS CLI 的 Amazon DocumentDB 集群需要几个步骤。

您使用的`restore-db-cluster-to-point-in-time` AWS CLI 命令会生成一个空的 Amazon DocumentDB 集群，其中包含 0 个亚马逊 DocumentDB 实例。也就是说，此命令仅还原 Amazon DocumentDB 集群，而不还原该集群的数据库实例。在克隆可用之后，您可以单独执行此操作。该过程的两个步骤如下：

1. 使用 [restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html) CLI 命令创建克隆。与此命令一起使用的参数控制正在创建的空 Amazon DocumentDB 集群（克隆）的容量类型和其他详细信息。

1. 使用 CL [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)I 命令在还原的 Amazon DocumentDB 集群中重新创建 Amazon DocumentDB 实例，为克隆创建亚马逊文档数据库实例。

以下命令假设 AWS CLI 已将您的 AWS 区域设置为默认区域。这种方法使您无需在每个命令中传递 `--region` 名称。有关更多信息，请参阅[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。您还可以在后面的每个 CLI 命令中指定 `--region`。

**Topics**

**创建克隆**

您传递给 `[restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html)` CLI 命令的特定参数会有所不同。传递内容取决于您要创建的克隆类型。

使用以下过程从预配置的 Amazon DocumentDB 集群中创建预配置的 Amazon DocumentDB 克隆。

**创建与源 Amazon DocumentDB 集群具有相同引擎模式的克隆**
+ 使用 `[restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html)` CLI 命令并指定以下参数的值：
  + `--db-cluster-identifier`：为克隆选择一个有意义的名称。使用 [restore-db-cluster-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-cluster-to-point-in-time.html) CLI 命令时可以为克隆命名。
  + `--restore-type`：使用 `copy-on-write` 创建源数据库集群的克隆。如果没有此参数，`restore-db-cluster-to-point-in-time` 将还原 Amazon DocumentDB 集群，而不会创建克隆。`restore-type` 的默认值为 `full-copy`。
  + `--source-db-cluster-identifier`：使用要克隆的源 Amazon DocumentDB 集群的名称。
  + `--use-latest-restorable-time`：此值指向克隆的最新可还原卷数据。此参数是 `restore-type copy-on-write` 所必需的，但是，您不能将 `restore-to-time parameter` 与它一起使用。

以下示例从名为 `my-source-cluster` 的集群创建一个名为 `my-clone` 的克隆。

对于 Linux、macOS 或 Unix：

```
aws docdb restore-db-cluster-to-point-in-time \
    --source-db-cluster-identifier my-source-cluster \
    --db-cluster-identifier my-clone \
    --restore-type copy-on-write \
    --use-latest-restorable-time
```

对于 Windows：

```
aws docdb restore-db-cluster-to-point-in-time ^
    --source-db-cluster-identifier my-source-cluster ^
    --db-cluster-identifier my-clone ^
    --restore-type copy-on-write ^
    --use-latest-restorable-time
```

该命令返回包含克隆详细信息的 JSON 对象。在尝试为您的克隆创建数据库实例之前，请检查以确保您的克隆数据库集群可用。有关更多信息，请参阅以下检查状态并获取克隆的详细信息：

**检查状态并获取克隆的详细信息**

您可以使用以下命令检查新创建的空数据库集群的状态。

```
$ aws docdb describe-db-clusters --db-cluster-identifier my-clone --query '*[].[Status]' --output text
```

或者，您可以使用以下 AWS CLI 查询获取为克隆创建数据库实例所需的状态和其他值：

对于 Linux、macOS 或 Unix：

```
aws docdb describe-db-clusters --db-cluster-identifier my-clone \
  --query '*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion}'
```

对于 Windows：

```
aws docdb describe-db-clusters --db-cluster-identifier my-clone ^
  --query "*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion}"
```

此查询返回类似于下述信息的输出：

```
[
  {
        "Status": "available",
        "Engine": "docdb",
        "EngineVersion": "4.0.0",
    }
]
```

**为您的克隆创建 Amazon DocumentDB 实例**

使用 C [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)LI 命令为您的克隆创建数据库实例。

`--db-instance-class` 参数仅用于预配置的 Amazon DocumentDB 集群。

对于 Linux、macOS 或 Unix：

```
aws docdb create-db-instance \
    --db-instance-identifier my-new-db \
    --db-cluster-identifier my-clone \
    --db-instance-class  db.r5.4xlarge \
    --engine docdb
```

对于 Windows：

```
aws docdb create-db-instance ^
    --db-instance-identifier my-new-db ^
    --db-cluster-identifier my-clone ^
    --db-instance-class  db.r5.4xlarge ^
    --engine docdb
```

**用于克隆的参数**

下表总结了与 `restore-db-cluster-to-point-in-time` 一起用于克隆 Amazon DocumentDB 集群的各种参数。


| 参数 | 说明 | 
| --- | --- | 
|  --source-db-cluster-identifier | 使用要克隆的源 Amazon DocumentDB 集群的名称。 | 
|  --db-cluster-identifier | 为克隆选择一个有意义的名称。您可以使用 ` restore-db-cluster-to-point-in-time` 命令为您的克隆命名。然后将此名称传递给 `create-db-instance` 命令。 | 
|  --restore-type | 将 `copy-on-write` 指定为 `--restore-type` 以创建源数据库集群的克隆，而不是还原源 Amazon DocumentDB 集群。 | 
|  --use-latest-restorable-time | 此值指向克隆的最新可还原卷数据。 | 

------