云原生数据库 Amazon Aurora Serverless v2 极致弹性伸缩
日期: 2022-09-19

Amazon Aurora Serverless v2 非常适合各种应用程序。例如,面对业务快速增长场景与海量多租户场景时,当拥有数十万个应用程序的企业,或拥有具有成百上千个数据库的多租户环境的软件即服务 (SaaS) 供应商,可以使用 Amazon Aurora Serverless v2 来管理整个 SaaS 应用中众多数据库的容量,同时还适用于业务吞吐量波动明显的场景,如游戏业务、电商业务、测试环境等,以及无法预估吞吐量的新业务系统。对于大部分时间都处于低谷的业务系统,Amazon Aurora Serverless v2 可以有效地为客户节省成本。

 

 

前言

 


Aurora Serverless 是 Amazon Aurora 的按需自动扩展配置。Aurora Serverless v2 在几分之一秒内将数据库工作负载扩展到数十万个事务。它以细粒度的增量调整容量,为应用程序的需求提供适量的数据库资源。您无需管理数据库容量,只需为应用程序消耗的资源付费。早在2018年 Amazon Aurora 即提供了 Serverless 选项。

Amazon Aurora 最新提供的 Aurora Serverless V2 版本相比于上一代V1版本更上一层楼,重点提升部分:资源容量采用原地扩展,使资源容量扩展速度由V1分钟级提升到秒级,v2 版本能够在容量调整时做到更细粒度, 以0.5 ACU 作为扩展单元(V1翻倍扩展),并能够依据多个维度进行容量调整,通过持续的监控和尽可能大的利用缓冲池。Aurora Serverless v2 相比V1增加了完整的 Amazon Aurora 功能,包括多可用区支持、只读副本和全球数据库等,支持跨 AZ和跨区域的高可用部署和读取扩展。

Amazon Aurora Serverless v2 非常适合各种应用程序。例如,面对业务快速增长场景与海量多租户场景时,当拥有数十万个应用程序的企业,或拥有具有成百上千个数据库的多租户环境的软件即服务 (SaaS) 供应商,可以使用 Amazon Aurora Serverless v2 来管理整个 SaaS 应用中众多数据库的容量,同时还适用于业务吞吐量波动明显的场景,如游戏业务、电商业务、测试环境等,以及无法预估吞吐量的新业务系统。对于大部分时间都处于低谷的业务系统,Amazon Aurora Serverless v2 可以有效地为客户节省成本。

作为新一代云原生无服务数据库,Aurora Serverless V2 提供了无与伦比弹性伸缩性, 动如脱兔;同时也提供了面向企业级应用的坚不可摧的高可用性,静若磐石。

本实验重点会围绕着 Aurora Serverless V2 的弹性伸缩和高可用特性,展开测试和分析,进一步向您展示 Aurora Serverless V2 的特点。

 

PART 1. 创建环境

 


请登录到 AWS Management Console, 整个实验使用区域是Virginia (us-east-1) region

整体实验架构如下:

 

 

在本次实验中,首先您将利用 AWS CloudFormation 提供一个与 Aurora MySQL 8.0 兼容的数据库集群,以及一个用作堡垒机的 Linux EC2 实例。您将使用 SSH 连接到堡垒机。使用 CloudFormation 部署的环境包括以下几个组件。请下载 CloudFormation 模板(后续实验中将说明),通过 CloudFormation 将创建以下组件:

1、Amazon VPC network configuration 具有 public 和 private subnets (VPC CIDR:10.20.0.0/16)

2、数据库集群和堡垒机的数据库子网组及相关安全组

3、Amazon EC2 堡垒机实例安装和配置了本次实验所需的软件组件(EC2 配置:C5.large)

4、具有2个节点的 Amazon Aurora MySQL 8.0 预置 DB 集群:一个写节点和一个读副本 (数据库实例配置:db.R6g.large)

 

Task 1.1 –创建密钥对( Key Pair)

打开 EC2 service 控制台

https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1 – Home:

 

 

创建密钥对(key pair) 名字为 “dblabkeys”

 

 

保存密钥到本地文件

 

 

Task 1.2 – 使用 CloudFormation 创建实验所需要服务组件

1.拷贝S3 URL: CloudFormation template named lab_template.yml 为 CloudFormation 堆栈创建: https://bigdata-bingbing.s3.ap-northeast-1.amazonaws.com/aurora_serverless_v2.yaml

2.打开 CloudFormation 服务控制台在https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/

3.单击创建堆栈。

 

 

