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条评论
评论已关闭。