暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

探索适用于 MySQL 的 Aurora Serverless V2

原创 通讯员 2022-05-24
1253

2022年4月21日,Aurora Serverless V2 正式发布 ,适用于 MySQL 8 和 PostgreSQL,具有克服 V1 缺点的有希望的功能。以下是这些主要功能:

特征

  • 在线自动实例升迁(垂直扩展)
  • 读取扩展(最多支持 15 个只读副本)
  • 支持混合配置集群,即master可以是普通的Aurora(provisioned),reader可以是serverlessv2,反之亦然
  • 多可用区功能 (HA)
  • Aurora 全局数据库 (DR)
  • 基于内存压力的缩放
  • SQL 运行时垂直缩放
  • 允许公共 IP
  • 与自定义端口一起使用
  • 与 Aurora 版本 3.02.0 兼容,即 >= MySQL 8.0.23(仅支持)
  • 支持二进制日志
  • 支持 RDS 代理。
  • 高成本节约

现在让我们开始着手为 MYSQL 启动 serverless-v2

启动无服务器 V2

是时候选择启动我们的无服务器 v2 的引擎和版本了

引擎类型 :亚马逊极光

版本 :Amazon Aurora MySQL – 兼容版本(仅使用 MySQL)

过滤器 :打开显示支持 ServerlessV2 的版本(节省时间)

版本 :Aurora MySQL 3.02.0(兼容 MySQL 8.0.23)



实例配置和可用性

数据库实例类 :无服务器“无服务器 v2 – 新”

容量范围 :根据您的要求和成本设置(1 到 64 个 ACU)

Aurora 容量单位(ACU):2GB RAM+ CPU + N/W

可用性和耐用性 :创建 Aurora 副本

在选择容量范围时,Minimum ACU 将定义它缩小到的最低容量,即 1ACU,Maximum ACU 将定义它可以放大到的最大容量

连接和其他设置:

根据您的应用需求选择以下设置

  • 专有网络
  • 子网
  • 公共访问,(避免有利于基本安全)
  • VPC 安全组
  • 附加配置(集群组、参数组、自定义数据库端口、性能洞察、备份配置、自动小版本升级、删除保护)

为了简短起见,我接受了所有默认设置以继续“创建数据库


单击“创建数据库”后,您可以看到集群已创建,最初集群中的两个节点都将标记为“Reader instance”——不要惊慌,这很正常。

一旦第一个实例可用,它将被提升为“写入器”,现在集群已准备好接受连接,读取器在相邻 AZ 中创建的帖子,参考下图


连接和端点:


ServerlessV2 集群还提供了 3 个端点,即高可用集群、只读端点和单个实例端点


  • 集群终端节点– 此终端节点将您的应用程序连接到该无服务器 v2 集群的当前主数据库实例。您的应用程序可以执行读取和写入操作。
  • 读取器端点——无服务器 v2 集群有一个内置读取器端点,仅用于只读连接。这还可以平衡多达 15 个只读副本实例的连接。
  • 实例端点——无服务器 v2 集群中的每个数据库实例都有自己唯一的实例端点

您应该始终将集群和 RO 端点与应用程序映射以实现高可用性


监控:

尽管 Cloudwatch 涵盖了所需的指标,但为了使用 PMM 深入了解 DB 行为,我使用此链接进行快速安装,简而言之,无服务器我想查看以下内容

  • 数据库正常运行时间,查看数据库是否在扩展或缩减期间重新启动
  • 连接失败
  • 内存调整大小(InnoDB 缓冲池)

这里我拿了一台 T2.large 机器来安装和配置 PMM。

现在让我们来看看 Serverlessv2:

Aurora Serverless V2 的美妙之处在于它支持垂直扩展,即自动实例升迁以及具有只读副本的水平扩展。

在本博客的剩余部分中,将介绍 Serverless V2 的垂直扩展特性。

垂直缩放:


对于大多数集群来说,最困难的部分是在不中断现有连接的情况下即时升级编写器实例。即使使用代理/DNS 进行故障转移,也会出现连接失败。

