亚马逊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 集群故障转移时间测试方法
- 对于 Amazon Aurora MySQL,在控制台上,选择目标集群的写入实例并点击下图中的“故障转移”按钮
- 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算出故障转移花费的时间
- 对于 Amazon RDS for MySQL,在控制台上,选择目标集群的主实例并点击下图中的“重启”按钮,在下一个页面勾选“是否进行重启和故障转移”,点击确认
- 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算得出故障转移花费的时间
- 在模拟工作负载的场景下重新统计时间,模拟工作负载的步骤如下:
- 在压测实例上安装 sysbench(步骤参看 https://github.com/akopytov/sysbench)
- 按照如下命令,向数据库写入 100GB 数据
- 按照如下命令,对主节点进行压力测试
6.2 只读实例扩容时间测试方法
- 对于 Amazon Aurora MySQL,在控制台上,选择目标集群并点击下图中的“添加读取器”按钮
- 使用 CloudTrail 里 CreateDBInstance 事件的时间作为添加只读实例的开始时间
- 回到控制台,在目标集群 “日志和事件”里使用最后一步的时间作为添加只读实例的结束时间
- 对于 Amazon RDS for MySQL,在控制台上,选择目标集群并点击下图中的“创建只读副本”按钮
- 使用 CloudTrail 里 CreateDBInstanceReadReplica 事件的时间作为添加只读实例的开始时间
- 回到控制台,在目标集群“日志和事件”里使用最后一步的时间作为添加只读实例的结束时间
- 在模拟工作负载场景下重新统计时间,模拟工作负载步骤如下:
- 在压测实例上安装 sysbench(步骤参看 https://github.com/akopytov/sysbench)
- 按照如下命令,向数据库写入 100GB 数据
- 按照如下命令,对主节点进行压力测试
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. 测试结论
- Amazon Aurora MySQL 的集群故障转移时间与读写模式、实例机型、工作负载相关性较小,整体时间分布在 29 秒-41 秒之间。Amazon RDS for MySQL 的集群故障转移时间与读写模式、实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 50 秒-65 秒,有工作负载时增加至 85 秒-93 秒,有工作负载的情况下故障转移时间变长。
- Amazon Aurora MySQL 的只读实例扩容时间与读写模式,实例机型、工作负载相关性较小,整体时间分布在 6 分 08 秒-6 分 57 秒之间。Amazon RDS for MySQL 的只读实例扩容时间与读写模式,实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 6 分 12 秒-7 分 1 秒,有工作负载时增加至 15 分 19 秒-15 分 31 秒,有工作负载的情况下只读实例扩容时间变长。
- 对比 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。