使用错误注入查询测试 Amazon Aurora PostgreSQL - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用错误注入查询测试 Amazon Aurora PostgreSQL

可使用错误注入查询来测试 Aurora PostgreSQL 数据库集群的容错能力。错误注入查询作为 SQL 命令发布到 Amazon Aurora 实例。错误注入查询允许您使实例崩溃,以便您可以测试失效转移和恢复。您还可以模拟 Aurora 副本故障、磁盘故障和磁盘拥塞。所有可用的 Aurora PostgreSQL 版本都支持错误注入查询,如下所示。

  • Aurora PostgreSQL 版本 12、13、14 及更高版本

  • Aurora PostgreSQL 版本 11.7 及更高版本

  • Aurora PostgreSQL 版本 10.11 及更高版本

当故障注入查询指定崩溃时,它会强制 Aurora PostgreSQL 数据库实例崩溃。其他错误注入查询将导致模拟故障事件,但不会导致事件发生。提交错误注入查询时,还可指定故障事件模拟发生的时间长度。

可通过连接到 Aurora 副本的端点来将错误注入查询提交到 Aurora 副本实例之一。有关更多信息,请参阅“Amazon Aurora 连接管理”。

测试实例崩溃

您可使用错误注入查询函数 aurora_inject_crash() 强制使 Aurora PostgreSQL 实例发生崩溃。

对于该错误注入查询,不会进行故障转移。如果要测试故障转移,您可以在 RDS 控制台中为数据库集群选择 Failover(故障转移)实例操作,或者使用 failover-db-cluster Amazon CLI 命令或 FailoverDBCluster RDS API 操作。

语法

SELECT aurora_inject_crash ('instance' | 'dispatcher' | 'node');
Options

该错误注入查询采用下列崩溃类型之一。崩溃类型不区分大小写:

'instance'

模拟 Amazon Aurora 实例的 PostgreSQL 兼容数据库崩溃。

'dispatcher'

模拟 Aurora 数据库集群的主实例上的调度程序崩溃。调度程序 将更新写入到 Amazon Aurora 数据库集群的集群卷中。

'node'

模拟 Amazon Aurora 实例的 PostgreSQL 兼容数据库和调度程序崩溃。

测试 Aurora 副本故障

可使用错误注入查询函数 aurora_inject_replica_failure() 来模拟 Aurora 副本的故障。

Aurora 副本故障将在指定的时间间隔内按指定的百分比阻止复制到 Aurora 副本或数据库集群中的所有 Aurora 副本。在该时间间隔过后,受影响的 Aurora 副本将自动与主实例同步。

语法

SELECT aurora_inject_replica_failure( percentage_of_failure, time_interval, 'replica_name' );
Options

该错误注入查询采用以下参数:

percentage_of_failure

在故障事件期间阻止的复制百分比。该值可为 0 到 100 之间的双数。如果指定 0,则不会阻止任何复制。如果指定 100,则将阻止所有复制。

time_interval

模拟 Aurora 副本故障的时间长度。间隔以秒为单位。例如,如果值为 20,则模拟会运行 20 秒。

注意

在指定 Aurora 副本故障事件的时间间隔时,请小心谨慎。如果指定的时间间隔太长,并且您的写入器实例在故障事件期间写入大量数据,则您的 Aurora 数据库集群可能假定您的 Aurora 副本已发生崩溃并将替换它。

replica_name

要在其中注入故障模拟的 Aurora 副本。指定单个 Aurora 副本的名称可模拟单个 Aurora 副本故障的情况。指定空字符串可模拟数据库群集中所有 Aurora 副本故障的情况。

要确定副本名称,请参阅 server_id 函数中的 aurora_replica_status() 列。例如:

postgres=> SELECT server_id FROM aurora_replica_status();

测试磁盘故障

可使用错误注入查询函数 aurora_inject_disk_failure() 模拟 Aurora PostgreSQL 数据库集群的磁盘故障。

磁盘故障模拟期间,Aurora PostgreSQL 数据库集群会随机将磁盘区段标记为故障。在模拟期内,将阻止对这些区段的请求。

语法

SELECT aurora_inject_disk_failure( percentage_of_failure, index, is_disk, time_interval );
Options

该错误注入查询采用以下参数:

percentage_of_failure

在故障事件期间标记为故障的磁盘百分比。该值可为 0 到 100 之间的双数。如果指定 0,则不会将任何磁盘标记为故障。如果指定 100,则整个磁盘将标记为故障。

index

模拟故障事件的特定逻辑数据块。如果超出了可用逻辑数据块或存储节点数据的范围,您会收到一条错误,告知您可指定的最大索引值。要避免此错误,请参阅 显示 Aurora PostgreSQL 数据库集群的卷状态

is_disk

指示注入失败是针对逻辑数据块还是存储节点。指定 true 意味着注入失败针对逻辑数据块。指定 false 意味着注入失败针对存储节点。

time_interval

模拟磁盘故障的时间长度。间隔以秒为单位。例如,如果值为 20,则模拟会运行 20 秒。

测试磁盘拥塞

可使用错误注入查询函数 aurora_inject_disk_congestion() 模拟 Aurora PostgreSQL 数据库集群的磁盘拥塞情况。

磁盘拥塞模拟期间,Aurora PostgreSQL 数据库集群会将磁盘区段标记为拥塞。在模拟持续时间内,对这些区段的请求将在指定的最小和最大延迟时间之间延迟。

语法

SELECT aurora_inject_disk_congestion( percentage_of_failure, index, is_disk, time_interval, minimum, maximum );
Options

该错误注入查询采用以下参数:

percentage_of_failure

在故障事件期间标记为拥塞的磁盘百分比。这是介于 0 到 100 之间的双精度值。如果指定 0,则不会将任何磁盘标记为拥塞。如果指定 100,则整个磁盘将标记为拥塞。

index

用于模拟故障事件的特定逻辑数据块或存储节点。

如果超出了数据的可用逻辑数据块或数据存储节点的范围,您将收到一条错误,告知您可指定的最大索引值。要避免此错误,请参阅 显示 Aurora PostgreSQL 数据库集群的卷状态

is_disk

指示注入失败是针对逻辑数据块还是存储节点。指定 true 意味着注入失败针对逻辑数据块。指定 false 意味着注入失败针对存储节点。

time_interval

模拟磁盘拥塞情况的时间长度。间隔以秒为单位。例如,如果值为 20,则模拟会运行 20 秒。

最小值,最大值

拥塞延迟的最小和最大时间长度(以毫秒为单位)。有效值范围为 0.0 至 100.0 毫秒。标记为拥塞的磁盘区段,在模拟持续时间内将随机延迟一段时间,该时间在最小和最大时间之间。最大值必须大于最小值。