使用 Amazon Aurora MySQL 进行单主复制 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Amazon Aurora MySQL 进行单主复制

Aurora MySQL 复制功能是集群获得较高的可用性和性能的关键所在。Aurora 可以轻松创建或调整最多具有 15 个 Aurora 副本的集群。

所有副本采用相同的基础数据。如果某些数据库实例脱机,其他数据库实例将保持可用状态以继续处理查询或在需要时作为写入器接替这些实例。Aurora 自动将只读连接分布到多个数据库实例中,从而帮助 Aurora 集群支持查询密集型工作负载。

在下文中,您可以了解 Aurora MySQL 复制的工作方式以及如何微调复制设置以获得最佳的可用性和性能。

注意

接下来,您可以了解使用单主复制的 Aurora 集群的复制功能。这种集群是 Aurora 的默认设置。有关 Aurora 多主集群的信息,请参阅 使用 Aurora 多主集群

使用 Aurora 副本

Aurora 副本是 Aurora 数据库集群中的独立终端节点,最适合用于扩展读取操作以及提高可用性。对于数据库集群在 Amazon 区域中所跨的多个可用区,最多可以分配 15 个 Aurora 副本。虽然数据库集群卷由数据库集群的多个数据副本组成,但集群卷中的数据表示为数据库集群中的主实例和 Aurora 副本的单个逻辑卷。有关 Aurora 副本的更多信息,请参阅 Aurora 副本

Aurora 副本十分适用于读取扩展,因为它们完全专用于集群卷上的读取操作。写入操作由主实例进行管理。由于集群卷是在 Aurora MySQL 数据库集群中的所有实例之间共享的,因此,无需执行额外的操作以复制每个 Aurora 副本的数据副本。相比之下,MySQL 只读副本必须在单一线程上,重放从源数据库实例向其本地数据存储的所有写入操作。此限制会影响到 MySQL 只读副本支持海量读取流量的能力。

对于 Aurora MySQL,在删除 Aurora 副本时,将立即删除其实例终端节点,并将 Aurora 副本从读取器终端节点中删除。如果在正待删除的 Aurora 副本上运行语句,则有 3 分钟宽限期。现有语句可在此宽限期内正常完成。当此宽限期结束后,将关闭并删除 Aurora 副本。

重要

对于在 InnoDB 表上执行的操作,Aurora MySQL 的 Aurora 副本始终使用 REPEATABLE READ 默认事务隔离级别。仅对于 Aurora MySQL 数据库集群的主实例,您可以使用 SET TRANSACTION ISOLATION LEVEL 命令更改事务级别。该限制避免在 Aurora 副本上出现用户级锁定,并允许 Aurora 副本扩展以支持数千个活动用户连接,同时仍保持最小的副本滞后时间。

注意

在主实例上运行的 DDL 语句可能会中断关联的 Aurora 副本上的数据库连接。如果 Aurora 副本连接主动使用数据库对象(如表),并且使用 DDL 语句在主实例上修改该对象,则会中断 Aurora 副本连接。

注意

中国 (宁夏) 区域不支持跨区域只读副本。

Amazon Aurora MySQL 的复制选项

您可以在以下任意选项之间设置复制:

注意

重新引导 Amazon Aurora 数据库集群的主实例还会自动重新引导该数据库集群的 Aurora 副本,以便重新建立入口点来确保数据库集群中的读/写一致性。

Amazon Aurora MySQL 复制的性能注意事项

以下功能可以帮助您微调 Aurora MySQL 复制性能。

从 Aurora MySQL 1.17.4 开始,副本日志压缩功能自动降低复制消息的网络带宽。由于每条消息将传输到所有 Aurora 副本,因此,较大的集群的好处更大。该功能在写入方节点上产生一些 CPU 开销以执行压缩。因此,该功能仅适用于具有较高 CPU 容量的 8xlarge16xlarge 实例类。默认情况下,将在这些实例类上启用该功能。您可以禁用 aurora_enable_replica_log_compression 参数以控制该功能。例如,如果写入方节点接近最大 CPU 容量,您可能会为较大的实例类禁用副本日志压缩。

从 Aurora MySQL 1.17.4 开始,二进制日志筛选功能自动降低复制消息的网络带宽。由于 Aurora 副本不使用复制消息中包含的二进制日志信息,因此,将从发送到这些节点的消息中省略该数据。您可以更改 aurora_enable_repl_bin_log_filtering 参数以控制该功能。默认情况下,该参数为 on。由于该优化应该是透明的,因此,您只能在诊断或故障排除期间禁用该设置以解决与复制相关的问题。例如,与无法使用该功能的旧 Aurora MySQL 集群的行为相符。

Amazon Aurora MySQL 的零停机重启 (ZDR)

