Aurora Serverless 的工作原理 - Amazon Aurora
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Aurora Serverless 的工作原理

在没有 Aurora Serverless 的情况下使用 Amazon Aurora(已预置数据库集群)时,您可以选择数据库实例类大小并创建 Aurora 副本以提高读取吞吐量。如果您的工作负载发生变化,您可以修改数据库实例类大小并更改 Aurora 副本的数量。此模型在数据库工作负载是可预测时运行良好,因为您可以根据预期工作负载手动调整容量。

不过,在某些环境中,工作负载可能是间歇性和不可预测的。可能存在可能仅持续几分钟或几小时的大量工作负载的时间段以及少量活动或甚至无活动的长时间段。例如,一些进行间歇性销售活动的零售网站、根据需要生成报告的报告数据库、开发和测试环境以及具有不确定要求的新应用程序。在这些情况及很多其他情况下,可能很难在正确的时间配置正确的容量。这还可能会在您为未使用的容量付费时产生更高的成本。

对于 Aurora Serverless,您可以创建数据库终端节点,而无需指定数据库实例类大小。可以设置最小容量和最大容量。对于 Aurora Serverless,数据库终端节点可以连接到代理队列,后者将工作负载路由到一组自动扩展的资源。借助代理队列,连接是持续存在的,这是因为 Aurora Serverless 自动根据最小和最大容量规范扩展资源。数据库客户端应用程序无需更改为使用代理队列。Aurora Serverless 会自动管理连接。扩展的速度非常快,因为它使用随时准备好为请求提供服务的“热”资源池。存储和处理是分开的,因此处理容量可以缩减至零(此时,您只需支付存储费用)。

Aurora Serverless 引入了适用于 Aurora 数据库集群的新 serverless 数据库引擎模式。非 Serverless 数据库集群使用 provisioned 数据库引擎模式。

Aurora Serverless 架构

下图提供了 Aurora Serverless 架构的概览。


                  Aurora Serverless 架构

您可指定 Aurora 容量单位 (ACU),而不是配置和管理数据库服务器。每个 ACU 是处理和内存容量的组合。数据库存储从 10 GiB 自动扩展到 64 TiB,与标准 Aurora 数据库集群中的存储相同。

可以指定最小和最大 ACU。最小 Aurora 容量单位 是数据库集群可缩减到的最低 ACU。最大 Aurora 容量单位 是数据库集群可扩展到的最高 ACU。根据您的设置,Aurora Serverless 自动创建 CPU 使用率、连接和可用内存阈值的扩展规则。

Aurora Serverless 管理 AWS 区域中的热资源池以最大程度地减少扩展时间。在 Aurora Serverless 将新资源添加到 Aurora 数据库集群时,它使用代理队列将活动客户端连接切换到新资源。在任何给定时间,您都只需为您的 Aurora 数据库集群中正在主动使用的 ACU 付费。

Aurora Serverless 的自动扩展

分配给您的 Aurora Serverless 数据库集群的容量根据客户端应用程序生成的负载(CPU 使用率和连接数)进行扩展和缩减。它还在 5 分钟内没有任何连接时扩展到零容量。

在 CPU 或连接中存在容量限制时,Aurora Serverless 会纵向扩展。在检测到通过纵向扩展可解决的性能问题时,它也会纵向扩展。

纵向扩展后,需冷却 15 分钟才能进行纵向缩减。纵向缩减后,需冷却 310 秒才能再次进行纵向缩减。

注意

纵向扩展不需要冷却时间。Aurora Serverless 可在必要时随时纵向扩展,包括在纵向扩展或纵向缩减后立即进行纵向扩展。

扩展点 是数据库可安装启动扩展操作的时间点。在以下条件下,Aurora Serverless 可能无法找到扩展点:

  • 正在执行长时间运行的查询或事务

  • 正在使用临时表或表锁定

在这些情况下,Aurora Serverless 会继续尝试查找扩展点,以便可以开始执行扩展操作。只要它确定应该缩放数据库集群,就会执行此操作。

您可以在 AWS 管理控制台中详细查看数据库集群的扩展事件。您还可以使用 Amazon CloudWatch 的 ServerlessDatabaseCapacity 指标监控分配给数据库集群的当前容量。

在自动扩展期间,Aurora Serverless 会重置 EngineUptime 指标。重置指标值不表示无缝扩展的任何问题,也不表示已删除任何连接。有关指标的更多信息,请参阅 监控 Amazon Aurora 数据库集群指标

自动暂停和恢复 Aurora Serverless

