亚马逊AWS官方博客

Amazon Aurora MySQL 和 Amazon RDS for MySQL 集群故障转移和只读实例扩容时间测试

1. 测试背景

Amazon Aurora MySQL 是与 MySQL 兼容的关系数据库,专为云而打造,性能和可用性与商用数据库相当,成本只有其 1/10。

Amazon RDS for MySQL 让您能够在云中更轻松设置、操作和扩展 MySQL 部署。借助 Amazon RDS,您可以在几分钟内部署可扩展的 MySQL 服务器。

客户在使用亚马逊云科技托管 MySQL 数据库服务时,通常需要选择 Amazon Aurora MySQL 或 Amazon RDS for MySQL。本次测试是对比 Amazon Aurora MySQL 和 Amazon RDS for MySQL 在不同模式,不同机型,有无工作负载情况下的集群故障转移时间和只读实例扩容时间,为客户在亚马逊云科技上选择托管 MySQL 数据库服务提供参考。

2. 测试环境

被测服务 Amazon Aurora MySQL和Amazon RDS for MySQL
测试区域 孟买区域(ap-south-1)
测试版本

Amazon Aurora 2.11.2(MySQL 5.7)

Amazon RDS for MySQL 5.7.41

测试机型

Amazon Aurora MySQL db.r5.2xlarge 和 db.r5.xlarge

Amazon RDS for MySQL db.m5.4xlarge 和 db.m5.2xlarge

部署模式

Amazon Aurora MySQL 采用跨 AZ 部署,一写一读和一写二读两种模式

Amazon RDS for MySQL 采用 Multi-AZ 实例部署,一写一读和一写二读两种模式