选择 Amazon S3 URL, 然后输入 CloudFormation 模版文件位置: https://bigdata-bingbing.s3.ap-northeast-1.amazonaws.com/aurora_serverless_v2.yaml 然后点击 Next.

 

 

4.在堆栈名字处,输入值 “aurora-serverless-v2”, 选择密钥对(ec2KeyPair)值为 实验开始 创建和下载的密钥, ProjectTag 选择缺省值,然后点击 next 按钮.

 

 

5.在 Configure stack options 页面, 都选择缺省值,不需要任何修改,点击 Next.

 

 

6.在 Review aurora-serverless-v2 页面, 滚动到最下端, 勾选: I acknowledge that AWS CloudFormation might create IAM resources with custom names,然后点击创建.

 

 

7.堆栈创建大约需要15分钟,您可以在堆栈详细信息页面上监视状态。您可以通过刷新事件选项卡来监视堆栈创建过程的进度。列表中的最新事件将显示 CREATE_COMPLETE 为aurora-serverless-v2 Stack 资源

在创建 CloudFormation 堆栈的同时, 我们将向您介绍 Aurora Serverless V2 特性.

 

 

8.一旦堆栈状态 CREATE_COMPLETE, 表示已经创建成功,点击 Outputs tab. 此处的值对于完成剩余的实验至关重要。请花点时间将这些值保存在您可以在剩余的实验期间轻松访问的位置。键列中显示的名称在后续步骤的说明中使用参数格式直接引用:

 

 

PART 2. 转换 Aurora 预置集群到 Aurora Serverless V2 集群

 


本章节实验目标:

Aurora Serverless V2 支持集群里采用灵活的混合配置架构, 即主节点可以是预置模式实例, 读节点是 Aurora Serverless V2 实例;同时也支持主节点是 Aurora Serverless V2 实例, 读节点是 Aurora 预置模式实例

本章节实验将创建 Aurora Serverless V2 混合配置架构 通过主从切换将预置模式集群主从节点实例转换成 Aurora Serverless V2 实例

 

Task 2.1 – 转换 Aurora 预置集群到 Aurora Serverless V2 集群

1.打开位于https://us-east-1.console.aws.amazon.com/rds/home?region=us-east-1#databases 的 Amazon RDS 服务控制台:

2.先将读节点 从预置实例模式转换成 Aurora Serverless V2 模式

 

 

整个转换时间大致8-10分钟, 这段时间大家可以去休息一下, node-02 状态变成 Storage-Optimization 表示实例类型基本更改完毕, 可进行下面的步骤

 

 

3.手工 fail-over 大致 1-2分钟 Node-02成为主节点 表示 fail-over 结束

 

 

4.再转换新读节点从预置模式成 Aurora Serverless V2 模式

 

 

整个修改过程大致需要8-10分钟,不用等待实例修改完成,可以继续下面实验内容。

 

PART 3. Aurora Serverless V2 扩展性测试

 


本章节实验目标:

Aurora Serverless V2 随负载变化的弹性伸缩能力

 

Task 3.1 – 准备测试环境

 

Task 3.1.1 – 连接到压测 EC2 堡垒机

For Windows users: 我们将使用 PuTTY 和 PuTTY 密钥生成器使用 SSH 连接到 EC2 堡垒机。如果尚未安装这些应用程序,请参考下面的步骤 Appendix 1 – Setting up PuTTY and connecting via SSH .

For macOS or Linux users: 您可以使用以下命令从终端进行连接,但需要先更改证书文件的权限:

chmod 0600 dblabkeys.pem

ssh -i [path to downloaded .pem file] ec2-user@[bastionEndpoint]

电脑上如果没有安装简单易用的 EC2 访问工具, 例如 mac 电脑 terminal 工具,可选方式:可以通过浏览器方式登陆到 EC2 堡垒机:

访问 EC2 Web 控制台https://us-east-1.console.aws.amazon.com/ec2/v2/home?region=us-east-1 – 主页

 

 

选中要访问 EC2 instance, 点击 connect button

 

 

选择用 Session Manager 方式连接 EC2 (具体如何采用 Session Manager 方式连接到 EC2 可参照附录2)

 

 

登陆上 EC2 堡垒机后, 执行以下命令:

sudo su – ec2-user

执行 ls 命令:

ls


Task 3.1.2 – 设置 EC2 堡垒机

1.输入以下命令在 SSH console 来配置 AWS CLI:

aws configure 注意 其它选项:key id/Access Key/Output format 都输入空值 即直接输入会车即可, 只需要输入地区:us-east-1

 

 

Task 3.2 – 准备 sysbench 压测数据

