使用 Amazon Aurora 进行复制 - Amazon Aurora

使用 Amazon Aurora 进行复制

Aurora 有几个复制选项。每个 Aurora 数据库集群在同一集群中的多个数据库实例之间都有内置复制。您还可以在设置复制时将 Aurora 集群作为源或目标集群。将数据复制到或从 Aurora 集群中复制数据时,您可以选择内置功能,例如 Aurora 全局数据库,也可以选择用于 MySQL 或 PostgreSQL 数据库引擎的传统复制机制。您可以根据自己的需要选择适当的选项,以获得高可用性、便利性和性能的正确组合。以下部分说明选择每种方法的方式和时间。

Aurora 副本

在 Aurora 预置数据库集群中创建第二个、第三个以及更多数据库实例时,Aurora 自动设置从写入器数据库实例到所有其他数据库实例的复制。这些其他数据库实例是只读实例,称为 Aurora 副本。讨论如何在集群中组合写入器和读取器数据库实例时,我们还将其称为读取器实例。

Aurora 副本有两个主要用途。您可以向他们发出查询以扩展应用程序的读取操作。为此,您通常需要连接到集群的读取器端点。这样,Aurora 可以将只读连接的负载分散到集群中尽可能多的 Aurora 副本之间。Aurora 副本还有助于提高可用性。如果集群中的写入器实例变为不可用,则 Aurora 会自动提升其中一个读取器实例以取代它作为新的写入器。

每个 Aurora 数据库集群最多可以包含 15 个 Aurora 副本。Aurora 副本可以分配到数据库集群在AWS区域中所跨的多个可用区。

数据库集群中的数据有自己的高可用性和可靠性功能,与集群中的数据库实例无关。如果您不熟悉 Aurora 存储功能,请参阅 Amazon Aurora 存储概述。数据库集群卷实际上由该数据库集群的多个数据副本组成。数据库集群中的主实例和 Aurora 副本都将集群卷中的数据作为单个逻辑卷查看。

因此,所有 Aurora 副本均返回相同的查询结果数据,且副本滞后时间非常短。此滞后通常远远少于主实例写入更新后的 100 毫秒。副本滞后因数据库更改速率而异。也就是说,在对数据库执行大量写入操作期间,您可能发现副本滞后时间变长。

注意

在以下 Aurora PostgreSQL 版本中,当 Aurora Replica 与写入器数据库实例失去通信超过 60 秒时,Aurora Replica 会重新启动:

  • 14.6 及更低版本

  • 13.9 及更低版本

  • 12.13 及更低版本

  • 所有 Aurora PostgreSQL 11 版本

Aurora 副本十分适用于读取扩展,因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。由于集群卷是在数据库集群中的所有数据库实例间共享的,因此无需其他操作即可复制每个 Aurora 副本的数据副本。

要提高可用性,可以使用 Aurora 副本作为故障转移目标。也就是说,如果主实例失败,Aurora 副本将提升为主实例。提升过程只造成短暂的中断,在此期间,对主实例发出的读写请求将失败,并且会出现异常。

通过失效转移提升 Aurora 副本要比重新创建主实例快得多。如果 Aurora 数据库集群不包含任何 Aurora 副本,则数据库集群在数据库实例从故障中恢复时不可用。

发生失效转移时,可能会重启某些 Aurora 副本,具体取决于数据库引擎版本。例如,在 Aurora MySQL 2.10 及更高版本中,Aurora 在失效转移期间仅重新启动写入器数据库实例和失效转移目标。有关不同 Aurora 数据库引擎版本的重启行为的更多信息,请参阅重启 Amazon Aurora 数据库集群或 Amazon Aurora 数据库实例。有关重启或失效转移时页面缓存会发生什么情况的信息,请参阅自动恢复页面缓存

对于高可用性场景,建议您创建一个或多个 Aurora 副本。您的 Aurora 数据库集群应该与主实例具有相同的数据库实例类,并且位于不同可用区中。有关将 Aurora 副本作为故障转移目标的更多信息,请参阅 Aurora 数据库集群的容错能力

您无法为未加密的 Aurora 数据库集群创建已加密的 Aurora 副本。您无法为加密的 Aurora 数据库集群创建未加密的 Aurora 副本。

提示

您可以使用 Aurora 集群内的 Aurora 副本作为唯一复制形式,以保持数据高可用性。您还可以将内置 Aurora 复制与其他类型的复制结合使用。这样做可以帮助进一步提高您的数据的高可用性和地理分布水平。

有关如何创建 Aurora 副本的详细信息,请参阅将 Aurora 副本添加到数据库集群

使用 Aurora MySQL 进行复制

除了 Aurora 副本以外,您还可以通过以下选项与 Aurora MySQL 进行复制:

  • 不同AWS区域中的 Aurora MySQL 数据库集群。

    • 您可以使用 Aurora 全局数据库跨多个区域复制数据。有关详细信息,请参阅 使用 Aurora Global Database 跨AWS区域的高可用性

    • 利用 MySQL 二进制日志 (binlog) 复制,您可以在不同的 AWS 区域中创建 Aurora MySQL 数据库集群的 Aurora 只读副本。通过这种方式,每个集群最多可以创建五个只读副本,且每个副本位于不同区域。

  • 相同区域中的两个 Aurora MySQL 数据库集群(通过使用 MySQL 二进制日志(binlog) 复制实现)。

  • 一个作为数据源的 RDS for MySQL 数据库实例,一个 Aurora MySQL 数据库集群(通过创建 RDS for MySQL 数据库实例的 Aurora 只读副本实现)。通常,此方法用于迁移到 Aurora MySQL,而非持续复制。

有关与 Aurora MySQL 进行复制的更多信息,请参阅使用 Amazon Aurora MySQL 进行复制

使用 Aurora PostgreSQL 进行复制

除了 Aurora 副本之外,您还可以通过以下选项使用 Aurora PostgreSQL 进行复制:

  • 使用 Aurora Global Database 时,一个区域中有一个主 Aurora 数据库集群,在不同区域中最多有五个只读备用数据库集群。Aurora PostgreSQL 不支持跨区域 Aurora 副本。不过,您可以使用 Aurora Global Database 将 Aurora PostgreSQL 数据库集群的读取功能扩展到多个 AWS 区域,从而实现可用性目标。有关更多信息,请参阅 使用 Amazon Aurora Global Database

  • 相同区域中的两个 Aurora PostgreSQL 数据库集群(通过使用 PostgreSQL 的逻辑复制功能实现)。

  • 一个作为数据源的 RDS for PostgreSQL 数据库实例和一个 Aurora PostgreSQL 数据库集群(通过创建 RDS for PostgreSQL 数据库实例的 Aurora 只读副本实现)。通常,此方法用于迁移到 Aurora PostgreSQL,而非持续复制。

有关与 Aurora PostgreSQL 进行复制的更多信息,请参阅使用 Amazon Aurora PostgreSQL 进行复制