压测实例 c5.12xlarge*1
压测软件 sysbench(https://github.com/akopytov/sysbench)

3. 测试前提

本次测试基于以下 3 个前提:

  • 压测实例、Amazon Aurora MySQL 和 Amazon RDS for MySQL 均在一个 VPC
  • Amazon Aurora MySQL 和 Amazon RDS for MySQL 均使用生产模板的默认配置
  • 开启 Amazon CloudTrail 分别统计集群故障转移和只读实例扩容的开始、结束时间

4. 测试架构图

4.1Amazon Aurora MySQL 测试架构图


4.2 Amazon RDS for MySQL 测试架构图


5. 测试用例

5.1 集群故障转移时间测试用例,测试基于以下 8 种配置模式,分别测试无工作负载和有工作负载两种情况下的集群故障转移时间

配置模式
Amazon Aurora MySQL db.r5.xlarge 一写一读
Amazon Aurora MySQL db.r5.xlarge 一写二读
Amazon Aurora MySQL db.r5.2xlarge 一写一读
Amazon Aurora MySQL db.r5.2xlarge 一写二读
Amazon RDS for MySQL db.m5.2xlarge 一写一读
Amazon RDS for MySQL db.m5.2xlarge 一写二读
Amazon RDS for MySQL db.m5.4xlarge 一写一读
Amazon RDS for MySQL db.m5.4xlarge 一写二读

*工作负载场景:数据库存储 100GB 数据,主节点 80%CPU 工作负载

5.2 只读实例扩容时间测试用例,测试基于以下 8 种配置模式,分别测试无工作负载和有工作负载两种情况下的只读实例扩容时间

配置模式
Amazon Aurora MySQL db.r5.xlarge 一写一读
Amazon Aurora MySQL db.r5.xlarge 一写二读
Amazon Aurora MySQL db.r5.2xlarge 一写一读
Amazon Aurora MySQL db.r5.2xlarge 一写二读
Amazon RDS for MySQL db.m5.2xlarge 一写一读
Amazon RDS for MySQL db.m5.2xlarge 一写二读
Amazon RDS for MySQL db.m5.4xlarge 一写一读
Amazon RDS for MySQL db.m5.4xlarge 一写二读

*工作负载场景:数据库存储 100GB 数据,主节点 80%CPU 工作负载

6. 测试方法

6.1 集群故障转移时间测试方法

  1. 对于 Amazon Aurora MySQL,在控制台上,选择目标集群的写入实例并点击下图中的“故障转移”按钮
  2. 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算出故障转移花费的时间
  3. 对于 Amazon RDS for MySQL,在控制台上,选择目标集群的主实例并点击下图中的“重启”按钮,在下一个页面勾选“是否进行重启和故障转移”,点击确认
  4. 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算得出故障转移花费的时间
  5. 在模拟工作负载的场景下重新统计时间,模拟工作负载的步骤如下:
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --threads=64 --mysql-host=bench-test.cluster-cum78jhrtci1.ap-south-1.rds.amazonaws.com --mysql-user=admin --mysql-password=xxxx --mysql-port=3306 --mysql-db= bench _test --oltp-tables-count=100 --oltp-table-size=5000000 --db-driver=mysql prepare
  • 按照如下命令,对主节点进行压力测试
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=bench-test.cluster-cum78jhrtci1.ap-south-1.rds.amazonaws.com --mysql-user=admin --mysql-password=xxxx --mysql-port=3306  --mysql-db= bench_test --max-requests=0 --oltp-simple-ranges=0 --oltp-distxinct-ranges=0 --oltp-sum-ranges=0 --oltp-order-ranges=0 --time=3600 --oltp-read-only=on --threads=120 run #可以通过调整 threads 来控制工作负载,不同数据库实例类型线程数不一样

6.2 只读实例扩容时间测试方法

  1. 对于 Amazon Aurora MySQL,在控制台上,选择目标集群并点击下图中的“添加读取器”按钮
  2. 使用 CloudTrail 里 CreateDBInstance 事件的时间作为添加只读实例的开始时间
  3. 回到控制台,在目标集群 “日志和事件”里使用最后一步的时间作为添加只读实例的结束时间
  4. 对于 Amazon RDS for MySQL,在控制台上,选择目标集群并点击下图中的“创建只读副本”按钮
  5. 使用 CloudTrail 里 CreateDBInstanceReadReplica 事件的时间作为添加只读实例的开始时间
  6. 回到控制台,在目标集群“日志和事件”里使用最后一步的时间作为添加只读实例的结束时间
  7. 在模拟工作负载场景下重新统计时间,模拟工作负载步骤如下:
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --threads=64 --mysql-host=bench-test.cluster-cum78jhrtci1.ap-south-1.rds.amazonaws.com --mysql-user=admin --mysql-password=xxxx --mysql-port=3306 --mysql-db= bench _test --oltp-tables-count=100 --oltp-table-size=5000000 --db-driver=mysql prepare
  • 按照如下命令,对主节点进行压力测试
sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=bench-test.cluster-cum78jhrtci1.ap-south-1.rds.amazonaws.com --mysql-user=admin --mysql-password=xxxx --mysql-port=3306  --mysql-db= bench_test --max-requests=0 --oltp-simple-ranges=0 --oltp-distxinct-ranges=0 --oltp-sum-ranges=0 --oltp-order-ranges=0 --time=3600 --oltp-read-only=on --threads=120 run #可以通过调整threads来控制工作负载,不同数据库实例类型线程数不一样

7. 测试数据

7.1 集群故障转移时间测试数据

配置模式 无工作负载集群故障转移时间 有工作负载集群故障转移时间
Amazon Aurora MySQL db.r5.xlarge 一写一读 00:00:37 00:00:29
Amazon Aurora MySQL db.r5.xlarge 一写二读 00:00:36 00:00:38
Amazon Aurora MySQL db.r5.2xlarge 一写一读 00:00:37 00:00:32
Amazon Aurora MySQL db.r5.2xlarge 一写二读 00:00:41 00:00:32
Amazon RDS for MySQL db.m5.2xlarge 一写一读 00:01:05 00:01:33
Amazon RDS for MySQL db.m5.2xlarge 一写二读 00:00:50 00:01:30
Amazon RDS for MySQL db.m5.4xlarge 一写一读 00:01:03 00:01:29
Amazon RDS for MySQL db.m5.4xlarge 一写二读 00:00:58 00:01:25

表格记录时间均为 3 次测试的平均时间

7.2 只读实例扩容时间测试数据

配置模式 无工作负载实例扩容时间 有工作负载实例扩容时间
Amazon Aurora MySQL db.r5.xlarge 一写一读 00:06:38 00:06:54
Amazon Aurora MySQL db.r5.xlarge 一写二读 00:06:07 00:06:42
Amazon Aurora MySQL db.r5.2xlarge 一写一读 00:06:08 00:06:22
Amazon Aurora MySQL db.r5.2xlarge 一写二读 00:06:11 00:06:23
Amazon RDS for MySQL db.m5.2xlarge 一写一读 00:06:23 00:15:47
Amazon RDS for MySQL db.m5.2xlarge 一写二读 00:07:10 00:15:31
Amazon RDS for MySQL db.m5.4xlarge 一写一读 00:06:12 00:15:33
Amazon RDS for MySQL db.m5.4xlarge 一写二读 00:06:18 00:15:19

表格记录时间均为 3 次测试的平均时间

8. 测试结论

  1. Amazon Aurora MySQL 的集群故障转移时间与读写模式、实例机型、工作负载相关性较小,整体时间分布在 29 秒-41 秒之间。Amazon RDS for MySQL 的集群故障转移时间与读写模式、实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 50 秒-65 秒,有工作负载时增加至 85 秒-93 秒,有工作负载的情况下故障转移时间变长。
  2. Amazon Aurora MySQL 的只读实例扩容时间与读写模式,实例机型、工作负载相关性较小,整体时间分布在 6 分 08 秒-6 分 57 秒之间。Amazon RDS for MySQL 的只读实例扩容时间与读写模式,实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 6 分 12 秒-7 分 1 秒,有工作负载时增加至 15 分 19 秒-15 分 31 秒,有工作负载的情况下只读实例扩容时间变长。
  3. 对比 Amazon Aurora MySQL 和 Amazon RDS for MySQL
  • 在无工作负载的情况下,Amazon Aurora MySQL 集群故障转移时间为 Amazon RDS for MySQL 的 64%,Amazon Aurora MySQL 集群故障转移时间更短。
  • 在无工作负载的情况下,Amazon Aurora MySQL 的只读实例扩容时间为 Amazon RDS for MySQL 的 96%,两者相差较小。
  • 在有工作负载的情况下,Amazon Aurora MySQL 集群故障转移时间为 Amazon RDS for MySQL 的 33%,Amazon Aurora MySQL 集群故障转移时间更短。
  • 在有工作负载的情况下,Amazon Aurora MySQL 的只读实例扩容时间为 Amazon RDS for MySQL 的 42% ,Amazon Aurora MySQL 只读实例扩容时间更短。

综上所述,Amazon Aurora MySQL 无论是在集群故障转移时间还是只读实例扩容时间都优于 Amazon RDS for MySQL。

本篇作者

韩宇光

AWS 解决方案架构师,熟悉互联网业务的大数据业务场景,在加入 AWS 之前,在猎豹移动任职大数据高级运维工程师,有 10 多年的运维经验,深入理解云架构设计,对云上的运维,Devops,大数据解决方案有丰富的实践经验。

郭立

于 2019 年加入亚马逊云科技,担任资深解决方案架构师和解决方案架构师经理,负责带领架构师团队支持战略客户和企业客户,同时为亚马逊云科技机器学习、数据分析与安全合规技术专家。