1.登录到 Ec2 堡垒机, 先创建压测数据库 demo, 通过 mysql 客户端连接到 Aurora Serverless V2 Cluster Endpoint, 数据库 admin 用户的密码是 Password1:

输入 admin 口令:Password1

创建测试所需要数据库 demoCreate database demo;

mysql -h [clusterEndpoint] -u admin -p

输入 admin 口令:Password1

创建测试所需要数据库 demo

Create database demo;
 

2.Sysbench 准备数据 500张表 每张表5万行(执行 shell 脚本 prepare_sysbench_data.sh,shell 脚本在 ec2-user home 目录:/home/ec2-user, 整个过程大致需要5分钟)

 

 

Task 3.3 – 准备 cloudwatch 监控 Dashboard

CloudWatch Dashboard Yaml 文件:

{
"widgets": [
{
"height": 6,
"width": 18,
"y": 0,
"x": 0,
"type": "metric",
"properties": {
"metrics": [
[ "AWS/RDS", "ServerlessDatabaseCapacity", "DBClusterIdentifier", "aurora-serverless-v2-cluster", { "yAxis": "right" } ],
[ ".", "CPUUtilization", ".", "." ]
],
"view": "timeSeries",
"stacked": false,
"region": "us-east-1",
"stat": "Average",
"period": 1,
"start": "-PT1H",
"end": "P0D",
"yAxis": {
"left": {
"label": "CPU Util %",
"showUnits": false
},
"right": {
"showUnits": false,
"label": "ACU"
}
},
"liveData": false,
"title": "CPUUtilization & ServerlessDatabaseCapacity"
}
},
{
"height": 6,
"width": 18,
"y": 6,
"x": 0,
"type": "metric",
"properties": {
"metrics": [
[ "AWS/RDS", "ServerlessDatabaseCapacity", "DBClusterIdentifier", "aurora-serverless-v2-cluster", { "yAxis": "right" } ],
[ ".", "Queries", ".", "." ]
],
"view": "timeSeries",
"stacked": false,
"region": "us-east-1",
"stat": "Average",
"period": 1,
"yAxis": {
"left": {
"label": "Queries/Sec",
"showUnits": false
},
"right": {
"showUnits": false,
"label": "ACU"
}
},
"liveData": false,
"title": "QueriesPerSec & ServerlessDatabaseCapacity"
}
},
{
"height": 6,
"width": 18,
"y": 12,
"x": 0,
"type": "metric",
"properties": {
"metrics": [
[ "AWS/RDS", "ServerlessDatabaseCapacity", "DBClusterIdentifier", "aurora-serverless-v2-cluster", { "yAxis": "right" } ],
[ ".", "DatabaseConnections", ".", "." ]
],
"view": "timeSeries",
"stacked": false,
"region": "us-east-1",
"stat": "Average",
"period": 1,
"yAxis": {
"left": {
"label": "DB Connections",
"showUnits": false
},
"right": {
"showUnits": false,
"label": "ACU"
}
},
"liveData": false,
"title": "DBConnections & ServerlessDatabaseCapacity"
}
},
{
"height": 3,
"width": 6,
"y": 0,
"x": 18,
"type": "metric",
"properties": {
"metrics": [
[ "AWS/RDS", "ServerlessDatabaseCapacity", "DBClusterIdentifier", "aurora-serverless-v2-cluster" ]
],
"view": "singleValue",
"region": "us-east-1",
"stacked": false,
"period": 1,
"stat": "Average"
}
},
{
"height": 3,
"width": 6,
"y": 3,
"x": 18,
"type": "metric",
"properties": {
"metrics": [
[ "AWS/RDS", "CPUUtilization", "DBClusterIdentifier", "aurora-serverless-v2-cluster" ]
],
"view": "singleValue",
"region": "us-east-1",
"period": 1,
"stat": "Average"
}
}
]
}

访问 CloudWatch web console:

https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#home:

1.创建 CloudWatch Dashboard

 

 

Dashboard 名字:aurora-serverless-v2

 

 

会出现以下窗口,请将此窗口关闭即可:

 

 

编辑 Dashboard Source 信息:

 

 

将 source 信息替换成前面 Task 3.3 的 Cloudwatch Dashboard Yaml 文件, 点击 Update 按钮:

 

 

Aurora Serverless V2 Dashboard 更新为:

 

 

保存 Dashboard 的设置 点击 Save 按钮:

 

 

Task 3.4– 执行 sysbench 测试

