GBase 8a
其他
文章

8a数据重分布功能介绍测试

发表于2024-12-13 21:45:4746次浏览1个评论

8a重分布功能通常使用在数据库节点扩容、缩容、数据重分布、节点替换等场景。通过数据重分布将数据按照规则分布到各个节点。
rebalance命令负责表数据在节点间的重新分布,支持以下功能:
1)数据库提供了3个级别的数据重分布,分别是实例级、数据库级分布和表级。
用户可以根据不同的场景选择合适的分布级别。
2)对于需要大批量表的数据搬移,还提供了分布优先级和并发分布数量来进行更细粒度的控制。
3)rebalance命令在任务下发到后台后即返回结果,数据库提供执行过程信息的查询,可以按数据表查询开始分布和结束分布的时间、分布进度、分布优先级等信息,用户可以通过访问gclusterdb.rebalancing_status进行查看。
4)提供取消和暂停功能,对后台任务进行控制。
重分布过程中,已经重分布完成的表可正常读写,正在重分布过程中的表可读。
重分布速度大概是单节点50-100M每秒,操作过程中可读不可写。

测试速度如下:

gcluster_rebalancing_step一般默认的就行 。测试的如果想对现有表影响小一点就count调小一点 degree大一点 
gcluster_rebalancing_parallel_degree=20,gcluster_rebalancing_concurrent_count=1 66M/s 
gcluster_rebalancing_parallel_degree=10,gcluster_rebalancing_concurrent_count=2 68M/s 
gcluster_rebalancing_parallel_degree=8,gcluster_rebalancing_concurrent_count=4 100M/s 
gcluster_rebalancing_parallel_degree=8,gcluster_rebalancing_concurrent_count=8 150M/s 


说明:
1)在coordinator上使用gccli执行rebalance命令后,rebalance任务会被加入到gclusterdb.rebalancing_status集群表中。coordinator集群会从gclusterdb.rebalancing_status中选取优先级最高的gcluster_rebalancing_concurrent_count个表进行rebalance。
2)coordinator集群中只会有一个coordinator节点负责后台执行表rebalance,不支持多个coordinator并行执行行rebalance命令。
3)rebalance任务执行状态需要从gclusterdb.rebalancing_status表中查询。
4)不建议对gclusterdb.rebalancing_status表做ddl/dml操作。
5)只支持express引擎表的rebalance。

表状态转换:
一个表在rebalance时有5个状态,分别是:STARTING、RUNNING、COMPLETED、PAUSED、CANCELED。
当表处于 STARTING 状态时,coordinator 后台线程开始执行表的 rebalance 操作,表状态转换成RUNNING。 当
表处于 RUNNING 状态时,coordinator 后台线程完成了表的 rebalance 操作,表状态转换成COMPLETED。 
当表处于 STARTING 和 RUNNING 状态时,对表执行 pause rebalance 操作,rebalance 暂停。表状态转换成 PAUSED。

重分布主要由以下三个参数控制:

优先级(priority)设置方法
coordinator 集 群 会 从 gclusterdb.rebalancing_status 中 选 取 优 先 级 最 高 的
gcluster_rebalancing_concurrent_count 个表进行 rebalance 操作。数字越小优先级越高。
gbase> update gclusterdb.rebalancing_status set priority=4 where index_name='test.t2';
调整 test 库 t2 表的 rebalance 优先级为 4。它的数字比 t1 和 t3 表都小,所有最优先搬移。
表并发数设置
gcluster_rebalancing_concurrent_count 用于指定并发执行 rebalance 表的个数。
设置为0,代表不新增,正在跑的不会停止。
用法: gbase> set global gcluster_rebalancing_concurrent_count = 2; 参数: N :并发操作数。须指定有几张表做 rebalance 并发操作(缺省值为 5); 0 :无并发,即不执行 rebalance 操作。设置为0,等同于pause,pause rebalance table [database_name.]table_name 设置 rebalance 同时并发搬移 2 张表。 因为并发数设置为 2,那么优先级最高的 2 个表优先执行 rebalance 操作。即 test.t2 和 test.t1 表并发执行搬移操作
随机表快速模式
  因为数据库中的随机分布表在分布存储时是随机的,只需要保证各节点数据分布平均即可,所以在执行 rebalance 操作时可以使用快速模式。即由系统自动调度搬移的数据,实现各节点数据平均分布。
  用法:
gbase> set global gcluster_rebalancing_random_table_quick_mode = 0; 

参数: 1:开启随机分布表执行 rebalance 操作时执行快速模式(缺省值); 0 :关闭快速模式。 
在做创建新的分布规则的时候要指定extension参数,让原来distributionid的分片不动,该参数才会生效,不然就是随机分布表也会重分布。
参照下图:

Rebalance 步长
指定 rebalance 操作时每一批搬移数据的条数。
注:gcluster_rebalancing_step 值越大,从原表向中间表重分布数据的速度越快,rebalance 过程中暂停时等待的时间也就越长。
用法: gbase> set global gcluster_rebalancing_step= 0; 

参数: n:是原表的每个分片每一批向中间表重分布的数据行数。(缺省值=10000000); 0 :rebalance 操作不分批。
功能说明:
rebalance 默认往最新的distribution上分布,也可以通过to distributionid语法往指定拓扑上分布。在进行分布之前,需要确认gclusterdb.rebalancing_status中没有该表的分布记录,如果有可以使用delete from 语句删除记录,否则会影响分布命令的执行。

暂停、继续充分布功能测试:(具体语法见手册)
1.使用pause rebalance tablename进行暂停重分布,使用continue rebalance恢复重分布。
暂停重分布
pause rebalance;
恢复重分布
continue rebalance;

2.通过修改gcluster_rebalancing_concurrent_count参数暂停、继续重分布。
关闭重分布并行度,设置为0:
set global gcluster_rebalancing_concurrent_count = 0;

运行rebalacne instance 
rebalance instance;

设置合适的并行度参数,开启重分布
set global gcluster_rebalancing_concurrent_count = 10;
在业务繁忙时可以调低并行度或暂停重分布。

监控重分布过程,status为COMPLETED为完成
select * from gclusterdb.rebalancing_status;

3.修改重分布表优先级
gbase> update gclusterdb.rebalancing_status set priority=1 where index_name='ssbm.lineorder';

评论

登录后才可以发表评论
冰凤发表于 8个月前
666