南大通用GBase 8a 扩容重分布后因快速扩容参数gcluster_rebalancing_random_table_quick_mode 导致磁盘空间没有明显变动

GBase 8a数据库集群支持扩容功能,一般是因为磁盘空间或者性能原因。如果扩容重分布后磁盘空间没有明显变动,那可能是有大量的随机分布表,他们默认是不参与数据重新分散到所有节点的。但要求原有节点的主备策略不能有变动。

原因

因为随机分布表的特性,数据在任何节点都不影响查询结果,而且大部分随机分布表都是大表,也就是不适合选择某个列做Hash分布表。而这种表因为磁盘占用大,如果参与重分布,则需要大量的时间,所以数据库提供了参数,默认随机分布表做快速重分布,不重新分散数据,而是保留现有数据状态。

参数:gcluster_rebalancing_random_table_quick_mode

默认值:1

注意:

如果扩容后的分布结构变动,比如原有50个节点,其中node50的副本在node1上。扩容50个到100个。如果新的策略里,node50的副本在node51上,那就无法避免要搬迁数据了。此时,这个随机表快速模式将失效。

所以扩容后的主备策略,要将原有的策略保留下来,新扩容的节点之间做主备。方法有2个

1、自定义策略,先得到现有的策略(gcadmin showdistribution f),只在末尾追加新节点的主备策略。参考《南大通用GBase 8a自动生成gcChangeInfo.xml同组互备策略的脚本

2、distribution创建分布时,指定extension参数。生成的新 distribution 将原有分片尽可能分布到原节点上。

解决方案

在重分布rebalance 操作前,将该参数设置为0,然后再运行rebalance步骤。

gbase> show variables like '%quick%';
+----------------------------------------------+-------+
| Variable_name                                | Value |
+----------------------------------------------+-------+
| gcluster_rebalancing_random_table_quick_mode | 1     |
+----------------------------------------------+-------+
1 row in set (Elapsed: 00:00:00.00)

gbase> set global gcluster_rebalancing_random_table_quick_mode=0;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)

gbase> show variables like '%quick%';
+----------------------------------------------+-------+
| Variable_name                                | Value |
+----------------------------------------------+-------+
| gcluster_rebalancing_random_table_quick_mode | 0     |
+----------------------------------------------+-------+
1 row in set (Elapsed: 00:00:00.01)

扩容的详细步骤,请参考 GBase 8a 扩容操作详细实例

南大通用GBase 8a 扩容重分布后因快速扩容参数gcluster_rebalancing_random_table_quick_mode 导致磁盘空间没有明显变动》有1条评论

评论已关闭。