您可以选择在无任何活动的指定时间段内暂停 Aurora Serverless 数据库集群。在暂停数据库集群之前指定无任何活动的时间长度。默认值为 5 分钟。还可以禁用暂停数据库集群。

暂停数据库集群后,不会发生任何计算或内存活动,而且您只需支付存储费用。如果暂停 Aurora Serverless 数据库集群时请求数据库连接,数据库集群将自动恢复并处理连接请求。

当数据库集群恢复活动时,它的容量与 Aurora 暂停集群时的容量相同。ACU 的数量取决于在暂停集群之前 Aurora 扩展或缩减的程度。

注意

如果暂停数据库集群超过 7 天,则可能会使用快照对数据库集群进行备份。在这种情况下,当有连接到快照的请求时,Aurora 将从快照还原数据库集群。

容量更改超时操作

您可以更改 Aurora Serverless 数据库集群的容量。在更改此容量时,Aurora Serverless 会因此更改尝试查找扩展点。如果 Aurora Serverless 找不到扩展点,则会超时。您可以指定在容量更改超时的情况下采取以下操作之一:

  • 强制执行容量更改 – 尽快将容量设置为指定值。

  • 回滚容量更改 – 取消容量更改。

重要

请注意,对于具有许多并发连接的集群,指定强制更改容量可能会导致丢弃所有连接 — 而不仅仅是那些具有长时间运行的事务的连接。

有关更改容量的信息,请参阅修改 Aurora Serverless 数据库集群

Aurora Serverless 和参数组

参数组的工作方式在 Aurora Serverless 数据库集群上与在预配置数据库集群上有所不同。Aurora 为您管理容量设置。一些配置过程、默认参数值以及您用于其他类型 Aurora 集群的部分设置不适用于 Aurora Serverless 集群。

Aurora Serverless 集群中的数据库实例只有关联的数据库集群参数组,而没有关联的数据库参数组。Serverless 集群依赖于数据库集群参数组,这是因为数据库实例不能与 Aurora Serverless 集群永久关联。Aurora 会根据需要自动扩展关联的数据库实例。扩展操作涉及修改参数值,以适合更大或更小的容量。

要自定义 Aurora Serverless 集群的配置设置,可以定义您自己的数据库集群参数组,然后修改其中包含的参数。您可以修改集群级参数和应用于其他类型 Aurora 集群的实例级参数。但是,在修改与 Aurora Serverless 数据库集群关联的数据库集群参数组时,应用的修改操作与针对其他数据库集群参数组的操作有所不同。

在为 Aurora Serverless 数据库集群保存数据库集群参数组更改内容后,系统会立即应用更改。因此,Aurora Serverless 会忽略以下设置:

为将更改应用于数据库集群参数组,Aurora Serverless 将在数据库集群处于活动状态时为当前容量启动无缝扩展。如果数据库集群处于暂停状态,则会恢复此集群。

重要

Aurora 通过 force-apply-capacity-change 选项对参数组更改执行无缝扩展操作。如果找不到扩展点,则可能会删除阻止 Aurora Serverless 查找扩展点的连接。

要查看集群级参数支持的引擎模式,请运行 describe-engine-default-cluster-parameters 命令或 RDS API 操作 DescribeEngineDefaultClusterParameters。例如,以下 Linux 命令从 aurora5.6 默认数据库集群参数组提取您为 Aurora MySQL Serverless 集群设置的参数的名称。

aws rds describe-engine-default-cluster-parameters \ --db-parameter-group-family aurora5.6 \ --query 'EngineDefaults.Parameters[*].{ParameterName:ParameterName, \ SupportedEngineModes:SupportedEngineModes} \ | [?contains(SupportedEngineModes, `serverless`) == `true`] \ | [*].{param:ParameterName}' \ --output text

以下 Linux 命令从 aurora-postgresql10 默认数据库集群参数组提取您为 Aurora PostgreSQL Serverless 集群设置的参数的名称。

aws rds describe-engine-default-cluster-parameters \ --db-parameter-group-family aurora-postgresql10 \ --query 'EngineDefaults.Parameters[*].{ParameterName:ParameterName, \ SupportedEngineModes:SupportedEngineModes} \ | [?contains(SupportedEngineModes, `serverless`) == `true`] \ | [*].{param:ParameterName}' \ --output text

以下 Linux 命令从您创建的数据库集群参数组提取您可为 Serverless 集群设置的参数的名称。

aws rds describe-db-cluster-parameters \ --db-cluster-parameter-group-name my_cluster_param_group_name \ --query 'Parameters[*].{ParameterName:ParameterName, SupportedEngineModes:SupportedEngineModes} | [?contains(SupportedEngineModes, `serverless`) == `true`] | [*].{param:ParameterName}' \ --output text

