快速上手云原生数据库 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 的特点。

关于本教程
时间 90分钟                                      
费用 16.11 USD
相关行业 通用
相关产品 Amazon Serverless V2
受众 DBA、IT主管、架构师
级别 初级
上次更新日期 2022年6月

点击链接,收看课程教学视频(播放开始时间:01:04:47 ) 

教程说明

进入开发环境 

点击右侧按钮“登陆控制台”进入开发环境,如果您还没有账户,请先注册账户。

海外区域业务或个人使用,请注册“海外区域账户”;

中国区域业务(需企业营业执照认证),请注册“中国区域账户”。

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)

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

本章节实验目标:

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

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

  • 1.Open the Amazon RDS service console located at: https://us-east-1.console.aws.amazon.com/rds/home?region=us-east-1#databases:

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

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

    3.执行手工 Fail-over  实现主从节点切换 

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

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

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

PART 3. Aurora Serverless V2 扩展性测试

本章节实验目标:

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

  • 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 instance, 点击 connect button

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

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

    sudo su – ec2-user

    执行 ls 命令:

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

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

  • 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分钟)
    sh prepare_sysbench_data.sh [clusterEndpoint]
  • 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 按钮:

  • 在 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 资源扩展)

    sh sysbench_read_write.sh [clusterEndpoint]
  • 可以观测到 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:

Aurora Serverless V2 集群 (Min ACU 4; Max ACU 32):
主节点:aurora-serverless-v2-node-02
读节点:aurora-serverless-v2-node-01

  • 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 按钮:

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

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

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

    same_sysbench_read_write.sh

    进入到下面测试环节。

  • 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]
    ClusterID
    可以参考前面章节 Part1 第8步 CloudFormatiion output:

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

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

PART 5. 删除实验环境

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

  • For Windows users, please download PuTTY (putty) and the PuTTY Key Generator (puttygen) from the following links:

    1.Once you have downloaded putty and puttygen, open puttygen and click on Load.

    2.Please make sure that the file filter is set to “All Files (*.*) and then select dblabkeys.pem.

    3.Fill in the Key passphrase and Confirm passphrase fields with a password of your choice that will be used to encrypt your private key and then click Save private key. Please use “dblabkeys.ppk” as your new key name.

    4. Next, open putty and enter into the Host Name (or IP address) field the following value: ec2-user@
    [bastionEndpoint]

    5.Next, navigate within PuTTY to Connection → SSH → Auth and browse to the dblabkeys.ppk ppk file that you created with the PuTTY Key Generator previously, and then click Open.

    6.When prompted by the PuTTY Security Alert, click Yes.

    7.Next, enter the password that you configured when you created the dblabkeys.ppk private file previously.

  • 会话管理器是一项完全托管的 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 实例。

入门资源中心

获取更多上手教程,开发资料,以及成本管理攻略。

现在就开始在亚马逊云上构建

无论您是在寻找计算能力、数据库、存储、内容分发、人工智能与机器学习,大数据分析还是其他功能,亚马逊云科技都有相应的服务来帮助您建立具有更高灵活性、可扩展性和可靠性的复杂应用。

企业出海或个人体验

超过 200 项服务
包含 100 余种产品免费试用

发展中国业务

近百项服务
包含宁夏区域 30 余种产品免费试用