

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

# 扩展 Amazon DocumentDB 集群
<a name="db-cluster-manage-performance"></a>

Amazon DocumentDB 让您能够根据需求扩展集群中的存储和计算。本节介绍了如何使用存储扩展、实例扩展和读取扩展来管理 Amazon DocumentDB 集群和实例的性能和扩展。

**Topics**
+ [存储扩展](#db-cluster-manage-scaling-storage)
+ [实例扩展](#db-cluster-manage-scaling-instance)
+ [读取扩展](#db-cluster-manage-scaling-reads)
+ [写入扩展](#db-cluster-manage-scaling-writes)

## 存储扩展
<a name="db-cluster-manage-scaling-storage"></a>

Amazon DocumentDB 存储自动使用您的集群卷中的数据进行扩展。当数据量增多时，您的集群卷存储将以 10 GiB 增量递增，最多达 128 TiB。

## 实例扩展
<a name="db-cluster-manage-scaling-instance"></a>

您可通过修改集群中每个实例的实例类来按需扩展 Amazon DocumentDB 集群。Amazon DocumentDB 支持多个针对 Amazon DocumentDB 进行优化的实例类。

有关更多信息，请参阅 [修改 Amazon DocumentDB 实例](db-instance-modify.md)。

## 读取扩展
<a name="db-cluster-manage-scaling-reads"></a>

您可以通过在集群中创建最多 15 个 Amazon DocumentDB 副本来实现 Amazon DocumentDB 集群的读取扩展。每个 Amazon DocumentDB 副本从集群卷返回相同的数据，且副本滞后时间最短：通常少于主实例写入更新后的 100 毫秒。当读取流量增大时，可创建额外的 Amazon DocumentDB 副本并直接连接到这些副本，以便为您的数据库集群分配读取负载。Amazon DocumentDB 副本不必具有与主实例相同的实例类。

有关更多信息，请参阅 [向集群添加 Amazon DocumentDB 实例](db-instance-add.md)。

要对 Amazon DocumentDB 进行读取扩展，我们建议您以副本集形式连接到集群，并使用驱动程序的内置读取首选项功能将读取操作分布到副本实例。有关详细信息，请参阅[作为副本集连接到 Amazon DocumentDB](connect-to-replica-set.md)。

## 写入扩展
<a name="db-cluster-manage-scaling-writes"></a>

您可以通过增加 Amazon DocumentDB 集群的主实例的大小来扩展该集群上的写入容量。此部分提供了两种方法来根据您的需求扩展集群的主实例。第一种方法旨在最大程度地减小应用程序影响，但需要执行更多步骤才能完成。第二种方法经过了优化，需要的步骤更少，因此更简单，但它会对应用程序产生更多的潜在影响，这需要您做出权衡。

根据您的应用程序，可以从下面选择最适合您的方法。有关可用实例大小和成本的更多信息，请参阅 [Amazon DocumentDB 定价](https://aws.amazon.com/documentdb/pricing/)页面。

1. **优化以实现高可用性和性能**：如果您在[副本集模式](connect-to-replica-set.md)（推荐）下连接到集群，则可以使用以下过程将扩展主实例时对应用程序产生的影响减至最小。此方法可以最大程度地减小影响，因为它可确保集群的可用性保持一个较高的水平甚至更高，并且读取扩展目标将作为实例添加到集群中，而不是进行就地更新。

   1. 将较大的实例类型的一个或多个副本添加到集群中（请参阅[向集群添加 Amazon DocumentDB 实例](db-instance-add.md)）。我们建议所有副本具有与主实例相同的实例类型甚至更大的实例类型。这可避免因故障转移到较小的实例类型而意外降低写入性能。对于大多数客户而言，这意味着暂时将其集群中的实例数增加一倍，然后在扩展完成后删除较小的副本。

   1. 将所有新副本上的故障转移层设置为优先级零，并确保较小实例类型的副本具有最高的故障转移优先级。有关更多信息，请参阅 [控制失效转移目标](failover.md#failover-target_control)。

   1. 启动手动故障转移，这会将其中一个新副本提示为主实例。有关更多信息，请参阅 [测试故障转移](failover.md#failover-testing)。
**注意**  
这将导致您的集群停机约 30 秒。请相应地做好规划。

   1. 从集群中删除小于新主实例的实例类型的所有副本。

   1. 将所有实例的故障转移层设置回相同的优先级（通常，这意味着将其设置回 1）。

   例如，假设您的集群当前包含三个 `r5.large` 实例（一个主实例和两个副本实例），并且您希望扩展到一个 `r5.xlarge` 实例类型。为此，您首先将三个 `r5.xlarge` 副本实例添加到集群中，然后将新 `r5.xlarge` 副本的故障转移层设置为零。接下来，您将启动手动故障转移（这意味着您的应用程序将停机约 30 秒）。在故障转移完成后，您将从集群中删除所有三个 `r5.large` 实例，并让集群扩展到 `r5.xlarge` 实例。

   为了帮助优化成本，Amazon DocumentDB 实例以一秒为增量计费，最低收取 10 分钟的费用，然后提供可计费状态更改（例如创建、修改或删除实例）。有关更多信息，请参阅最佳实践文档中的[成本优化](best_practices.md#best_practices-cost_optimization)。

1. **优化以实现简易性**：此方法针对简易性进行了优化。它不会扩展和收缩集群，但可能会暂时减少您的读取容量。

   更改副本的实例类可能将会导致该实例在短时间内（从几秒钟到少于 30 秒）无法处理请求。如果您在[副本集模式](connect-to-replica-set.md)（推荐）下连接到集群，这将在扩展操作期间减少一个副本的读取容量（例如，在 3 节点集群中减少到 66% 的容量，或在 4 节点集群中减少到 75% 的容量等）。

   1. 扩展集群中的副本实例之一。有关更多信息，请参阅 [管理实例类](db-instance-classes.md)。

   1. 等待实例变为可用（请参阅 [监控 Amazon DocumentDB 实例的状态](monitoring_docdb-instance_status.md)）。
**注意**  
这将导致您的集群停机约 30 秒。请相应地做好规划。

   1. 继续执行步骤 1 和 2，直到所有副本实例都逐一实现扩展。

   1. 启动手动失效转移。这会将其中一个副本提升为主实例。有关更多信息，请参阅 [Amazon DocumentDB 失效转移](failover.md)。
**注意**  
这将导致您的集群最多停机 30 秒，但所需的时间通常要更短。请相应地做好规划。

   1. 扩展以前的主（现在是副本）实例。