Hologres从V2.0.21版本开始支持Reblance函数,用于触发均衡分片操作。本文为您介绍Rebalance函数及均衡分片的使用方法。
背景信息
正常情况下,Hologres实例在运行时,Worker节点会均匀的加载数据分片(Shard)的元数据。但是在某些场景下(例如触发了快速恢复等),数据分片在Worker节点上分布不均,此时就需要触发均衡分片操作,使系统主动的重新分配数据分片,最终让实例的Worker节点均匀加载Shard的元数据。
使用限制
仅Hologres V2.0.21及以上版本支持Reblance函数,如果您的实例是 V2.0.21以下版本,请您使用自助升级或加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持?。
命令语法
不同类型实例触发均衡切片操作的语法如下。
通用型实例和只读从实例
Rebalance函数用于触发通用型或只读从实例上的Worker节点重新分配分片。语法如下:
SELECT hg_rebalance_instance();
返回结果:
true:表示Rebalance触发成功,系统开始进行Rebalance操作。
false:表示无需Rebalance。
报错:表示Rebalance触发失败。例如存在Pod故障时,触发Rebalance操作会报错。
执行Rebalance过程中,系统会计算是否需要Rebalance,最终达到均衡状态,即每个Worker加载的Shard数量差异小于等于1。例如:
如果有2个Worker,2个Shard,那么最终每个Worker都会分到1个Shard。
如果有2个Worker,3个Shard,那么最终其中1个Worker会分到1个Shard,另一个Worker会分到2个Shard。
Rebalance操作通常需要2~3分钟,实际执行时长和实例中Table Group的数量有关,Table Group越多,Rebalance耗时越长。Rebalance过程中您的写入会中断15秒。
由于Rebalance是异步执行,您可以使用如下SQL查看执行进度:
SELECT hg_get_rebalance_instance_status();
返回结果:
DOING:表示正在执行Rebalance操作。
DONE:表示Rebalance操作已完成。
常见问题
如何发现分片分布不均衡?
通常执行查询时,每个Worker的负载应该是较为均衡的,但如果有Worker节点没有分片时,该Worker节点的负载则会远低于其他Worker。
分片分布均衡示例:如下图有10个Worker节点的实例执行查询和写入时,在监控信息中可以看到10个Worker的CPU使用率都很相近。
分片分布不均衡示例:如下图有Worker节点没有分片时,监控信息中会出现如下类似情况,有Worker节点的负载远低于其他Worker。
使用如下SQL查询Worker加载分片元数据情况:
SELECT DISTINCT worker_id FROM hologres.hg_worker_info;
返回结果:
结果分析:仅有9个Worker加载了分片的元数据,有一个Worker没有加载到分片的元数据。
措施:此时执行Rebalance操作,待Rebalance完毕后,从监控信息中可以看到原先CPU使用率较低的Worker,利用率已经明显上升,且和其他Worker基本相近。
再次查询Worker加载分片元数据情况。发现10个Worker都加载了分片的元数据。