PolarDB for MySQL Serverless弹性测试
1. 创建实验资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~5分钟。
2. 集群参数配置介绍
PolarDB for MySQL Serverless支持开启严格强一致性集群SCC(Strict Consistency Cluster)服务和事务续传功能。开通方法为:
- 开启SCC(Strict Consistency Cluster)的服务功能(工单申请)。
- 开启事务续传:loose_innodb_trx_resume=ON (集群控制台>>配置与管理--参数配置)。
严格强一致性集群SCC(Strict Consistency Cluster):SCC功能为PolarDB for MySQL Serverless提供了跨节点无损读扩展的能力。
PolarTrans事务系统利用提交时间戳技术CTS和RDMA网络,在内核层面提供集群强一致性读SCC服务,在不损失性能的基础上,保证发往集群任意副本的读请求都可以获得强一致性的结果。
事务续传:事务续传功能为PolarDB for MySQL Serverless提供了无损跨机迁移的能力。
在常规的主备切换或热升级场景下,会产生连接闪断、新建连接短暂失败以及存量事务回滚等问题。PolarDB的事务续传特性结合PolarProxy代理的连接保持功能,可以实现对应用程序完全无感的高可用切换。
说明:本实验中测试集群已经开启以上服务,您无需手动操作。
3. 设置Serverless弹性策略
- 本步骤指导您如何设置Serverless弹性策略。
- 双击打开远程桌面的Chromium网页浏览器。
- 在RAM用户登录框中单击下一步,并复制粘贴页面左上角的子用户密码到用户密码输入框,单击登录。
- 复制下方地址,在Chromium网页浏览器打开新页签,粘贴并访问云数据库PolarDB控制台。
https://polardb.console.aliyun.com/
- 在集群列表页面顶部菜单栏中,切换资源所在地域。
说明:您可在云产品资源列表中查看PolarDB资源所在的地域。
- 在集群列表页面,找到您的PolarDB实例,单击实例ID。
说明:您可在云产品资源列表中查看实验室分配的PolarDB实例ID。
- 在基本信息页面的数据库节点区域中,单击右上角的Serverless。
- 在设置Serverless配置参数对话框中,参考如下说明配置参数,单击确定。
参数说明:
- 单节点资源弹性上限为:8 PCU。
- 单节点资源弹性下限为:1 PCU。
- RO节点个数扩展上限:0 (禁止自动添加只读节点)。
- RO节点个数扩展下限:0。
- 是否开启无活动暂停:关闭。
说明:PCU(PolarDB Capacity Unit):1个PCU的性能约等于1核2GB规格PolarDB计算节点性能。
4. 主节点Serverless弹性压测
通过sysbench脚本访问PolarDB for MySQL Serverless集群地址进行压测,PolarDB主节点的规格能够根据负载进行自动伸缩与自动配置,达到Serverless的能力。
说明:
- Sysbench是一款开源的多线程性能测试工具,可以执行数据库只读、只写、读写混合等类型的性能测试。
- 本步骤样例使用读写混合的压测类型(oltp_read_write),并发数为32线程。
- 在实验室页面右侧功能栏中,单击 图标,切换至Web Terminal。
- 执行如下命令,初始化相关数据。
说明:执行命令前,您需要将mysql-host参数修改为您的PolarDB实例的集群私网地址。您可在云产品资源列表中查看到PolarDB实例的集群私网地址。
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx.rwlb.cn-chengdu.rds.aliyuncs.com --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=mytest --tables=32 --table-size=100000 --report-interval=1 --range_selects=1 --db-ps-mode=disable --time=12000 --mysql-ignore-errors=all --skip-trx=on --rand-type=uniform --threads=32 prepare
- 执行如下命令,开始进行压测。
说明:执行命令前,您需要将mysql-host参数修改为您的PolarDB实例的集群私网地址。您可在云产品资源列表中查看到PolarDB实例的集群私网地址。
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx.rwlb.cn-chengdu.rds.aliyuncs.com --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=mytest --tables=32 --table-size=100000 --report-interval=1 --range_selects=1 --db-ps-mode=disable --time=12000 --mysql-ignore-errors=all --skip-trx=on --rand-type=uniform --threads=32 run
返回如下结果,根据sysbench输出可以直接观察到,随着TPS持续上升,但延迟(LAT)在非常快的时间内段出现下降,这说明PolarDB for MySQL Serverless处理能力存在提升。
- 在实验室页面右侧功能栏中,单击 图标,切换至远程桌面。
- 在左侧导航栏中,选择性能监控。
- 在集群页签,单击计算节点。
- 在计算节点页签,查看主节点负载情况。您可以看到随着主节点PCU CPU使用率的不断提升,PCU数量弹升到最大上限8个。
- 压测持续3分钟后,我们切换至Web Terminal中执行Ctrl+C,停止压测脚本。同时切换至远程桌面中,查看到主节点PCU CPU使用率开始下降,PCU数量随后也逐步自动减少。
5. 只读节点Serverless弹性压测
PolarDB for MySQL Serverless集群除了支持主节点自动弹性伸缩之外,还支持创建只读节点分摊主节点的读请求。借助数据库代理PolarProxy和读写分离技术,PolarDB for MySQL Serverless可以在集群维度提供更高的性能,基于不同的读负载会智能地调整只读节点的个数和各自的规格,来达到最佳的Serverless能力。
- 读写混合压测。
我们继续使用sysbench工具模拟真实使用场景流量,PolarDB for MySQL Serverless集群主节点PCU扩容到弹升上限后,会自动创建新的只读节点并分摊一部分主节点的读负载。最终使整个集群能够支撑更高的TPS请求量。
1.1 在左侧导航栏,单击基本信息。
1.2 在基本信息页面的数据库节点区域中,单击右上角的Serverless。
1.3 在设置Serverless配置参数对话框中,将RO节点个数扩展上限从0调整为2,RO节点个数扩展下限从0调整为2,单击确定。
1.4 在实验室页面右侧功能栏中,单击 图标,切换至Web Terminal。
1.5 执行如下命令,通过sysbench脚本通过访问PolarDB for MySQL Serverless集群私网地址发起32并发压测请求,模拟脚本包含read/write事务。
说明:执行命令前,您需要将mysql-host参数修改为您的PolarDB实例的集群私网地址。您可在云产品资源列表中查看到PolarDB实例的集群私网地址。
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxxxx.rwlb.cn-chengdu.rds.aliyuncs.com --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=mytest --tables=32 --table-size=100000 --report-interval=1 --range_selects=1 --db-ps-mode=disable --time=12000 --mysql-ignore-errors=all --skip-trx=on --rand-type=uniform --threads=32 run
1.6 在实验室页面右侧功能栏中,单击 图标,切换至远程桌面。
1.7 在左侧导航栏中,选择性能监控。
1.8 在集群页签,单击计算节点。
1.9 在计算节点页签,选择查看主节点(RW)负载。
1.20 在读写混合场景下写流量会被转发到主节点(RW),读流量会被均匀地打散在主节点(RW)和只读节点(RO)中。
1.21 从监控视图可见,主节点(RW)PCU已达到设置的上限(8 PCU),但只读节点(RO)PCU消耗未达到上限,因此压测期间只自动增加了一个只读节点(RO)。
- 主节点监控。
- 只读节点(RO)监控。
在计算节点页签,选择查看只读节点负载。
1.22 我们切换至Web Terminal中执行Ctrl+C,停止压测脚本后,再切换至远程桌面,查看到主节点(RW) PCU CPU使用率开始下降,PCU数量随之自动回落。
- 只读并发压测。
进一步加大只读场景的压测请求,可以观察到PolarDB for MySQL Serverless会继续创建更多的只读节点(RO),同时当前的只读节点(RO)也会自动扩容,以服务更多的读请求。
在停止sysbench脚本后,PolarDB for MySQL Serverless的所有节点都会自动缩容。整个集群的节点数量和规格都能够根据负载进行自动伸缩与自动配置,来达到Serverless的能力。
2.1 在实验室页面右侧功能栏中,单击 图标,切换至Web Terminal。
2.2 执行如下命令,通过sysbench脚本通过访问PolarDB for MySQL Serverless 集群地址发起64并发的只读请求。
说明:执行命令前,您需要将mysql-host参数修改为您的PolarDB实例的集群私网地址。您可在云产品资源列表中查看到PolarDB实例的集群私网地址。
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=xxxxxx.rwlb.cn-chengdu.rds.aliyuncs.com --mysql-port=3306 --mysql-user=test_user --mysql-password=Password123 --mysql-db=mytest --tables=32 --table-size=100000 --report-interval=1 --range_selects=1 --db-ps-mode=disable --time=12000 --mysql-ignore-errors=all --skip-trx=on --rand-type=uniform --threads=64 run
2.3 在实验室页面右侧功能栏中,单击图标,切换至远程桌面。
2.4 在左侧导航栏中,选择性能监控。
2.5 在集群页签,单击计算节点。
2.6 在只读流量测试场景下,当PolarDB for MySQL Serverless集群一主一读节点依然无法满足负载需求的情况下(PCU均已达到8个上限),会自动增加节点(最多2个只读节点)。
- 主节点PCU数量及CPU使用率。
在计算节点页签,选择查看主节点负载。
- 当只读主节(1)PCU数量达到上限后,CPU使用率依然较高,自动触发增加节点。
- 只读主节(2)为满足负载PCU自动弹至上限,PCU CPU使用率接近80% 。
2.7 我们切换至Web Terminal中执行Ctrl+C,停止压测脚本后,再切换至远程桌面,主节点(RW)及只读节点(RO) 的PCU CPU使用率开始下降。随着集群CPU使用率持续下降,节点PCU数量、节点数量可以逐步收缩。
实验链接:https://developer.aliyun.com/adc/scenario/f84a704924a841d692118d8fc24c4b83