ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Doris 90 天 D1|先把集群连上:能建表能查数,但 FE 每次都悄悄死了

Doris 90 天 D1|先把集群连上:能建表能查数,但 FE 每次都悄悄死了 Doris 90 天 · 第一幕 · 第 1 天这个系列讲一条 SQL 的一生:它怎么被建出来、怎么被逐步复杂化、怎么变慢、又怎么在故障里被救活。同一条查询陪我走完 90 天,六个阶段各是它的一段命。但今天是第 1 天,那条 SQL 还不存在——我连一个能跑它的集群都没有。所以第一幕得从路开始讲。今天的目标小得可笑:让一个 FE + 一个 BE 的集群连得上。结果这一天我踩了 6 个坑,其中 3 个的根因就写在 Doris 自己的启动脚本里,还有 1 个我到今天都没能解释清楚。写法上我给自己定了条规矩:只发实测过、并且拿得出证据的东西;证据不够的地方我会直接标出来,不装懂。如果你也正打算啃 Doris,或者被"明明照着文档装却起不来"折磨过,这一篇你应该会读得下去。读完你会带走:BE 启动时那三道硬性检查,分别卡在哪一行、哪两道能永久免设nofile报错里藏着官方给你的完整解法(包括永久方案),只是大多数人读完第一行就走了FE 起不来时fe.log为什么可以一行都不写,以及该看哪个文件一个pid被另一个进程复用之后,能引出多危险的一个坑Catalog → Database → Table → Partition → Tablet这五层,用你自己的磁盘目录就能验证“-- 主角尚未出生 · 今天在建它要跑起来的地方01 先把口径交代清楚:环境、版本、和一条限制后面所有结论都建立在这三句话上,所以先摆出来。环境:Windows + WSL2(Ubuntu-22.04),跑的是apache-doris-4.1.3-bin-x64官方 release 二进制,单 FE + 单 BE。FE 用 MySQL 协议端口 9030、HTTP 端口 8030;BE 用 8040(HTTP)、9050(心跳)。一条很多人会跳过、但后面救了我很多次的动作:把本地源码树切到和二进制完全相同的版本。gitdescribe--tags #4.1.34.1.3这个 tag 对应的 commit 是7126cf65d96,而 FE 自己报的版本是doris-4.1.3-rc02-7126cf65d96——同一个 commit。为什么这值得单独说一节?因为等会儿 FE 的日志会打出这样一行:[InternalCatalog.createOlapTable():3291]successfullycreatetable[t_probe;...]版本对齐了,createOlapTable():3291就不是一个"看起来像线索的东西",而是你可以直接打开那个文件看到那一行。这一步不做,后面所有的"按日志回源码"全是在猜。那条限制:只有一个 BE,所以建表必须显式写"replication_num" = "1"。否则副本数默认 3,而活着的 BE 只有 1 台,建表会直接抛错。这条我一开始以为是句废话,直到后来发现自己把它的报错原文记错了(第 05 节会回到这里)。02 开工前 3 分钟:先给环境做一次体检我现在的习惯是,动手前先把这 5 条跑一遍,全绿了再往下。检查命令期望WSL 活着且是 v2wsl -l -vUbuntu-22.04,VERSION=2Doris 包完整ls ~/doris/apache-doris-4.1.3-bin-x64/{fe,be}/bin/脚本都在磁盘够df -h /root剩余 10G(BE 的 storage 只会越长越大)端口没被占ss -lntp | grep -E '9030|8030|8040'空文件句柄够ulimit -n≥ 60000← 最容易中招最后一条原本不在我的清单上,是我把 BE 起不来之后才补进去的。原因是这样:用wsl -u root bash -lc进来的新会话,ulimit -n只有1024。而start_be.sh要求 ≥ 60000,不满足直接exit 1,连 BE 的日志都不会给你留。好消息是 hard limit 是 1048576,root 抬得动:ulimit-n655350坏消息是这条每次新会话都要重来——这是第 03 节的核心。03 BE 起不来:启动脚本里藏着三道硬检查绝大多数"Doris 装不起来"的帖子会让你去设vm.max_map_count。这只说对了三分之一。打开be/bin/start_be.sh,在源码树里是bin/start_be.sh,193 行往下一段:194:if[["${SKIP_CHECK_ULIMIT:-"false"}"!="true"]];then 195:if[["$(uname-s)"!='Darwin']];then 196:MAX_MAP_COUNT="$(cat/proc/sys/vm/max_map_count)" 197:if[["${MAX_MAP_COUNT}"-lt2000000]];then 198:echo"Setkernelparameter'vm.max_map_count'..." 199:exit1 200:fi 201: 202:if[["$(swapon-s|wc-l)"-gt1]];then 203:echo"Disableswapmemorybeforestartingbe" 204:exit1 205:fi 206:fi 207: 208:MAX_FILE_COUNT="$(ulimit-n)" 209:if[["${MAX_FILE_COUNT}"-lt60000]];
返回列表