我对垂直扩展功能的测试更加好奇,因为 AWS 声称它是在线的并且不会中断现有的连接连接,即在查询运行时。哇 !!手指交叉。

来吧让我们开始测试,所以我决定先删除“阅读器实例”,下面是我们现在集群的视图。


我的初始缓冲池分配是 672MB,因为我们的最小值 (1ACU) 我们有 2GB,其中 ¾ 分配为 InnoDB-buffer-pool


测试用例:

测试用例非常简单,使用简单的负载仿真器工具 Sysbench 施加仅插入工作负载(写入)

下面是使用的命令

# sysbench /usr/share/sysbench/oltp_insert.lua --threads=8 --report-interval=1 --rate=20 --mysql-host=mydbops-serverlessv2.cluster-cw4ye4iwvr7l.ap-south-1.rds.amazonaws.com --mysql-user=mydbops --mysql-password=XxxxXxXXX --mysql-port=3306 --tables=8 --table-size=10000000 prepare

我开始使用 8 个线程并行加载 8 个表和每个表 1M 记录的数据集

观察和时间表:

放大:

以下是我在放大过程中的观察

  • 插入在 03:57:40 开始,正好COM_INSERTS达到 12.80/秒,Serverless 以 672MB 的 buffer_pool 运行,恰好在 3:57:40 10 秒后,第一次缩放过程开始,buffer_pool 内存增加到 2GB,让我们仔细看看



  • 在 03:58:40 的一分钟后,第二个扩展过程开始,buffer_pool 大小跃升至 ~9G



  • 我一直在密切关注 MySQL 的每个扩展过程的正常运行时间,也观察线程故障,但令我惊讶的是,两者都完好无损,内存(缓冲池)以 60 秒的定期间隔线性扩展,最大达到 60GB 04:11:40



  • 数据加载于 04:10:50 完成(图形统计)


缩小:

  • 在 DB 中完成插入后,有一个短暂的 5 分钟时间,因为在生产中必须以缓慢而稳定的方式缩小规模。DB 现在完全空闲,连接已关闭,在 04:16:40 缓冲池内存从 60G 下降到 48GB
  • 缩减过程从上一次缩减操作开始每隔 3 分钟定期启动,最后在 04:34:40 无服务器又回来了

自适应放大和缩小

我想说整个放大和缩小的过程是非常适应的、智能的、组织良好的

  • 数据库性能没有滞后。
  • 保持资源的线性增加和减少
  • 没有数据库重新启动和连接失败被阻止

下面是 buffer_pool 内存扩展和缩减过程的完整快照以及 INSERT 吞吐量统计信息,这两个过程都花费了大约 40 分钟

除了 buffer_pool 无服务器还自动调整以下特定于 MySQL 的变量

innodb_buffer_pool_size

innodb_purge_threads

table_definition_cache

table_open_cache

AWS 建议在 serverlessV2 的自定义参数组中将此值保持为默认值

下面是整个放大和缩小过程的图像摘要。


AWS 已经通过 aurora serverless 实现了垂直扩展,从我的角度来看,它的生产虽然处于早期 GA 阶段。

概括:

  • Upsize 每 1 分钟按需逐渐发生。
  • 每 3 分钟在理想负载下逐渐缩小尺寸。
  • 来自 MySQL 8.0.23 的支持
  • Untouch上面说的MySQL变量

用例:

以下是 Aurora serverless V2 非常适合的一些用例


  • 应用程序,例如游戏、零售应用程序和在线赌博应用程序,其中在已知时间段内(例如白天或比赛期间)使用率很高,而在其他时间段内空闲或使用较少
  • 适用于测试和开发环境
  • 负载不可预测的多租户应用程序
  • 批处理作业

这只是一个起点,在 Aurora ServerlessV2 上还有很多未决的对话,例如水平扩展(读取扩展)、迁移、参数、DR、MutiAZ 故障转移和定价。请继续关注这里!!


文章来源:https://mydbops.wordpress.com/2022/05/22/exploring-aurora-serverless-v2-for-mysql/



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论