GBase 8a数据库集群扩容时,需要将数据从老节点重新分布到所有的新节点,如果数据量很大,比如每个节点上百T,那么花费的时间将会以周和月来计算。本文从数据库产品和工程经验上,给出几个缩短整体时间的建议。
目录导航
1、数据库参数
gcluster_rebalancing_random_table_quick_mode
该参数默认是打开的。
针对随机分布表,其数据在任何一台节点上都是符合要求的,所以如果随机分布表的数据,维持现有分布状态,则可以避免数据重新分布,节省时间。
如果你需要将数据评分到所有节点,请关闭此参数。请参考 GBase 8a 扩容重分布后因快速扩容参数gcluster_rebalancing_random_table_quick_mode 导致磁盘空间没有明显变动
2、工程上
可以考虑不做所有表的重分布,只做部分表,比如复制表,几张核心表等,其余的都维持现状。
系统新建的表,将采用新的Distirbution id, 而老的表继续是老的DistributionId
如果下次再出现扩容,则需要先把上次没有完成的操作继续做下去,但耗时会很短。
3、适合场景
如上2种方案,都只适合磁盘空间不是主要矛盾的情况,采用天表,而且数据已经进入了【老化周期】开始每天做老数据的删除。
随着数据老化,原有节点的空间会逐渐减少,并最终和新节点的空间占用趋于一致。
工程上的建议方案,可以说做到了极致,连Hash分布表都不做重分布,等其自然老化。等下次【继续上次操作时】,数据库内已经因为自然老化,需要数据重分布的表已经被删除了,其耗时也将极大缩短。