有关参数组的更多信息,请参阅 使用数据库参数组和数据库集群参数组

对于 Aurora MySQL Serverless 数据库集群,对参数值的修改仅对以下参数生效。您可以修改其他参数,但 Aurora 不使用更改后的值。对于所有其他配置参数,Aurora MySQL Serverless 集群使用默认值。这些默认值可能与其他类型的 Aurora 集群不同。这些值也可能随着 Aurora 扩展或缩减 Aurora Serverless 集群而更改。

  • character_set_server

  • collation_server

  • general_log。此设置以前仅用于数据库实例参数组。

  • innodb_file_format。此设置以前仅用于数据库实例参数组。

  • innodb_file_per_table

  • innodb_large_prefix。此设置以前仅用于数据库实例参数组。

  • innodb_lock_wait_timeout。此设置以前仅用于数据库实例参数组。

  • innodb_monitor_disable。此设置以前仅用于数据库实例参数组。

  • innodb_monitor_enable。此设置以前仅用于数据库实例参数组。

  • innodb_monitor_reset。此设置以前仅用于数据库实例参数组。

  • innodb_monitor_reset_all。此设置以前仅用于数据库实例参数组。

  • innodb_print_all_deadlocks。此设置以前仅用于数据库实例参数组。

  • lc_time_names

  • log_output。此设置以前仅用于数据库实例参数组。此设置的默认值为 FILE。您不能更改此值。

  • log_queries_not_using_indexes。此设置以前仅用于数据库实例参数组。

  • log_warnings。此设置以前仅用于数据库实例参数组。

  • long_query_time。此设置以前仅用于数据库实例参数组。

  • lower_case_table_names

  • net_read_timeout。此设置以前仅用于数据库实例参数组。

  • net_retry_count。此设置以前仅用于数据库实例参数组。

  • net_write_timeout。此设置以前仅用于数据库实例参数组。

  • server_audit_logging

  • server_audit_events

  • server_audit_excl_users

  • server_audit_incl_users

  • slow_query_log。此设置以前仅用于数据库实例参数组。

  • sql_mode。此设置以前仅用于数据库实例参数组。

  • time_zone

  • tx_isolation。此设置以前仅用于数据库实例参数组。

Aurora Serverless 和维护

Aurora Serverless 会执行定期维护,以便您的数据库集群具有最新的功能、修复和安全更新。Aurora Serverless 尽可能以无中断的方式进行维护。

要应用维护,Aurora Serverless 必须找到扩展点。有关扩展点的更多信息,请参阅Aurora Serverless 的自动扩展

如果存在 Aurora Serverless 数据库集群所需的维护,则数据库集群会在七天内尝试找到一个扩展点来应用维护。之后每一天,在找不到扩展点时,Aurora Serverless 会创建一个集群事件,通知您必须扩展才能应用维护。通知包含通过 ForceApplyCapacityChange 超时操作来应用扩展的日期,以便应用维护而无论 ScalingConfiguration 如何设置。如果您的数据库集群为其 ScalingConfigurationRollbackCapacityChange 设置 TimeoutAction,在事件中包含的时间之前,Aurora Serverless 尝试使用 RollbackCapacityChange 超时操作应用维护。如果您的数据库集群为其 ScalingConfigurationForceApplyCapacityChange 设置为 TimeoutAction,则对所有尝试,将用它来扩展以应用维护。使用 ForceApplyCapacityChange 时,它可能会中断您的工作负载。有关更多信息,请参阅容量更改超时操作

注意

维护时段不适用于 Aurora Serverless。

Aurora Serverless 和故障转移

如果 Aurora Serverless 数据库集群的数据库实例变得不可用,或者其所在的可用区 (AZ) 出现故障,Aurora 在其他可用区中重新创建数据库实例。我们将此功能称为自动多可用区故障转移。

此故障转移机制需要的时间比 Aurora 预置集群长。当前未定义 Aurora Serverless 故障转移时间,因为它取决于给定 AWS 区域中的其他可用区的需求和容量可用性。

由于 Aurora 分离计算容量和存储,因此,集群的存储卷分布在多个 AZ 上。即使中断影响数据库实例或关联的 AZ,您的数据也仍可用。

Aurora Serverless 和快照

Aurora Serverless 集群的集群卷始终是加密的。您可以选择加密密钥,但无法禁用加密。要复制或共享 Aurora Serverless 集群的快照,可使用您自己的 KMS 密钥对快照加密。