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

Amazon Aurora 的高可用性

Amazon Aurora 体系架构涉及存储和计算的分离。Aurora 包括一些适用于数据库集群中数据的高可用性功能。即使集群中的部分或全部数据库实例变得不可用,数据也会保持安全。其他高可用性功能适用于数据库实例。这些功能有助于确保一个或多个数据库实例准备就绪,以处理来自应用程序的数据库请求。

Aurora 数据的高可用性

Aurora 跨一个Amazon区域中的多个可用区将数据副本存储在数据库集群中。无论数据库集群中的数据库实例是否跨多个可用区,Aurora 都会存储这些副本。有关 Aurora 的更多信息,请参阅管理 Amazon Aurora 数据库集群

在将数据写入到主数据库实例时,Aurora 将数据跨可用区同步复制到与集群卷关联的 6 个存储节点。这样做可以提供数据冗余,消除 I/O 冻结,以及在系统备份期间将延迟峰值降到最低。在计划内的系统维护期间,运行高性能的数据库实例可以提高可用性,并帮助保护数据库以防发生故障和可用区中断。有关可用区的更多信息,请参阅区域及可用区

Aurora 数据库实例的高可用性

对于使用单主复制的集群,在创建主实例后,最多可以创建 15 个只读 Aurora 副本。Aurora 副本也称为读取器实例。

在日常操作期间,您可以通过使用读取器实例处理 SELECT 查询来减轻读取密集型应用程序的部分工作负载。当问题影响到主实例时,其中一个读取器实例将作为主实例进行接管。此机制称为故障转移。许多 Aurora 功能适用于故障转移机制。例如,Aurora 检测数据库问题并在必要时自动激活故障转移机制。Aurora 还具有可缩短故障转移完成时间的功能。这样做可以最大限度地减少数据库在故障转移期间无法写入的时间。

要使用即使在故障转移提升了新的主实例时也保持不变的连接字符串,请连接到集群终端节点。集群终端节点 始终表示集群中的当前主实例。有关集群终端节点的更多信息,请参阅 Amazon Aurora 连接管理

提示

在每个 Amazon 区域内,可用区表示相互不同的位置,以便在发生中断时提供隔离。我们建议您将数据库集群中的主实例和读取器实例分配到多个可用区,以提高数据库集群的可用性。这样,影响整个可用区的问题不会导致您的集群中断。

您可以通过在创建集群时进行简单选择来设置多可用区集群。无论您使用Amazon Web Services Management Console、Amazon CLI 还是 Amazon RDS API,选择都很简单。您还可以通过添加新的读取器实例并指定不同的可用区,使现有 Aurora 集群进入多可用区集群中。

使用 Aurora Global Database 跨Amazon区域的高可用性

为了跨多个Amazon区域实现高可用性,您可以设置 Aurora Global Database。每个 Aurora Global Database 均跨越多个Amazon区域,可在Amazon区域中实现低延迟的全局读取以及从停机中进行灾难恢复。Aurora 自动处理从主Amazon区域到每个辅助区域的数据复制以及更新。有关更多信息,请参阅“使用 Amazon Aurora Global Database”。

Aurora 数据库集群的容错能力

Aurora 数据库集群设计为具有容错能力。群集卷跨一个 Amazon 区域中的多个可用区,每个可用区均包含一个群集卷数据副本。该功能意味着您的数据库集群可容忍可用区的故障,而不发生任何数据丢失,只是会短暂中断服务。

如果数据库集群中使用单主复制的主实例失败,Aurora 将通过两种方式之一来自动故障转移到新的主实例:

  • 将现有的 Aurora 副本提升为新的主实例

  • 创建新的主实例

如果数据库集群具有一个或多个 Aurora 副本,则 Aurora 副本将在故障事件期间被提升为主实例。故障事件将导致短暂中断,其间的读取和写入操作将失败并引发异常。不过,服务通常会在 120 秒内 (经常在 60 秒内) 还原。要提高数据库集群的可用性,建议您在两个或更多的不同的可用区中创建至少一个或多个 Aurora 副本。

提示

在 Aurora MySQL 2.10 及更高版本中,您可以通过在集群中拥有多个读取器数据库实例来提高故障转移期间的可用性。在 Aurora MySQL 2.10 及更高版本中,Aurora 在故障转移期间仅重启写入器数据库实例和故障转移目标。集群中的其他读取器数据库实例仍然可以通过与读取器终端节点的连接来继续处理查询。

您可以通过为每个副本分配一个优先级来自定义发生故障后将 Aurora 副本提升为主实例的顺序。优先级介于 0(第一个优先级)和 15(最后一个优先级)之间。如果主实例失败,则 Amazon RDS 会将具有更高优先级的 Aurora 副本提升为新的主实例。您可以随时修改 Aurora 副本的优先级。修改优先级不会触发故障转移。

多个 Aurora 副本可共享同一个优先级,这会产生多个提升层。如果两个或更多 Aurora 副本共享同一个优先级,则 Amazon RDS 将提升最大的副本。如果两个或多个 Aurora 副本共享同一优先级和大小,则 Amazon RDS 将提升同一提升层中的任意副本。

如果数据库集群不包含任何 Aurora 副本,则将在故障事件期间在同一可用区中重新创建主实例。故障事件将导致中断,其间的读取和写入操作将失败并引发异常。创建新的主实例时将还原服务,该操作所需的时间通常在 10 分钟内。将 Aurora 副本提升为主实例要比创建新的主实例快得多。

假设集群中的主实例由于影响整个可用区的中断而不可用。在这种情况下,使新主实例联机的方式取决于您的集群是否使用多可用区配置。如果集群包含其他可用区中的任何读取器实例,则 Aurora 会使用故障转移机制将其中一个读取器实例提升为新主实例。如果您的预置集群只包含一个数据库实例,或者主实例和所有读取器实例均位于同一可用区中,则必须在另一个可用区中手动创建一个或多个新数据库实例。如果您的集群使用 Aurora Serverless,则 Aurora 会在另一个可用区中自动创建新数据库实例。但是,此过程涉及更换主机,因此比故障转移花费的时间更长。

注意

Amazon Aurora 还支持对外部 MySQL 数据库或 RDS MySQL 数据库实例的复制。有关更多信息,请参阅“Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)”。