在 Ec2 堡垒机 执行 sysbench 压测脚本 读写测试 基于不同线程压测 10/100/50/300/10 不同线程规格压测120秒(2分钟) 每秒钟打印统计信息(执行shell 脚本 sysbench_read_write.sh,shell 脚本在 ec2-user home 目录:/home/ec2-user, 整个过程大致需要 10分钟, 不用等待此步骤结束 可以跳到下一步通过 Cloudwatch Dashboard 观测 Aurora Serverless V2 资源扩展)

 



Task 3.5 – 通过 CloudWatch Dashboard 观测 Aurora Serverless V2 是否能随着业务负载上升而敏捷扩展

 

 

可以观测到 Aurora Serverless V2 随业务负载上升可实现敏捷快速扩展,实现秒级 ACU 扩展

 

 

PART 4. Aurora Serverless V2 高可用测试

 


Aurora Serverless V2 增加了读副本功能 可以通过增加读副本 最多可创建15个读副本 实现跨 AZ 容灾以及读负载扩展;Aurora Serverless V2 的高 failover 优先级读副本(Tier 0/1)ACU 会随着主节点 ACU 伸缩 从而保障在主从负载故障切换后 快速承载主节点负载;Aurora Serverless V2 低 failover 优先级读副本(Tier 2-15)ACU 不会随着主节点 ACU 伸缩 会依据自身实例负载实现资源 ACU 伸缩

 

本章节实验目标:

1.Aurora Serverless V2 tier 0/1 读副本是否会随着主节点ACU扩展而扩展

2.Aurora Serverless V2 主从快速切换 从而实现跨AZ容灾

先看一下测试所用的 Aurora 集群环境:Open the Amazon RDS service console located at:

https://us-east-1.console.aws.amazon.com/rds/home?region=us-east-1#databases:

 

 

Aurora Serverless V2 集群 (Min ACU 4; Max ACU 32):

主节点:aurora-serverless-v2-node-02

读节点:aurora-serverless-v2-node-01

 

Task 4.1 – 准备 cloudwatch 监控 Dashboard

CloudWatch Dashboard Yaml 文件:

{
"widgets": [
{
"type": "metric",
"x": 0,
"y": 0,
"width": 6,
"height": 6,
"properties": {
"view": "timeSeries",
"stacked": false,
"metrics": [
[ "AWS/RDS", "ServerlessDatabaseCapacity", "DBInstanceIdentifier", "aurora-serverless-v2-node-01" ],
[ ".", "CPUUtilization", ".", "." ],
[ ".", "ServerlessDatabaseCapacity", ".", "aurora-serverless-v2-node-02" ],
[ ".", "CPUUtilization", ".", "." ]
],
"region": "us-east-1"
}
}
]
}

访问 CloudWatch web console:https://us-east-1.console.aws.amazon.com/cloudwatch/home?region=us-east-1#home:

2.创建 CloudWatch Dashboard

 

 

Dashboard 名字:aurora-serverless-v2-HA

 

 

会出现以下窗口,请将此窗口关闭即可:

 

 

编辑 Dashboard Source 信息:

 

 

将 source 信息替换成前面 Task 4.1 的 Cloudwatch Dashboard Yaml 文件, 点击 Update 按钮:

 

 

Aurora-Serverless-V2-HA Dashboard 更新为:

保存 Dashboard 的设置 点击 Save 按钮:

 

 

Task 4.2 – 执行 sysbench 测试 在主节点模拟恒定业务负载压力

在 Ec2 堡垒机 执行 sysbench 压测脚本 读写测试 基于100线程压测 每秒钟打印统计信息(执行shell 脚本 same_sysbench_read_writre.sh,shell 脚本在 ec2-user home 目录:/home/ec2-user, 无限循环执行, 不用等待此步骤结束 可以跳到下一步通过 Cloudwatch Dashboard 观测 Aurora Serverless V2 HA 主从节点资源扩展)

 

 

Task 4.3 – 通过 CloudWatch Dashboard Aurora Serverless V2 tier 0/1 读副本是否会随着主节点 ACU 扩展而扩展

 

 

可以观测到 Aurora Serverless V2 tier 0/1 读副本 Aurora-serverless-v2-node-01 ACU 会随着主节点 Aurora-serverless-v2-node-02 ACU 扩展而扩展:

 

 

这段测试基本结束, 可以中止前面 Task 4.2 sysbench 测试脚本

 

 

进入到下面测试环节。

 

Task 4.4 – 模拟主节点故障 通过主从节点切换 实现跨 AZ 容灾

1.在 Ec2 堡垒机 执行监控脚本,监控 Aurora Serverless V2 集群状态,每秒钟会输出主节点动态变量信息 e.g. innodb_buffer_pool_size, shell 脚本在 ec2-user home目录:/home/ec2-user, 脚本无限循环执行:

