
Doris的BE节点下线卡住,可能会让人焦头烂额。尤其是当你面对大量的数据和繁琐的操作时,如何有效排查和解决这些问题成了每一个Dori使用者的必修课。今天,我们就来聊聊那些可能导致BE节点下线失败的原因,以及一系列有效的排障技巧,让你轻松应对这些难题。

一、BE节点超了?副本数要调整!
在某些情况下,BE节点的副本数设置过高,也会导致下线任务卡住。特别是当你的表副本数设置为3副本时,至少需要3个BE节点才能正常下线。如果下线BE节点导致可用节点数少于数据的副本数,直接会导致下线失败。
这种情况下解决的方法也很简单,可以参考下面修改副本数的方法:
修改表副本数:
alter table xxx modify partitions(*) set ("replication_num" = "2");
然后记得再修改动态分区或非动态分区表的副本数配置,确保下线时副本数足够:
对于动态分区表:
alter table xxx set ("dynamic_partition.replication_num" = "2");
对于非动态分区表:
alter table xxx set ("replication_num" = "2");
alter table xxx set ("default.replication_num" = "2");
清理Trash或删除不必要的分区和表。调整配置参数,确保磁盘使用率低于FE配置中的storage_flood_stage_usage_percent。
具体操作步骤如下:
show catalog recycle bin
来查看fe 回收站里有多少数据。如果fe 回收站里有非常多数据,可以先临时缩短fe 回收站的回收时间: admin set frontend config ("catalog_trash_expire_second" = "0")等过了大概十多分钟,再执行 show catalog recycle bin
查看是否都清掉了如果都清掉了,接着执行 admin clean trash最后恢复fe 回收站的默认回收时间 admin set frontend config ("catalog_trash_expire_second" = "86400");
删除不必要的分区和表则取决于用户自己了
但是如果要是如果需要下线BE的所有Tablet的副本数已经成功降为0,但BE节点依然没有成功下线,可能是因为配置参数不当。特别是FE的drop_backend_after_decommission参数需要为true,否则节点无法完全下线。
在FE配置文件中检查这个参数:
admin show frontend config like "drop_backend_after_decommission";
如果值是false,改为true,然后重新执行下线操作。
该配置用于控制系统在成功下线(Decommission)BE 后,是否 Drop 该 BE。如果为 true,则在 BE 成功下线后,会删除掉该 BE 节点。如果为 false,则在 BE 成功下线后,该 BE 会一直处于 DECOMMISSION 状态,但不会被删除。默认值是false
如果不是上面的一些比较简单的问题,那我们就要更加深入的研究了,这时候,我们首先得搞清楚到底是哪个Tablet卡住了。要找到卡住的Tablet,可以通过以下步骤:
去主FE日志里搜索“replicas to decommission”。这条日志会每10秒打印一次,其中会列出前10个没下线的Tablet ID。接着,通过
show tablet xxx
查询这些Tablet的db name、table name和partition等信息。如果日志中显示partition id = -1,那就表示Tablet的invert index出现泄漏了。这时可以先重启主FE,如果还是卡住,就试着重启其他FE节点。如果问题依旧,那我们还得继续看更深层次的原因了。看似很难,实在不简单~
五、Tablet泄漏?重启主FE试试!
如果partition id != -1,我们就需要先连到一个从FE节点上,执行以下命令:
set forward_to_master = false;
show tablet xxx;
如果从fe输出类似以下的一些列 xx id = -1的(partition id 此时一定为-1, 但db id和table id不一定为-1)

那么说明它也是tablet invert index 产生泄漏了, 这时可以按照上面重启的方式处理。
如果 Partition id != -1,且partition name 为空, 则表示这个tablet 所在的partition是catalog recycle bin中。BE catalog bin 中的tablet 在超过fe配置decommission_tablet_check_threshold
(默认值5000)时是会卡主BE下线的。通过show backends看下这个BE tablet num是否超过这个配置了,超过则可以调大fe这个配置。如果没超,或者调大这配置后仍不能下线。则可以先清掉catalog bin(参考第二种情况)。等清掉fe catalog bin中的数据,这时候可以再搜下日志中还剩哪些tablet。
不过有些时候,BE节点下线任务之所以卡住,可能是因为某些事务未能正确提交。这时,可以去FE的HTTP面板查看调度日志,找到卡住的事务并手动Abort它们。
查看调度历史:
system标签 => cluster_balance => history_tablets
如果看到一些PREPARE状态的事务长时间未结束,就执行Abort,强制中止这些卡住的事务。

