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

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

可使用错误注入查询来测试 Aurora PostgreSQL 数据库集群的容错能力。错误注入查询作为 SQL 命令发布到 Amazon Aurora 实例。错误注入查询使您能够计划以下事件的模拟测试:

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

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

注意

目前,以下版本支持 Aurora PostgreSQL 的错误注入查询:

  • 版本 2.4(与 PostgreSQL 版本 10.11 兼容)。

  • 版本 3.2(与 PostgreSQL 版本 11.7 兼容)。

测试实例崩溃

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

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

语法

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

选项

该错误注入查询采用下列崩溃类型之一:

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

  • 'dispacher'模拟 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, quantity, 'replica_name' );

选项

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

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

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

    注意

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

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

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

    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, quantity );

选项

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

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

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

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

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

测试磁盘拥塞

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

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

语法

SELECT aurora_inject_disk_congestion( percentage_of_failure, index, is_disk, quantity, minimum, maximum );

选项

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

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

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

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

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

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

  • minimummaximum拥塞延迟的最小和最大时间长度(以毫秒为单位)。标记为拥塞的磁盘区段,在模拟持续时间内将延迟一段随机时间,该时间在最小和最大时间范围内。