在上一篇PolarDB MySQL 版 Serverless测评博文中:https://developer.aliyun.com/article/1385834 关于弹性压测三通过增加只读节点压测来观测到Serverless弹性增加只读节点的操作,当时时间有限,在等待了20~30min中后仍未看到只读节点总数超过2个,这里继续尝试。
弹性压测三后续
为了可以更快的达到:当数据库接收到新的只读负载后,Serverless系统会继续创建新的只读节点,直到满足新增只读负载的要求的目标。这里修改Serverless配置为
等待集群配置切换成功,此时查看集群节点信息
执行256并发读写混合压测请求
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
可以看到当主节点弹升到最大规格后,Serverless系统会逐个创建只读节点,分摊主节点的读请求,直到只读节点的数量满足当前负载。只读节点自动创建大概需要耗时5~10min左右
只读节点大概11:00左右创建成功,
但是点击【性能监控】页面,查看11:00到当前时间的PCU数量及PCU CPU使用率,并没有看到只读节点的相关信息
点击刷新【性能监控】页面也看不到只读节点的监控信息,这说明目前性能监控这里对于Serverless弹性增加节点的监控有一定的延迟性,为了看到只读节点的监控信息,等待到14min中的时候刷新性能监控页面,看到了只读节点信息
但是这里看到的只读节点信息在11:02分已经有监控信息了,但是刚才在11:08分刷新性能监控页面时未看到只读节点信息,而是在11:14才看到了11:02分的只读节点监控信息,也就是说性能监控页面展示大概延迟12min左右。
下面新建压测窗口,发起256并发的只读请求,验证只读节点Serverless弹性增加
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
为了更快的看到只读节点的增加,可以增加多个压测窗口发起256并发只读请求,这里可以看到新的只读节点Serverless弹性创建中
这里我再增加几个压测窗口发起256并发只读请求,等待5min左右可以看到新的只读节点创建中
持续观测一段时间【性能监控】可以看到主节点、只读节点PCU数量及PCU CPU使用率都趋于稳定,保持在1PCU
此时系统判定,Serverless规格已经满足实际负载,不会再继续增加新的只读节点。
自动缩容
停掉所有的Sysbench脚本后等待20min左右可以看到集群只读节点减少,剩下2个只读节点
等待较长时间后,最终PolarDB会缩容到只有一个主节点的状态。
全局一致性测试
高性能全局一致性SCC特性可以为PolarDB for MySQL Serverless提供跨节点无损读扩展的能力,即RO的无损强一致读。传统的Serverless的方案均是基于单机原地升降配实现,其规格受限于单物理机资源。而当RO能借助SCC提供无损强一致读后,针对大部分读多写少业务,我们都可以跨机提供CPU资源,上限远超单物理机限制。
修改Serverless配置,只读节点下限设置为1
使用mysqlsct工具验证RO的无损强一致读的特性,执行如下命令
/root/mysqlsct --host-rw=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --host-ro=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --port-rw=3306--port-ro=3306--user=test_user --password=Password123 --iterations=100000--table-cnt=1--table-size=1000-f=0--concurrency=1--database=sct --sc-gap-us=0--report-interval=2--test-mode=sct
执行后,可以看到一致性检查全部通过
点击【参数配置】集群下方【修改参数】按钮,修改loose_innodb_polar_scc参数为OFF,单击提交修改,单击确定,关闭SCC特性关闭SCC
弹框可以勾选需要关闭的数据库节点信息
等待1~3min参数配置生效后
回到测试窗口重新执行命令
/root/mysqlsct --host-rw=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --host-ro=pc-uf6dn249n6fn7w18m.rwlb.rds.aliyuncs.com --port-rw=3306--port-ro=3306--user=test_user --password=Password123 --iterations=100000--table-cnt=1--table-size=1000-f=0--concurrency=1--database=sct --sc-gap-us=0--report-interval=2--test-mode=sct
执行后,可以看到一致性检查出现失败
测评体验
整个测评体验的操作基本没有什么疑问,控制台的属性配置以及Serverless参数配置也很容易理解参数功能。只是在体验过程中,耗时比较久,通过配置Serverless实现弹性伸缩数据库节点,当负载升高时,自动增加数据库节点,当负载降低时,自动减少数据库节点。这个增加或者减少数据库节点的过程比较耗时,想要观察结果的话需要一定的耐心。
另外就是性能监控的延迟性,希望后续可以减少一下延迟,现在的结果来看,总感觉性能监控看到的内容都是十几分钟或者二十几分钟之前的集群信息。
最后就是PolarDB MySQL版Serverless弹性伸缩增加或减少数据库节点,对应的数据一致性如何保证,这个请各位开发者放心,查阅官方文档
可以看到数据一致性可以保证数据强一致性,到这里对于PolarDB MySQL版Serverless的测评全部结束,整体过程除了耗时以外,产品本身很棒。
片尾提出一个小疑问,就是说PolarDB MySQL版Serverless弹性伸缩时,只读节点的数据是否与现有主节点及只读节点的数据是一致的?查阅了一下官方文档,增加一个只读节点预计耗时5分钟,具体耗时受新增节点数量、库表数量、数据库负载等因素影响。
那么在这5分钟内主节点新增的数据当前增加的只读节点是否可以保持一致呢?大家也可以思考一下。