参考命令
对事务触发 abort 操作(请求发往 FE 或 BE 均可)
可以使用事务 id 指定事务
curl -X PUT --location-trusted -u user:passwd -H "txn_id:18037" -H "txn_operation:abort" http://fe_host:http_port/api/{db}/{table}/_stream_load_2pc
//正常返回格式
{
"status": "Success",
"msg": "transaction [18037] abort successfully."
}
注:Http 请求中的db、table 是用name, 不是用id。如果不需要指定table name,则可以用任意的table name。
此外,需要注意的是,对于超过350GB的大Tablet(**这个本身就不合理哈**),Clone操作可能会因为时间超限而失败。这是因为Doris会在拷贝过程中设定最大下载速度和最大拷贝时间,一旦Tablet超过了这个大小,就可能导致任务一直无法完成。
这个也可以在FE的HTTP面板的调度日志里面可以看到!
解决办法:
调大主FE的max_clone_task_timeout_sec配置,增加拷贝任务的最大超时时间。 调整BE节点的max_download_speed_kbps,提高拷贝速度,确保任务能够完成。
八、常见Bug和问题
多表物化视图不支持decommission:如果你的表是多表物化视图(Materialized View),请注意,早期的Doris版本(<=2.1.3)并不支持decommission。这时,必须先删除这些视图。
动态分区和auto partition问题:在某些版本的Doris中,多个同名分区同时创建可能会导致Tablet泄漏。此时,可以通过重启FE来修复。
Cloud环境中的Decommission:对于云环境中的Doris,rebalancing过程中可能会出现延迟,导致Decommission任务未能正常执行。2.1.4版本已经修复,建议升级。
九、强制下线BE节点!
如果经过以上检查后,Tablet已经健康,且其他所有排查步骤都没有问题。
则可以通过执行下面这个sql校验下:show proc "/cluster_health/tablet_health";
如果最后的total那行满足TabletNum = HealthNum + RedundantNum + ColocateRedundantNum
, (这里排除冗余的情况),那么可以直接强制BE下线,执行以下命令:
ALTER SYSTEM DROP BACKEND "beIp:bePort";

Doris BE节点下线卡住的问题可以归结为多个原因,如配置问题、磁盘使用率过高、事务卡住、或者Tablet过大等。通过一系列的排查和配置调整,我们基本可以有效解决这些问题,让你的Doris集群顺利运行!希望这篇排障指南能帮你化解卡住节点的问题。如果你有其他疑问或问题,欢迎留言讨论,我们一起进步!
当然了,如果实在搞不定,可以联系Doris社区的小伙伴辅助一波~

完
Apache Doris社区是目前国内最活跃的开源社区(之一)。Apache Doris(Apache 顶级项目) 聚集了世界全国各地的用户与开发人员,致力于打造一个内容完整、持续成长的互联网开发者学习生态圈!
如果您对Apache Doris感兴趣,可以通过以下入口访问官方网站、社区论坛、GitHub和dev邮件组:
PowerData是由一群数据从业人员,因为热爱凝聚在一起,以开源精神为基础,组成的数据开源社区。
社区群内会定期组织模拟面试、线上分享、行业研讨、线下Meetup、城市聚会、求职内推等活动,同时在社区群内你可以进行技术讨论、问题请教,结识更多志同道合的数据朋友。
社区整理了一份每日一题汇总及社区分享PPT,内容涵盖大数据组件、编程语言、数据结构与算法、企业真实面试题等各个领域,帮助您提升自我,成功上岸。
可以加作者微信(Faith_xzc)直接进去PowrData官方社区群
叮咚✨ “数据极客圈” 向你敞开大门,走对圈子跟对人,行业大咖 “唠” 数据,实用锦囊天天有,就缺你咯!快快关注数据极客圈,共同成长!

点击上方公众号关注我们




