Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move

文章目录

  • 前言
  • 一、分区负载均衡
  • 二、问题来了
    • 1. 进一步验证
    • 2. 解决


前言

当前使用 Doris 版本为 0.14

某天观察到线上 Doris 集群资源使用情况,发现整体上内存、CPU 使用率较低,为降低成本进行了一波缩容操作。

缩容之后,大部分业务都能正常运行,但对于一些大吞吐的查询速度慢了很多,或者根本跑不出来。

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第1张图片

进一步分析发现分区数据分布不均匀,出现的情况是,一部分节点数据多、一部分节点数据少,当查询计划具体分配到 BE 节点体现为部分节点负载高、部分负载低。

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第2张图片


一、分区负载均衡

Doris 默认采用 「BeLoad」均衡策略,是按照磁盘负载来均衡数据。在单表来看,可能存在数据无法均衡到每个节点的问题,如:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第3张图片

官方对副本均衡的解释:

在这里插入图片描述

尝试使用「分区均衡」策略,尽可能将每个表的数据均分到各节点上,官方文档说明:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第4张图片
FE 参数配置:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第5张图片

官方文档链接:FE配置、均衡策略

二、问题来了

按照上述文档进行操作后,出现问题:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第6张图片

排查后发现,分区均衡有个已知 bug,Github#doris#7213 (在高版本中修复)

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第7张图片

大致意思是,如果某个节点上的 SSD 或者 HDD 磁盘没有数据,统计该盘分区副本数量的时候就置为 0,而这个 0 在后期处理的时候直接抛异常,后续操作无法继续进行 …

我看了下,我们目前 仅 HDD 盘上有数据,处理到 SSD 就出问题了。

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第8张图片

:HDD 和 SSD 都是逻辑上的划分,并不一定是你实际使用的磁盘介质,比如你可能只使用了 SSD,Doris 在处理时还是两种都会处理。

1. 进一步验证

对比 debug log (需要手动开启)和 0.14 源码逻辑:

1)debug log:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第9张图片
2)均衡逻辑片段:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第10张图片

对比可以发现,确实是已知 bug 导致,它这里是要先把两种介质「待均衡的分区副本」全部找出来,然后再进行迁移。

处理 HDD 是没问题的,到了 SSD 抛了异常,导致整个过程没做任何迁移。

2. 解决

将 Doris 升级到更高版本(1.xx),升级了再考虑分区均衡策略。

Doris 升级至 1.1 之后,采用分区均衡策略,数据已均匀分布,如下:

Doris 数据副本分区均衡策略,fromBe has no replica in the map, can‘t move_第11张图片

你可能感兴趣的:(大数据,java,运维,apache)