8611 集群增加了一组SQL 命令(rebalance)把表从一个distribution 转换到另一个
distribution。
rebalance 命令是异步执行命令。
在coordinator 上使用gccli 执行rebalance
命令后,
rebalance 任务会被加入到gclusterdb.rebalancing_status 集群表中。
coordinator
集群会从
gclusterdb.rebalancing_status
中选取优先级最高的
gcluster_rebalancing_concurrent_count 个表进行rebalance。
coordinator 集群中只会有
一个coordinator 节点负责后台执行表rebalance。
rebalance
任务执行状态需要从
gclusterdb.rebalancing_status
表中查询。
gclusterdb.rebalancing_status
的表结构如下图所示。不建议对
gclusterdb.rebalancing_status 表做ddl/dml 操作。
表 4-16 gclusterdb.rebalancing_status 的表结构图
字段名
字段类型
字段含义
index_name
varchar(129)
数据库名.表名
db_name
varchar(64)
数据库名
table_name
varchar(64)
表名
tmptable
varchar(129)
rebalance 任务执行时使用的中
间表名称。如果不使用中间表,
那么该字段值为NULL。
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 121
start_time
datetime
在STARTING 状态时,
表示任务加
入的时间。在RUNNING 状态时,
start_time 表示任务更改为
RUNNING 的时间。
end_time
datetime
表示rebalance 任务结束的时间。
status
varchar(32)
表示rebalance 任务的当前状态。
percentage
int(11)
表示rebalance 任务的执行进度。
priority
int(11)
表示rebalance 任务的优先级。
值最小的优先执行。
host
varchar(32)
表示rebalance 任务被哪个
coordinator 节点执行。
distribution_id
bigint(8)
表示rebalance 任务要把表
rebalance 到哪个distribution
id。
一个表在rebalance 时有5 个状态,
分别是:
STARTING、
RUNNING、
COMPLETED、
PAUSED、CANCELED。这5 种状态转换如下图所示:
图 4-1 5 种状态转换图
RUNNING
STARTING
PAUSED
CANCELED
COMPLETED
说明
安装系统时,需要把划分的逻辑卷mount 到 /opt 目录,因为GBase UP 默认会安装在
这个目录下,需要使用的空间比较大。
表处于STARTING 状态时,
coordinator 后台线程开始执行表的rebalance 操作,
表状态
转换成RUNNING。
表处于PAUSED 状态时,
对表执行continue rebalance 操作,
表状态转换成RUNNING。
表处于RUNNING 状态时,coordinator 后台线程执行表的rebalance 操作失败,表状态
转换成STARTING。
表处于RUNNING 状态时,coordinator 后台线程完成了表的rebalance 操作,表状态转
换成COMPLETED。
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 122
注意
当前版本只支持express 引擎表的rebalance,不支持GsSYS 引擎表rebalance。
rebalance table
语法格式
rebalance table[database_name.] table_name [to distribution_id]
命令说明
对database_name.table_name 做rebalance 操作。如果不指定[to distribution_id],那
么rebalance 操作会把database_name.table_name 转换到新的distributon 上。如果
database_name.table_name 已经是分布在新的distribution 上,那么rebalance table 操
作报错,不会向gclusterdb.rebalancing_status 中增加rebalance 任务。如果指定[to
distribution_id],那么rebalance 操作会把database_name.table_name 转换到指定的
distribution_id上。
如果database_name.table_name已经是分布在指定的distribution_id
上,那么rebalance table 操作报错,不会向gclusterdb.rebalancing_status 中增加
rebalance 任务。
gbase> rebalance table testdis;
Query OK, 1 row affected
gbase> rebalance table testdis to 1;
Query OK, 1 row affected
pause rebalance table
语法格式
pause rebalance table [database_name.]table_name
命令说明
如果table_name 处于STARTING 或者RUNNING 状态,可以使用pause rebalance
table 命令暂停table_name 的rebalance 操作。如果pause rebalance table 命令返回影
响行数为1,则table_name 暂停成功;如果返回影响行数为0,则table_name 暂停
不生效。
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 123
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+--------+------------+
| index_name | status | percentage |
+--------------+--------+------------+
| test.testdis | RUNNING| 10 |
+--------------+--------+------------+
1 row in set
gbase> pause rebalance table testdis ;
Query OK, 1 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+--------+------------+
| index_name | status | percentage |
+--------------+--------+------------+
| test.testdis | PAUSED | 10 |
+--------------+--------+------------+
1 row in set
continue rebalance table
语法格式
continue rebalance table [database_name.]table_name
命令说明
如果table_name 处于PAUSED 状态,可以使用continue rebalance table 命令使
table_name 继续rebalance。
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+--------+------------+
| index_name | status | percentage |
+--------------+--------+------------+
| test.testdis | PAUSED | 10 |
+--------------+--------+------------+
1 row in set
gbase> continue rebalance table test.testdis;
Query OK, 1 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+---------+------------+
| index_name | status | percentage |
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 124
+--------------+---------+------------+
| test.testdis | RUNNING | 10 |
+--------------+---------+------------+
1 row in set
cancel rebalance table
语法格式
cancel rebalance table [database_name.]table_name
命令说明
如果table_name 处于STARTING、RUNNING、PAUSED 状态,可以使用cancel
rebalance table 命令取消table_name 的rebalance 操作。
如果cancel rebalance table 命
令返回影响行数为1,则table_name 的rebalance 操作取消成功;如果返回影响行数
为0,则取消操作不生效。
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+--------+------------+
| index_name | status | percentage |
+--------------+--------+------------+
| test.testdis | PAUSED | 10 |
+--------------+--------+------------+
1 row in set
gbase> cancel rebalance table testdis;
Query OK, 1 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+--------------+----------+------------+
| index_name | status | percentage |
+--------------+----------+------------+
| test.testdis | CANCELED | 0 |
+--------------+----------+------------+
1 row in set
rebalance database
语法格式
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 125
rebalance database database_name [to distribution_id]
命令说明
rebalance database 是rebalance table 的批量操作形式。如果不指定[to
distribution_id],rebalance database 把database_name 下所有分布在老的distribution
下的表转换成新的distribution 表。
如果指定了[to distribution_id],
rebalance database
把database_name 下所有不属于distribution_id 的表转换成distribution_id 表。
rebalance database 返回加入gclusterdb.rebalancing_status 的rebalance 任务数。
gbase> rebalance database test;
Query OK, 3 rows affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+----------+------------+
| index_name | status | percentage |
+---------------+----------+------------+
| test.testrep | RUNNING | 0 |
| test.testdis | STARTING | 0 |
| test.testrand | STARTING | 0 |
+---------------+----------+------------+
3 row in set
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrep | COMPLETED | 100 |
| test.testdis | RUNNING | 10 |
| test.testrand | RUNNING | 90 |
+---------------+-----------+------------+
3 row in set
pause rebalance database
语法格式
pause rebalance database database_name
命令说明
pause rebalance database 暂停database 库所有处于STARTING 或者RUNNING 状态
表的rebalance操作。
pause rebalance database返回的影响行数是暂停下来的rebalance
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 126
任务数。
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrand | COMPLETED | 100 |
| test.testdis | RUNNING | 10 |
| test.testrep | RUNNING | 90 |
+---------------+-----------+------------+
3 rows in set
gbase> pause rebalance database test;
Query OK, 1 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrand | COMPLETED | 100 |
| test.testdis | PAUSED | 30 |
| test.testrep | COMPLETED | 100 |
+---------------+-----------+------------+
3 rows in set
continue rebalance database
语法格式
continue rebalance database database_name
命令说明
continue rebalance database 使database_name 下所有处于PAUSED 状态的表继续进
行rebalance。
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrep | PAUSED | 0 |
| test.testrand | PAUSED | 10 |
| test.testdis | PAUSED | 10 |
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 127
+---------------+-----------+------------+
3 rows in set
gbase> continue rebalance database test;
Query OK, 3 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrep | STARTING | 0 |
| test.testrand | RUNNING | 10 |
| test.testdis | RUNNING | 20 |
+---------------+-----------+------------+
3 rows in set
cancel rebalance database
语法格式
cancel rebalance database database_name
命令说明
cancel rebalance database 取消database_name 下所有处于STARTING、RUNNING、
PAUSED 状态表的rebalance 操作。cancel rebalance database 命令返回的影响行数是
取消掉的rebalance 任务数。
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+---------+------------+
| index_name | status | percentage |
+---------------+---------+------------+
| test.testdis | RUNNING | 10 |
| test.testrep | RUNNING | 90 |
| test.testrand | STARTING| 0 |
+---------------+---------+------------+
3 rows in set
gbase> cancel rebalance database test ;
Query OK, 3 row affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 128
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testdis | CANCELED | 0 |
| test.testrep | COMPLETED | 100 |
| test.testrand | CANCELED | 0 |
+---------------+-----------+------------+
3 rows in set
rebalance instance
语法格式
rebalance instance [to distribution_id]
命令说明
rebalance instance 是rebalance table 的批量操作形式。
如果不指定[to distribution_id],
rebalance instance 把当前集群下所有分布在老的distribution 下的表转换成新的
distribution 表。如果指定了[to distribution_id],rebalance instance 把当前集群下所有
不属于distribution_id 的表转换成distribution_id 表。rebalance instance 返回加入
gclusterdb.rebalancing_status 的rebalance 任务数。
gbase> rebalance instance;
Query OK, 6 rows affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+----------+------------+
| index_name | status | percentage |
+---------------+----------+------------+
| test1.t1 | RUNNING | 0 |
| test.testdis | STARTING | 0 |
| test.testrand | STARTING | 0 |
| test1.t3 | STARTING | 0 |
| test1.t2 | STARTING | 0 |
| test.testrep | STARTING | 0 |
+---------------+----------+------------+
6 rows in set
pause rebalance instance
语法格式
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 129
pause rebalance instance
命令说明
pause rebalance instance 暂停当前集群下所有处于STARTING 或者RUNNING 状态
表的rebalance 操作。
pause rebalance instance 返回的影响行数是暂停下来的rebalance
任务数。
gbase> pause rebalance instance;
Query OK, 4 rows affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test1.t1 | PAUSED | 10 |
| test.testdis | PAUSED | 10 |
| test.testrand | COMPLETED | 100 |
| test1.t3 | PAUSED | 10 |
| test1.t2 | PAUSED | 10 |
| test.testrep | COMPLETED | 100 |
+---------------+-----------+------------+
6 rows in set
continue rebalance instance
语法格式
continue rebalance instance
命令说明
continue rebalance instance 使当前集群下所有处于PAUSED 状态的表继续进行
rebalance。
gbase> continue rebalance instance ;
Query OK, 4 rows affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 130
| test.testrep | COMPLETED | 100 |
| test.testdis | RUNNING | 10 |
| test.testrand | COMPLETED | 100 |
| test1.t1 | RUNNING | 10 |
| test1.t3 | RUNNING | 10 |
| test1.t2 | RUNNING | 10 |
+---------------+-----------+------------+
6 rows in set
cancel rebalance instance
语法格式
cancel rebalance instance
命令说明
cancel rebalance instance 取消当前集群下所有处于STARTING、
RUNNING、
PAUSED
状态表的rebalance 操作。cancel rebalance instance 命令返回的影响行数是取消掉的
rebalance 任务数。
gbase> cancel rebalance instance ;
Query OK, 4 rows affected
gbase> select index_name, status, percentage from gclusterdb.rebalancing_status;
+---------------+-----------+------------+
| index_name | status | percentage |
+---------------+-----------+------------+
| test.testrep | COMPLETED | 100 |
| test.testdis | CANCELED | 0 |
| test.testrand | COMPLETED | 100 |
| test1.t1 | CANCELED | 0 |
| test1.t3 | CANCELED | 0 |
| test1.t2 | CANCELED | 0 |
+---------------+-----------+------------+
6 rows in set
调整rebalance 任务优先级
gclusterdb.rebalancing_status 表中记录了当前集群的rebalance 任务。任务以表为单
位。
从gclusterdb.rebalancing_status 表中除了可以查询rebalance 任务的执行状态外,
还可以调整单个rebalance 任务的优先级。priority 值最小的任务先做。如下示例,
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 131
先设置gcluster_rebalancing_concurrent_count 值为0,
然后执行rebalance database 命
令增加rebalance 任务。此时所有rebalance 任务都不会开始,可以调整rebalance 任
务的优先级。
调整完之后再设置gcluster_rebalancing_concurrent_count 为需要的并发
数,如下所示。
gbase> set global gcluster_rebalancing_concurrent_count = 0;
Query OK, 0 rows affected
gbase> rebalance database test;
Query OK, 3 rows affected
gbase> select index_name, status, priority from
gclusterdb.rebalancing_status;
+------------+----------+----------+
| index_name | status | priority |
+------------+----------+----------+
| test.t3 | STARTING | 5 |
| test.t1 | STARTING | 5 |
| test.t2 | STARTING | 5 |
+------------+----------+----------+
3 rows in set
gbase>
update
gclusterdb.rebalancing_status
set
priority
=
6
where
index_name='test.t3';
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
gbase>
update
gclusterdb.rebalancing_status
set
priority
=
4
where
index_name='test.t2';
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0
gbase> select index_name, status, priority from
gclusterdb.rebalancing_status;
+------------+----------+----------+
| index_name | status | priority |
+------------+----------+----------+
| test.t3 | STARTING | 6 |
| test.t1 | STARTING | 5 |
| test.t2 | STARTING | 4 |
+------------+----------+----------+
3 rows in set
gbase> set global gcluster_rebalancing_concurrent_count = 1;
Query OK, 0 rows affected
gbase> select index_name, status, priority from gclusterdb.rebalancing_status;
+------------+----------+----------+
| index_name | status | priority |
+------------+----------+----------+
GBase UP 产品手册 4 管理员指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 132
| test.t3 | STARTING | 6 |
| test.t1 | STARTING | 5 |
| test.t2 | RUNNING | 4 |
+------------+----------+----------+
3 rows in set