Amazon Aurora
Aurora 用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

通过 Aurora PostgreSQL 的集群缓存管理提供故障转移后的快速恢复

要快速恢复 Aurora PostgreSQL 集群中的写入器数据库实例(如果进行了故障转移),请使用 Amazon Aurora PostgreSQL 的集群缓存管理。集群缓存管理可以确保在进行故障转移时保持应用程序的性能。

在典型的故障转移情况下,您可能会在故障转移后看到暂时的但很明显的性能下降。发生性能下降,是因为当故障转移数据库实例启动时,缓冲区缓存是空的。空缓存也称为冷缓存。冷缓存会降低性能,是因为数据库实例必须从更慢的磁盘读取,而不是利用缓冲区缓存中存储的值。

通过集群缓存管理,您将特定的读取器数据库实例设置为故障转移目标。集群缓存管理可以确保指定读取器缓存中的数据与写入器数据库实例缓存中的数据保持同步。预填充值的指定读取器缓存也称为热缓存。如果发生故障转移,在提升为新写入器数据库实例时,指定读取器将立即使用其热缓存中的值。这种方法会为您的应用程序提供好很多的恢复性能。

配置集群缓存管理

注意

版本 9.6.11 及更高版本与版本 10.5 及更高版本的 Aurora PostgreSQL 数据库集群不支持集群缓存管理。

要配置集群缓存管理,请执行以下步骤。

注意

完成这些步骤后,至少需要 1 分钟才能使集群缓存管理完全正常运行。

启用集群缓存管理

要为数据库集群启用集群缓存管理,请通过将 apg_ccm_enabled 参数设置为 1 来修改其参数组,如下所述。

AWS 管理控制台

启用集群缓存管理

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择参数组

  3. 在列表中,为您的 Aurora PostgreSQL 数据库集群选择参数组。

    数据库集群必须使用默认参数组以外的参数组,因为您无法更改默认参数组中的值。

  4. 对于 Parameter group actions (参数组操作),选择 Edit (编辑)

  5. apg_ccm_enabled 集群参数的值设置为 1

  6. 选择 Save changes

AWS CLI

要为 Aurora PostgreSQL 数据库集群启用集群缓存管理,请使用包含以下必需参数的 AWS CLI modify-db-cluster-parameter-group 命令:

  • --db-cluster-parameter-group-name

  • --parameters

针对 Linux、OS X 或 Unix:

aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-db-cluster-parameter-group \ --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"

对于 Windows:

aws rds modify-db-cluster-parameter-group ^ --db-cluster-parameter-group-name my-db-cluster-parameter-group ^ --parameters "ParameterName=apg_ccm_enabled,ParameterValue=1,ApplyMethod=immediate"

为写入器数据库实例设置提升层优先级

请确保 Aurora PostgreSQL 数据库集群的写入器数据库实例的提升优先级为 0 层提升层优先级是指定在发生故障后将 Aurora 读取器提升为写入器数据库实例的顺序。有效值为 0–15,0 是第一个优先级,15 是最后一个。有关提升层的更多信息,请参阅 Aurora 数据库集群的容错能力

AWS 管理控制台

将写入器数据库实例的提升优先级设置为“0 层”

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择 Aurora PostgreSQL 数据库集群的写入器数据库实例。

  4. 选择 Modify。此时会显示 Modify DB Instance (修改数据库实例) 页面。

  5. Failover (故障转移) 面板上,为 Priority (优先级) 选择 tier-0 (0 层)

  6. 选择继续,查看修改摘要。

  7. 要在保存更改后立即应用这些更改,请选择 Apply immediately (立即应用)

  8. 选择修改数据库实例以保存更改。

AWS CLI

要使用 AWS CLI 将写入器数据库实例的提升层优先级设置为 0,请调用包含以下必需参数的 modify-db-instance 命令:

  • --db-instance-identifier

  • --promotion-tier

  • --apply-immediately

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier writer-db-instance \ --promotion-tier 0 \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier writer-db-instance ^ ---promotion-tier 0 ^ --apply-immediately

为读取器数据库实例设置提升层优先级

您要为集群缓存管理设置一个读取器数据库实例。要执行此操作,请从实例类与写入器数据库实例相同的 Aurora PostgreSQL 集群选择读取器。然后,将其提升层优先级设置为 0。

提升层优先级是指定在发生故障后将 Aurora 读取器提升为写入器数据库实例的顺序。有效值为 0–15,0 是第一个优先级,15 是最后一个。

AWS 管理控制台

将读取器数据库实例的提升优先级设置为“0 层”

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择实例类与写入器数据库实例相同的 Aurora PostgreSQL 数据库集群的 Reader (读取器) 数据库实例。

  4. 选择 Modify。此时会显示 Modify DB Instance (修改数据库实例) 页面。

  5. Failover (故障转移) 面板上,为 Priority (优先级) 选择 tier-0 (0 层)

  6. 选择继续,查看修改摘要。

  7. 要在保存更改后立即应用这些更改,请选择 Apply immediately (立即应用)

  8. 选择修改数据库实例以保存更改。

AWS CLI

要使用 AWS CLI 将读取器数据库实例的提升层优先级设置为 0,请调用包含以下必需参数的 modify-db-instance 命令:

  • --db-instance-identifier

  • --promotion-tier

  • --apply-immediately

针对 Linux、OS X 或 Unix:

aws rds modify-db-instance \ --db-instance-identifier reader-db-instance \ --promotion-tier 0 \ --apply-immediately

对于 Windows:

aws rds modify-db-instance ^ --db-instance-identifier reader-db-instance ^ ---promotion-tier 0 ^ --apply-immediately

监控缓冲区缓存

在设置集群缓存管理后,您可以监控写入器数据库实例的缓冲区缓存与指定读取器的热缓冲区缓存之间的同步状态。要检查写入器数据库实例和指定读取器数据库实例上的缓冲区缓存内容,请使用 PostgreSQL pg_buffercache 模块。有关更多信息,请参阅 PostgreSQL pg_buffercache 文档

使用 aurora_ccm_status 函数

集群缓存管理还提供 aurora_ccm_status 函数。在写入器数据库实例上使用 aurora_ccm_status 函数可以获取以下有关指定读取器上的缓存预热的进度的信息:

  • buffers_sent_last_minute – 在过去一分钟内,有多少缓冲区发送到指定读取器。

  • buffers_sent_last_scan – 在上次完整扫描缓冲区缓存期间,有多少缓冲区发送到了指定读取器。

  • buffers_found_last_scan – 有多少缓冲区被识别为经常访问,并需要在上一次完整扫描缓冲区缓存期间发送。已在指定读取器上缓存的缓冲区不会发送。

  • buffers_sent_current_scan – 在当前的扫描期间,到现在已经发送了多少缓冲区。

  • buffers_found_current_scan – 在当前的扫描中,有多少缓冲区被识别为经常访问。

  • current_scan_progress – 在当前的扫描期间,到现在有多少缓冲区已被访问。

以下示例演示如何使用 aurora_ccm_status 函数将其一部分输出转换为热速率和热百分比。

SELECT buffers_sent_last_minute*8/60 AS warm_rate_kbps, 100*(1.0-buffers_sent_last_scan/buffers_found_last_scan) AS warm_percent FROM aurora_ccm_status();