sh stats-loop.sh [clusterEndpoint]

2. 打开一个新的 terminal 窗口,在 Ec2 堡垒机 执行手工 Fail-over 脚本,shell 脚本在 ec2-user home 目录:/home/ec2-user

 

sh failover_aurora.sh [clusterId]

failover_aurora.sh
host=$1
echo "start"
date
aws rds failover-db-cluster --db-cluster-identifier $1

 

集群 ID可以参考前面章节 Part1 第8步 CloudFormatiion output:

 

 

3.返回观测步骤1的监控脚本,看到主从过程中大致有6-7秒钟,连接不到主节点,执行查询,可推测主从切换时间大致为6-7秒

 

 

再看一下测试所用的 Aurora 集群环境 执行 fail-over 后 主节点跨 AZ 切换至 aurora-serverless-v2-node-01 节点:

打开位于https://us-east-1.console.aws.amazon.com/rds/home?region=us-east-1#databases 的 Amazon RDS 服务控制台:

 

 

PART 5. 删除实验环境

 


整个实验部分结束,可以删除实验创建的 CloudFormation, 实验相关资源均会被删除:Delete CloudFormation (Related resource would be deleted)

打开 CloudFormation 服务控制台在https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/

 

 

附录 1 – 设置 PuTTY 并通过 SSH 连接

 


对于 Windows 用户,请从以下链接下载 PuTTY (putty) 和 PuTTY Key Generator (puttygen):

https://aurora-bjs-lab.s3-ap-southeast-1.amazonaws.com/putty64/putty.exe

https://aurora-bjs-lab.s3-ap-southeast-1.amazonaws.com/putty64/puttygen.exe

1.下载putty和puttygen后,打开puttygen,点击Load。

 

 

2.请确保文件过滤器设置为“所有文件 (.),然后选择 dblabkeys.pem。

 

 

3. 使用您选择的密码填写密钥密码短语和确认密码短语字段,该密码将用于加密您的私钥,然后单击保存私钥。请使用“dblabkeys.ppk”作为您的新密钥名称。

 

 

4.接下来,打开putty并在主机名(或IP地址)字段中输入以下值:ec2-user@[堡垒端点]

 

 

5.接下来,在 PuTTY 中导航到 Connection → SSH → Auth 并浏览到您之前使用 PuTTY Key Generator 创建的 dblabkeys.ppk ppk 文件,然后单击 Open。

 

 

6.当 PuTTY 安全警报提示时,单击是。

 

 

7.接下来,输入您在之前创建 dblabkeys.ppk 私有文件时配置的密码。

 

附录 2 – 通过 Session Manager (会话管理器)访问 EC2

 


会话管理器是一项完全托管的 Systems Manager 功能,可让您通过基于浏览器的交互一键式 shell 或通过 CLI 管理 Amazon EC2 实例。您可以使用会话管理器通过您账户中的实例来启动会话。启动会话后,您可以像通过任何其他连接类型一样运行 bash 命令。当您选择会话管理器标签时,可能会看到如下提示,此时您需要 Systems Manager 中进行一些配置工作:

 

 

第一步:通过 Systems Manager 的“快速设置”简化会话管理器的配置。Systems Manager 是一项灵活易用的管理服务,让企业能够安全地管理在本地或亚马逊云科技中运行的工作负载在控制台搜索 Systems Manager,并点击,进入 Systems Manager 控制面板

 

 

第二步:点击橙色左侧“快速设置”选项

 

 

第三步:在页面右侧,确认当前区域,点击橙色“Get Started”按钮

 

 

第四步:在第二个跳转界面点击 Host Management 下的 Create 按钮

 

 

第五步:Targets 根据需要选择,region 即实例所在的区域,instances 可以选择全部。本实验在当前区域中开启,如下图选择,完成右下角橙色“创建”按钮。

 

 

第六步:返回 EC2 实例页面,等待大约1分钟左右刷新,会看到 WordPress EC2 实例自动分配了一个名为AmazonSSMRoleForInstancesQuickSetup的实例配置文件

 

 

第七步:点击页面顶部的“连接”按钮,选择“会话管理器”标签,此时应当不会出现之前的错误提示。若有,请刷新页面尝试,或者重新绑定名为角色。

 

 

点击橙色“连接”按钮。您应该可以看到新打开的,可以执行指令的会话窗口,代表“会话管理器”连接成功。

 

 

本模块,您使用 SSH 终端或者会话连接器成功连接到了 EC2 实例。