跳至主要內容

Klustron在线弹性扩容之流控

Klustron大约 7 分钟

Klustron在线弹性扩容之流控

注意:

如无特别说明,文中的版本号可以使用任何已发布版本的版本号代替。所有已发布版本详见:http://doc.klustron.com/zh/Release_notes.html。

本文内容:

Klustron数据库是一个集群架构,其计算节点和存储节点都支持按需在线扩容,以匹配业务不断增长的计算性能和存储空间增长的需求,在存储节点扩容后,通常都会有一些数据重分布的调整,在底层来说,是数据从一个分片导出,并在另一个分片导入即表迁移的过程,在调整过程中,为避免对现有业务产生较大的资源冲击,Klustron支持这个迁移操作过程的流量控制,意味着数据表在节点之间的传输过程中,带宽不会无节制的占用,数据库管理员可依情况进行流控设置,本文中将通过模拟测试展示这样的设置过程,并且,通过本文的演示,可以向观众展示,在这个表迁移的过程中,业务不会被中断,并且,通过调整流控,我们可以观察到不同的流控参数值会对业务带来什么样的影响。

01 环境准备

本文所指的测试场景中,使用4台服务器,其中3台用于Klustron数据库环境,另1台用于运行sysbench,模拟在线业务,具体说明如下:

名称IP备注
计算节点192.168.0.155
存储节点1192.168.0.152
存储节点2192.168.0.153
模拟业务负载192.168.0.19运行sysbench

1.1 Klustron安装配置

《略》

1.2 Klustron 实例环境说明:

XPanel: http://192.168.0.155:40180/KunlunXPanel/#/cluster

计算节点:192.168.0.155 ,端口: 47001

存储节点(shard1):192.168.0.152, 端口:57003 (主)

存储节点(shard2):192.168.0.153, 端口:57005 (主)

Klustron 安装在kl用户下

1.3 测试用户创建

使用ssh客户端连接到计算节点,创建测试用户,执行如下指令:

psql -h 192.168.0.155 -p 47001 -U adc postgres
create user test with password 'test';
grant create on database postgres to test ;
exit

psql -h 192.168.0.155 -p 47001 -U test postgres
create schema test ;

1.4 Sysbench 安装配置

《略》

注意:默认情况下,sysbench 不支持针对PostgreSQL的测试,需要重编绎。

02 表在线迁移及流控测试

2.1 Sysbench测试数据创建

使用ssh客户端连接到模拟业务负载服务器,执行如下指令:

/usr/local/bin/sysbench ./tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-host=192.168.0.155 --pgsql-port=47001 --pgsql-user=test --pgsql-password=test --pgsql-db=postgres --oltp-tables-count=10 --oltp-table-size=500000 --time=600  --report-interval=5 --threads=50 prepare

注意:在本次测试中,为模拟相对真实的实际业务负载,选取的sysbench测试负载模式为oltp,即压测业务中对数据库既有读,也有写的操作。

2.2 检查sysbench数据表分布情况

经过上一步的测试数据初始化过程,sysbench在Klustron中已经创建了10张表,我们可以从Xpanel了解该10个表在两个shard上的分布情况,如下操作:

打开XPanel,点击“扩缩容”

选择数据库:postgres,并点击“确定”

在接下来弹出来的对话框中,我们可以看到,其中:sbtest3, sbtest5,sbtest7,sbtest9 被自动创建在了shard_1分片:

点击“shard_2”,可以看到,剩下的:sbtest1,sbtest2, sbtest4,sbtest6,sbtest8,sbtest10 被自动创建在了shard_2分片:

2.3 启动sysbench业务负载

执行如下指令,对Klustron库发送读写混合负载:

/usr/local/bin/sysbench ./tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-host=192.168.0.155 --pgsql-port=47001 --pgsql-user=test --pgsql-password=test --pgsql-db=postgres --oltp-tables-count=10 --oltp-table-size=500000 --time=600  --report-interval=5 --threads=50 run

2.4 表在线迁移测试

sysbench启动后,注意观察该工具的输出信息,如下:

可以看到,以当前50并发的负载下,我们获得的TPS/QPS,平均大约为: 600/11500 , 95分位的响应延时平均约为:100ms

连接到计算节点,用如下指令观察该服务器的资源状况:

top d 1

可观察到服务器CPU资利用50%左右,IO排队不明显:

连接到其中一个存储分片shard_2,用如下指令观察该存储服务器的资源状况:

top d 1

可观察到空闲CPU资源已降到约50%,IO等待已经较高:

用如下指令观察IO情况:

iostat -dx -p /dev/sdb 3

可观察到IO利用率已经100%,并出现了IO请求排队,说明机器IO带宽已经跑满

用类似的方法在存储分片shard_1,同样可观察到类似的情况

回到Xpanel,选择shard_1 分片的数据表:sbtest5,“是否保留原表“,选择:否, 目标shard, 选择:shard_2,如下所示:

点击“确定”,系统提示再次确认,点击“确定”,如下所示:

在点击“确定”后,Klustron开始对 sbtest5执行在线表迁移,如下所示:

回到sysbench 负载窗口,可以看到,在表在线迁移功能开始执行后,sysbench的后续输出信息中,tps/qps的值发生了变化,如下所示:

相对正常的输出行,表迁移过程中,tps/qps 在最低点整体大约下降了48%,延时未有明显变化,另外,虽然在表迁移过程中,有因为表位置发生瞬时变化而导致sysbench捕捉到个别业务报错 ,但重试后正常,未引发业务中断,sysbench负载持续正常运行。在此输出中,可以看到表迁移完成后,tps/qps也迅速恢复正常,同时XPanel也给出了表迁移完成的提示信息,如下所示:

2.5 表迁移流控测试

在192.168.0.153开启一个ssh窗口,我们来启动对网口流量的观测,执行如下指令:

nload enp0s3 -u m

窗口显示如下:

然后,在XPanel,我们选择对sbtest7进行迁移,如下:

注意:首先我们保持“文件传输限速” 的缺省值为 5120KB/s 不变,在开始迁移时,使用秒表计时。

在192.168.0.153的ssh窗口,我们可以看到网口的吞吐最高值被限制在了5MB/s左右,证明表迁移参数中的5120KB/s设置发挥了流控的作用,如下所示:

在XPanel 页面提示表迁移成功时,我们的秒表显示,此次迁移耗时约24秒。

再次回到XPanel,这次我们选择对sbtest3进行迁移,如下:

注意:这次我们对 “文件传输限速” 的值设置为1024KB/s ,在开始迁移时,使用秒表计时。

在192.168.0.153的ssh窗口,我们可以看到网口的吞吐最高值被限制在了1MB/s左右,证明表迁移参数中的1024KB/s 设置发挥了流控的作用,如下所示:

在XPanel 页面提示表迁移成功时,我们的秒表显示,此次表迁移耗时60秒,以上测试证明,表迁移设置参数中的流控参数精确限定了相应任务的网络带宽。

END