用户数据依据 distribution 分布信息表进行存储分布。当集群扩容新节点后,新节点参与存储和计算,distribution 分布信息表必然需要重新建立。用户数据从旧的 distribution 分布信息表过渡到新的distribution 分布信息表的数据存取过程称为数据搬移。
数据搬移的操作命令是 rebalance,其是异步执行命令。
语法:
rebalance <instance/database 库名/table 表名> [to distribution_id]
注:
Rebalance 须在 coordinator 上执行。
Rebalance 不支持跨 VC 操作。
在 coordinator 上 使 用 gccli 执 行 rebalance 命 令 后 , rebalance 任 务 会 被 加 入 到
gclusterdb.rebalancing_status 集群表中。
gclusterdb.rebalancing_status 表中记录 5 种任务执行状态:
当表处于 STARTING 状态时,coordinator 后台线程开始执行表的 rebalance 操作,表状态转换成RUNNING。
当表处于 RUNNING 状态时,coordinator 后台线程完成了表的 rebalance 操作,表状态转换成COMPLETED。
当表处于 STARTING 和 RUNNING 状态时,对表执行 pause rebalance 操作,rebalance 暂停。表状态转换成 PAUSED。
如:pause rebalance table [database_name.]table_name
当表处于 PAUSED 状态时,对表执行 continue rebalance 操作,rebalance 继续执行,表状态转换成RUNNING。如: continue rebalance table [database_name.]table_name
当表处于 RUNNING 状态时,coordinator 后台线程执行表的 rebalance 操作失败,表状态转换成STARTING。
当表处于 STARTING、RUNNING 和 PAUSED 状态时,对表执行 cancel rebalance 操作,表状态转换成CANCELED。搬移任务取消。
如:cancel rebalance table [database_name.]table_name
rebalance 任务执行状态可以从 gclusterdb.rebalancing_status 表中查询。
如下图:
coordinator 集 群 会 从 gclusterdb.rebalancing_status 中 选 取 优 先 级 最 高 的gcluster_rebalancing_concurrent_count 个表进行 rebalance 操作。数字越小优先级越高。
优先级(priority)设置方法:
gbase> update gclusterdb.rebalancing_status set priority=4 where index_name='test.t2';
调整 test 库 t2 表的 rebalance 优先级为 4。它的数字比 t1 和 t3 表都小,所有最优先搬移。
gcluster_rebalancing_concurrent_count 用于指定并发执行 rebalance 表的个数。
用法:
gbase> set global gcluster_rebalancing_concurrent_count = 2;
设置 rebalance 同时并发搬移 5 张表。
参数:
N :并发操作数。须指定有几张表做 rebalance 并发操作(缺省值为 5);
0 :无并发,即不执行 rebalance 操作。
结合上图,因为并发数设置为 2,那么优先级最高的 2 个表优先执行 rebalance 操作。即 test.t2 和
test.t1 表并发执行搬移操作。