### **01 测试背景**
[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 是与 MySQL 兼容的关系数据库,专为云而打造,性能和可用性与商用数据库相当,成本只有其 1/10。
[Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 让您能够在云中更轻松设置、操作和扩展 MySQL 部署。借助 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail),您可以在几分钟内部署可扩展的 MySQL 服务器。
客户在使用亚马逊云科技托管 MySQL 数据库服务时,通常需要选择 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 或 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL。本次测试是对比 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 和 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 在不同模式、不同机型、有无工作负载情况下的集群故障转移时间和只读实例扩容时间,为客户在亚马逊云科技上选择托管 MySQL 数据库服务提供参考。
### **02 测试环境**
![image.png](https://dev-media.amazoncloud.cn/7b49b6c0cc694573813e0edbace20bc2_image.png "image.png")
### **03 测试前提**
本次测试基于以下 3 个前提:
* 压测实例、[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 和 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 均在一个 VPC
* [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 和 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 均使用生产模板的默认配置
* 开启 Amazon CloudTrail 分别统计集群故障转移和只读实例扩容的开始、结束时间
### **04 测试架构图**
#### **4.1 Amazon Aurora MySQL 测试架构图**
![image.png](https://dev-media.amazoncloud.cn/60e25a66a4674f508be9f2a46e9be1c2_image.png "image.png")
#### 4.2 Amazon RDS for MySQL 测试架构图
![image.png](https://dev-media.amazoncloud.cn/023e177706de4614b58986157b7c21b8_image.png "image.png")
### **05 测试用例**
### **5.1 集群故障转移时间测试用例,测试基于以下 8 种配置模式,分别测试无工作负载和有工作负载两种情况下的集群故障转移时间**
![image.png](https://dev-media.amazoncloud.cn/c53fd18a0c3e4f84be3a8aefe0739f38_image.png "image.png")
*工作负载场景:数据库存储 100GB 数据,主节点 80%CPU 工作负载
#### 5.2 只读实例扩容时间测试用例,测试基于以下 8 种配置模式,分别测试无工作负载和有工作负载两种情况下的只读实例扩容时间
![image.png](https://dev-media.amazoncloud.cn/29e5f81f419a4640afa135caeeb0b4c4_image.png "image.png")
*工作负载场景:数据库存储 100GB 数据,主节点 80%CPU 工作负载
### 06 测试方法
#### 6.1 集群故障转移时间测试方法
1. 对于 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL,在控制台上,选择目标集群的写入实例并点击下图中的“故障转移”按钮:
![image.png](https://dev-media.amazoncloud.cn/58632caa9c764530b380ef8296cea836_image.png "image.png")
2. 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算出故障转移花费的时间:
![image.png](https://dev-media.amazoncloud.cn/37d118b9d9a143c1b869ee7f15bfb6cd_image.png "image.png")
3. 对于 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL,在控制台上,选择目标集群的主实例并点击下图中的“重启”按钮,在下一个页面勾选“是否进行重启和故障转移”,点击确认:
![image.png](https://dev-media.amazoncloud.cn/8fddea5f37484b6da927f1eeb629a478_image.png "image.png")
4. 点击“日志和事件”,在下方的近期事件里查看故障转移开始和结束时间,计算得出故障转移花费的时间:
![image.png](https://dev-media.amazoncloud.cn/8a7c762790c743f686453564b181d4f2_image.png "image.png")
5. 在模拟工作负载的场景下重新统计时间,模拟工作负载的步骤如下:
- 在压测实例上安装 sysbench(步骤参看 https://github.com/akopytov/sysbench?trk=cndc-detail )
- 按照如下命令,向数据库写入 100GB 数据
```js
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
```
#### 6.2 只读实例扩容时间测试方法
1. 对于 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL,在控制台上,选择目标集群并点击下图中的“添加读取器”按钮:
![image.png](https://dev-media.amazoncloud.cn/2417a11feaf041198264b0dba50c8d6c_image.png "image.png")
2. 使用 CloudTrail 里 CreateDBInstance 事件的时间作为添加只读实例的开始时间:
![image.png](https://dev-media.amazoncloud.cn/4fc0fa096d31493495644745276d19b5_image.png "image.png")
3. 回到控制台,在目标集群 “日志和事件”里使用最后一步的时间作为添加只读实例的结束时间:
![image.png](https://dev-media.amazoncloud.cn/29da1792d3d345228f4684d6cfa48ea5_image.png "image.png")
4. 对于 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL,在控制台上,选择目标集群并点击下图中的“创建只读副本”按钮:
![image.png](https://dev-media.amazoncloud.cn/f17096f77e744174916122849c286df8_image.png "image.png")
5. 使用 CloudTrail 里 CreateDBInstanceReadReplica 事件的时间作为添加只读实例的开始时间:
![image.png](https://dev-media.amazoncloud.cn/83316a06b27e4230a93d1dcc9d5ebed4_image.png "image.png")
6. 回到控制台,在目标集群“日志和事件”里使用最后一步的时间作为添加只读实例的结束时间:
![image.png](https://dev-media.amazoncloud.cn/cc4af5c172c1430286dd7f4bb5050c52_image.png "image.png")
7. 在模拟工作负载场景下重新统计时间,模拟工作负载步骤如下:
- 在压测实例上安装 sysbench(步骤参看 https://github.com/akopytov/sysbench?trk=cndc-detail )
- 按照如下命令,向数据库写入 100GB 数据
```js
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
```
- 按照如下命令,对主节点进行压力测试
```js
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来控制工作负载,不同数据库实例类型线程数不一样
```
### 07 测试数据
#### 7.1 集群故障转移时间测试数据
![image.png](https://dev-media.amazoncloud.cn/95072f89def54d169e702dba7cd16a4a_image.png "image.png")
表格记录时间均为 3 次测试的平均时间
![image.png](https://dev-media.amazoncloud.cn/f2be1bd78d0242dca81bf98d0ff13554_image.png "image.png")
#### 7.2 只读实例扩容时间测试数据
![image.png](https://dev-media.amazoncloud.cn/1d9c60ef0cf54de18433d44d09608ac8_image.png "image.png")
表格记录时间均为 3 次测试的平均时间
![image.png](https://dev-media.amazoncloud.cn/4438face2e0c4f1398c5ed0bc0f1ec7e_image.png "image.png")
### **08 测试结论**
1. [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 的集群故障转移时间与读写模式、实例机型、工作负载相关性较小,整体时间分布在 29 秒-41 秒之间。[Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的集群故障转移时间与读写模式、实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 50 秒-65 秒,有工作负载时增加至 85 秒-93 秒,有工作负载的情况下故障转移时间变长。
2. [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 的只读实例扩容时间与读写模式,实例机型、工作负载相关性较小,整体时间分布在 6 分 08 秒-6 分 57 秒之间。[Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的只读实例扩容时间与读写模式,实例机型相关性较小,与工作负载相关性较大,在无工作负载时为 6 分 12 秒-7 分 1 秒,有工作负载时增加至 15 分 19 秒-15 分 31 秒,有工作负载的情况下只读实例扩容时间变长。
3. 对比 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 和 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL
* 在无工作负载的情况下,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 集群故障转移时间为 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的 64%,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 集群故障转移时间更短。
* 在无工作负载的情况下,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 的只读实例扩容时间为 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的 96%,两者相差较小。
* 在有工作负载的情况下,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 集群故障转移时间为 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的 33%,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 集群故障转移时间更短。
* 在有工作负载的情况下,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 的只读实例扩容时间为 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 的 42% ,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 只读实例扩容时间更短。
综上所述,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 无论是在集群故障转移时间还是只读实例扩容时间都优于 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL。
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/a5a37fb13c6942fa9ae7da7314392d8a_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")