Amazon DocumentDB 高可用性和复制 - Amazon DocumentDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon DocumentDB 高可用性和复制

通过使用副本实例,可以在 Amazon DocumentDB 中实现高可用性和读取扩展(具有 MongoDB 兼容性)。单个 Amazon DocumentDB 集群支持单个主实例和最多 15 个副本实例。这些实例可以分布在集群区域的多个可用区中。主实例接受读取和写入流量,而副本实例仅接受读取请求。

集群卷由该集群的多个数据副本组成。但是,集群卷中的数据,对于主实例和集群中的 Amazon DocumentDB 副本表示为单个逻辑卷。副本实例具有最终一致性。它们返回具有最短副本滞后的查询结果 - 通常远远少于主实例写入更新后的 100 毫秒。副本滞后因数据库更改速率而异。也就是说,在对数据库执行大量写入操作期间,您可能发现副本滞后时间变长。

读取扩展

Amazon DocumentDB 副本十分适用于读取扩展,因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。集群卷在集群中的所有实例之间共享。因此,您不必为 Amazon DocumentDB 副本复制和维护数据副本。

高可用性

在创建 Amazon DocumentDB 集群时,根据子网组中的可用区数(必须至少为两个),Amazon DocumentDB 会在这些可用区中预置实例。在集群中创建实例时,Amazon DocumentDB 自动在子网组中的可用区中分发实例以平衡集群。此操作还会阻止所有实例位于同一可用区中。

Example

为了说明这一点,请考虑以下示例:创建一个集群,其中包含一个具有三个可用区的子网组:AZ1AZ2, 和AZ3.

在创建集群中的第一个实例时,它是主实例并位于其中的一个可用区中。在本示例中,它位于 AZ1 中。创建的第二个实例是副本实例,它位于另外两个可用区之一中,例如,AZ2。创建的第三个实例是副本实例,它位于剩余的可用区 AZ3 中。如果创建更多的实例,它们将分布在多个可用区中,以便在集群中实现平衡。

如果在主实例 (AZ1) 中发生故障,则会触发故障转移,并将其中的一个现有副本提升为主实例。在旧的主实例恢复时,它将变为预置它的同一可用区 (AZ1) 中的副本。在预置三实例集群后,Amazon DocumentDB 继续保留该三实例集群。无需进行任何手动干预,Amazon DocumentDB 自动处理实例故障检测、故障转移和恢复。

在 Amazon DocumentDB 执行故障转移并恢复实例后,恢复的实例保留在最初预置它的可用区中。但是,此实例的角色可能从主实例变为副本。这样做是为了防止出现以下情况:一系列故障转移可能导致所有实例位于同一可用区中。

您可以将 Amazon DocumentDB 副本指定为故障转移目标。也就是说,如果主实例失败,指定的 Amazon DocumentDB 副本或某个层中的副本将提升为主实例。提升过程只造成短暂的中断,在此期间,对主实例发出的读写请求将失败,并且会出现异常。如果 Amazon DocumentDB 集群不包含任何 Amazon DocumentDB 副本,则会在主实例失败后重新创建该实例。提升 Amazon DocumentDB 副本要比重新创建主实例快得多。

对于高可用性场景,建议您创建一个或多个 Amazon DocumentDB 副本。您的 Amazon DocumentDB 集群应该与主实例具有相同的实例类,并位于不同可用区中。

有关更多信息,请参阅下列内容:

全球群集的高可用性

跨多个实现高可用性Amazon Web Services 区域,您可以设置Amazon DocumentDB 全局集群. 每个全局集群均跨越多个区域,可在中实现低延迟的全局读取以及从停机中进行灾难恢复Amazon Web Services 区域. Amazon DocumentDB 自动处理从主区域到每个辅助区域的数据复制以及更新。

添加 副本

添加到集群的第一个实例是主实例。在第一个实例之后添加的每一个实例都是副本实例。除主实例之外,每个集群最多可拥有 15 个副本实例。

如果您使用 Amazon Web Services Management Console 创建集群,则同时会自动创建主实例。创建集群和主实例的同时还要创建副本,请选择 Create replica in different zone (在其他区域创建副本)。有关更多信息,请参阅 创建 Amazon DocumentDB 集群 中的步骤 4.d。要将更多副本添加到 Amazon DocumentDB 集群,请参阅将 Amazon DocumentDB 实例添加到集群.

在使用 Amazon CLI 创建集群时,必须明确地创建主实例和副本实例。有关更多信息,请参阅以下主题的“使用 Amazon CLI”部分:

复制滞后

复制滞后通常为 50 毫秒或更短。增加副本滞后的最常见原因有:

  • 主节点的写入率较高,导致只读副本落后于主节点。

  • 长时间运行的查询(例如,大型顺序扫描、聚合查询)和传入写复制之间的只读副本的争用。

  • 对只读副本进行大量的并发查询。

为了尽量减少复制滞后,请尝试以下故障排除

  • 如果您的写入率较高或 CPU 使用率较高,我们建议您扩展集群中的实例。

  • 如果只读副本上存在长时间运行的查询,并且对所查询的文档进行频繁更新,请考虑更改长时间运行的查询,或者针对主/写副本运行这些查询,以避免对只读副本发生争用。

  • 如果只读副本上存在大量并发查询或 CPU 使用率较高,则另一种选择是扩大只读副本的数量以分散工作负载。

  • 由于复制滞后是高写吞吐量和长时间运行的查询的结果,因此我们建议使用 dbClusterReplicalAgMastum CW 指标结合慢查询记录器和WriteThroughput/WriteIOPS指标。

一般来说,我们建议您的所有副本都具有相同的实例类型,以便群集故障转移不会导致性能下降。

如果您在扩展和向外扩展之间进行选择(例如 6 个较小的实例与三个较大的实例),我们通常建议在扩展之前尝试首先向上扩展(较大的实例),因为每个数据库实例将获得更大的缓冲缓存。

主动地,您应该设置复制滞后警报并将其阈值设置为一个值,该值是副本实例上的数据在开始影响应用程序功能之前落后多远(或 “过时”)的上限。一般来说,由于工作负载临时,我们建议在发出警报之前超过几个数据点的复制延迟阈值。

注意

此外,我们建议您为超过 10 秒的复制滞后设置另一个警报。如果您超过了多个数据点的此阈值,我们建议您扩展实例或降低主实例上的写入吞吐量。