群里最近有部分小伙伴反馈,他们线上的doris集群版本出现一些数据均衡的问题,主要现象就是查询变慢,数据落点不均匀等情况,这里我们提供一些相关的排查思路来解决doris数据不均衡的问题。这些主要也是基于我自己的一些思路。
一、查看配置开关开了没有
doris中对于数据均衡的配置主要涉及到两个参数,分别是:
disable_balance=false disable_disk_balance=flase disable_tablet_scheduler=false
先检查配置,这几个参数是不是都是flase,如果不是false,需要修改为false,不然均衡调度根本没有启动,就会出现数据不均衡的情况。
备注:如果你的集群是单副本,并且 Doris 版本在 2.0.4 以上,记得把 enable_disk_balance_for_single_replica这个参数设为 true,不然磁盘均衡不生效。
二、查看s现在的集群数据到底均衡不
如果你不确定或者你已经确定你的集群出现了数据不均衡的情况,那么直接可以在doris的web ui上能查看到,进入你的doris web ui界面(默认端口是8030),当然也可以使用命令的形式进行查看,如下图:
1、理想状态是所有的节点和磁盘 Class 都是 MID,这说明数据分布是均衡的。 2、如果有 HIGH,说明负载太高了,需要迁出数据。 3、如果有 LOW,说明太闲了,均衡调度会往它那里迁数据。
同时还需要在System Info页面上查看正在执行的任务和历史任务记录,如下图:
如果任务显示一直在 Running,但磁盘空间不见少,可以先试着执行一下 admin clean trash清一下垃圾,有时候副本删掉的临时数据会占着空间。 如果历史记录里有一大堆 CANCELLED的任务,那就得点开看看 ErrMsg 报了什么错,这是定位问题的关键线索。比如下面这种,就能看到具体的错误信息。
三、根据问题尝试调参数
这里就分为很多情况了,这里我们列举几种,分别是:
1)class老师不变回mid
此时的解决方案可以吧触发均衡的"敏感度"调高一点,主要是以下2个参数:
balance_load_score_threshold:默认 0.1,可以把它调小点,比如 0.05,这样节点/磁盘之间稍有差异就会触发均衡。 backend_load_capacity_coeficient:这个参数决定了均衡时更看重磁盘容量还是 Tablet 数量。如果想优先保证磁盘使用率均衡,就把它调大点(比如 0.9);如果更关心 Tablet 数量平均,就调小点(比如 0.6)。
2)均衡速度太慢了
此时的解决方案是先登录到be节点上去,使用这个命令
iostat -x 1
查看磁盘io是不是满了,比如接近100%,我这里就没有100%
如果是100%的话就先不管他,这是磁盘性能饱满了,如果没有100%,则考虑添加线程,利用多线程执行,主要操作是登录be节点,在conf中配置
storage_medium_migrate_count=6 clone_worker_count=6
这两个参数默认值是6,可以直接调大点,比如调试到8-12,这样可以多线程加快数据迁移的速度。(注意这里配置后需要重新启动be节点)
根据以上的操作,一般都能解决doris集群数据不均衡的问题。这里有几个坑需要注意下,需要根据实际情况来进行解决,具体如下:
1、事务卡死
有时候均衡失败是因为有事务长时间卡在“prepare”状态。可以去 FE 的 System-> transaction页面按准备时间排序找一下,如果有超时的,需要用 API 手动终止它。
2、单个 BE 内磁盘不均
要注意 Doris 调度是先保证节点间均衡,再管磁盘间均衡。所以得先让所有 BE 节点的 Class 都变成 MID,然后再通过调整上面提到的阈值参数来触发磁盘均衡。
3、磁盘被标记为坏盘
在 show backends结果里看到磁盘 State 变成 OFFLINE了。这时候得去 BE 日志里 grep "IO Error",常见原因是磁盘满了、路径配错了或者文件描述符不够了。解决根本问题后,重启 BE 一般就能恢复。




还没有评论,来说两句吧...