零停机重启 (ZDR) 功能可以在某些类型的重启期间保留与数据库实例的部分或全部活动连接。ZDR 适用于 Aurora 自动执行以解决错误条件的重启,例如,当副本开始远远落后于源时。

重要

ZDR 机制运作以尽力而为作为原则。Aurora MySQL 版本、实例类、错误条件、兼容的 SQL 操作以及确定 ZDR 应用位置的其他因素随时可能会发生变化。

在提供 ZDR 的 Aurora MySQL 1.* 版本中,您可以通过启用集群参数组中的 aurora_enable_zdr 参数来启用此功能。Aurora MySQL 2.* 的 ZDR 需要版本 2.10 及更高版本。在这些版本中,ZDR 机制默认处于启用状态,Aurora 不使用 aurora_enable_zdr 参数。

Aurora 在 Events (事件) 页面上报告与零停机重启相关的活动。当 Aurora 尝试使用 ZDR 机制重启时会记录事件。此事件说明了 Aurora 重启的原因。然后,在重启完成后,Aurora 会记录另一个事件。这最后一个事件报告了进程所用时长,以及在重启期间保留或丢弃的连接数。您可以查看数据库错误日志,了解有关重启期间所发生情况的更多详细信息。

尽管成功执行 ZDR 操作后连接保持不变,但一些变量和功能会重新初始化。通过零停机重启进行重启后,以下类型的信息将不会保留:

  • 全局变量。Aurora 将恢复会话变量,但重启后不会恢复全局变量。

  • 状态变量。特别是,引擎状态报告的正常运行时间值将重置。

  • LAST_INSERT_ID

  • 表的内存中 auto_increment 状态。重新初始化内存中的自动增量状态。有关自动增量值的更多信息,请参阅 MySQL 参考手册

  • 来自 INFORMATION_SCHEMAPERFORMANCE_SCHEMA 表的诊断信息。这些诊断信息也会显示在 SHOW PROFILESHOW PROFILES 等命令的输出中。

下表显示了版本、实例角色、实例类以及确定在重启集群中的数据库实例时 Aurora 是否可以使用 ZDR 机制的其他情况。

Aurora MySQL version ZDR 适用于写入器吗? ZDR 适用于读取器吗? 备注

Aurora MySQL 版本 1.*,1.17.3 及更低版本

ZDR 不适用于这些版本。

Aurora MySQL 版本 1.*,1.17.4 及更高版本

在这些 Aurora MySQL 版本中,使用 ZDR 机制时,需注意以下情况:

  • 如果在数据库实例上启用了二进制日志记录,则 Aurora 不会使用 ZDR 机制。

  • Aurora 回滚活动连接上正在执行的所有事务。您的应用程序必须重试事务。

  • Aurora 取消任何使用 TLS/SSL、临时表、表锁定或用户锁定的连接。

Aurora MySQL 版本 2.*,2.10.0 之前的版本

ZDR 不适用于这些版本。Aurora MySQL 版本 2 的默认集群参数组中未提供 aurora_enable_zdr 参数。

Aurora MySQL 版本 2.*,2.10.0 及更高版本

ZDR 机制始终处于启用状态。

在这些 Aurora MySQL 版本中,使用 ZDR 机制时,需注意以下情况:

  • Aurora 回滚活动连接上正在执行的所有事务。您的应用程序必须重试事务。

  • Aurora 取消任何使用 TLS/SSL、临时表、表锁定或用户锁定的连接。

监控 Amazon Aurora MySQL 复制

读取扩展和高可用性依赖于尽可能短的滞后时间。您可以通过监控 Amazon CloudWatch AuroraReplicaLag 指标来监控 Aurora 副本滞后于 Aurora MySQL 数据库集群主实例的时间。AuroraReplicaLag 指标记录在每个 Aurora 副本中。

主数据库实例还记录 AuroraReplicaLagMaximumAuroraReplicaLagMinimum Amazon CloudWatch 指标。AuroraReplicaLagMaximum 指标记录主数据库实例与数据库集群中每个 Aurora 副本之间的最大滞后量。AuroraReplicaLagMinimum 指标记录主数据库实例与数据库集群中每个 Aurora 副本之间的最小滞后量。

如果需要 Aurora 副本滞后的最新值,可在您的 Aurora MySQL 数据库集群中的主实例上查询 mysql.ro_replica_status 表并查看 Replica_lag_in_msec 列中的值。此列值作为 AuroraReplicaLag 指标的值提供给 Amazon CloudWatch。Aurora 副本滞后也会记录在 Aurora MySQL 数据库集群中 INFORMATION_SCHEMA.REPLICA_HOST_STATUS 表中的每个 Aurora 副本上。

有关监控 RDS 实例和 CloudWatch 指标的更多信息,请参阅监控 Amazon Aurora 数据库集群