Doris--基础--2.7--部署--常见问题

Doris–基础–2.7–部署–常见问题


1、如何确定 FE 进程启动成功

1.1、查看日志

FE 进程启动后,会首先加载元数据,根据 FE 角色的不同,在日志中会看到 transfer from UNKNOWN to MASTER/FOLLOWER/OBSERVER。最终会看到 thrift server started 日志,并且可以通过 mysql 客户端连接到 FE,则表示 FE 启动成功。

如果在 fe.log 中查看不到启动失败的信息,也许在 fe.out 中可以看到。

1.2、open API

也可以通过如下连接查看是否启动成功:

http://fe_host:fe_http_port/api/bootstrap

如果返回:

{"status":"OK","msg":"Success"}

则表示启动成功,其余情况,则可能存在问题。

2、如何确定 BE 进程启动成功

2.1、查看日志

BE 进程启动后,如果之前有数据,则可能有数分钟不等的数据索引加载时间。

如果是 BE 的第一次启动,或者该 BE 尚未加入任何集群,则 BE 日志会定期滚动 waiting to receive first heartbeat from frontend 字样。表示 BE 还未通过 FE 的心跳收到 Master 的地址,正在被动等待。这种错误日志,在 FE 中 ADD BACKEND 并发送心跳后,就会消失。

如果在接到心跳后,又重复出现 master client, get client from cache failed.host: , port: 0, code: 7 字样,说明 FE 成功连接了 BE,但 BE 无法主动连接 FE。可能需要检查 BE 到 FE 的 rpc_port 的连通性。

如果 BE 已经被加入集群,日志中应该每隔 5 秒滚动来自 FE 的心跳日志:get heartbeat, host: xx.xx.xx.xx, port: 9020, cluster id: xxxxxx,表示心跳正常。

其次,日志中应该每隔 10 秒滚动 finish report task success. return code: 0 的字样,表示 BE 向 FE 的通信正常。

同时,如果有数据查询,应该能看到不停滚动的日志,并且有 execute time is xxx 日志,表示 BE 启动成功,并且查询正常。

如果在 be.INFO 中查看不到启动失败的信息,也许在 be.out 中可以看到。

2.2、open API

也可以通过如下连接查看是否启动成功:

http://be_host:be_http_port/api/health

如果返回:

{"status": "OK","msg": "To Be Added"}

则表示启动成功,其余情况,则可能存在问题。

3、搭建系统后,如何确定 FE、BE 连通性正常

首先确认 FE 和 BE 进程都已经单独正常启动,并确认已经通过 ADD BACKEND 或者 ADD FOLLOWER/OBSERVER 语句添加了所有节点。

如果心跳正常,BE 的日志中会显示 get heartbeat, host: xx.xx.xx.xx, port: 9020, cluster id: xxxxxx。如果心跳失败,在 FE 的日志中会出现 backend[10001] got Exception: org.apache.thrift.transport.TTransportException 类似的字样,或者其他 thrift 通信异常日志,表示 FE 向 10001 这个 BE 的心跳失败。这里需要检查 FE 向 BE host 的心跳端口的连通性。

如果 BE 向 FE 的通信正常,则 BE 日志中会显示 finish report task success. return code: 0 的字样。否则会出现 master client, get client from cache failed 的字样。这种情况下,需要检查 BE 向 FE 的 rpc_port 的连通性。

4、Doris 各节点认证机制

除了 Master FE 以外,其余角色节点(Follower FE,Observer FE,Backend),都需要通过 ALTER SYSTEM ADD 语句先注册到集群,然后才能加入集群。

Master FE 在第一次启动时,会在 doris-meta/image/VERSION 文件中生成一个 cluster_id。

FE 在第一次加入集群时,会首先从 Master FE 获取这个文件。之后每次 FE 之间的重新连接(FE 重启),都会校验自身 cluster id 是否与已存在的其它 FE 的 cluster id 相同。如果不同,则该 FE 会自动退出。

BE 在第一次接收到 Master FE 的心跳时,会从心跳中获取到 cluster id,并记录到数据目录的 cluster_id 文件中。之后的每次心跳都会比对 FE 发来的 cluster id。如果 cluster id 不相等,则 BE 会拒绝响应 FE 的心跳。

心跳中同时会包含 Master FE 的 ip。当 FE 切主时,新的 Master FE 会携带自身的 ip 发送心跳给 BE,BE 会更新自身保存的 Master FE 的 ip。

4.1、priority_network

priority_network 是 FE 和 BE 都有一个配置,其主要目的是在多网卡的情况下,协助 FE 或 BE 识别自身 ip 地址。priority_network 采用 CIDR 表示法:RFC 4632

当确认 FE 和 BE 连通性正常后,如果仍然出现建表 Timeout 的情况,并且 FE 的日志中有 backend does not found. host: xxx.xxx.xxx.xxx 字样的错误信息。则表示 Doris 自动识别的 IP 地址有问题,需要手动设置 priority_network 参数。

出现这个问题的主要原因是:当用户通过 ADD BACKEND 语句添加 BE 后,FE 会识别该语句中指定的是 hostname 还是 IP。如果是 hostname,则 FE 会自动将其转换为 IP 地址并存储到元数据中。当 BE 在汇报任务完成信息时,会携带自己的 IP 地址。而如果 FE 发现 BE 汇报的 IP 地址和元数据中不一致时,就会出现如上错误。

这个错误的解决方法:
  1. 分别在 FE 和 BE 设置 priority_network 参数。通常 FE 和 BE 都处于一个网段,所以该参数设置为相同即可。
  2. 在 ADD BACKEND 语句中直接填写 BE 正确的 IP 地址而不是 hostname,以避免 FE 获取到错误的 IP 地址。

5、BE 进程文件句柄数

5.1、参数

  1. BE进程文件句柄数,受以下2个参数控制
    1. min_file_descriptor_number:默认值 65536
    2. max_file_descriptor_number:默认值 131072
  2. 如果不在[min_file_descriptor_number, max_file_descriptor_number]区间内,BE进程启动会出错,可以使用ulimit进行设置。

5.1、设置参数

# 将文件句柄设成65536。
ulimit -n 65536;

启动BE进程之后,可以通过 cat /proc/$pid/limits 查看进程实际生效的句柄数

5.3、supervisord

如果使用了supervisord,遇到句柄数错误,可以通过修改supervisord的minfds参数解决。

vim /etc/supervisord.conf

minfds=65535   ; (min. avail startup file descriptors;default 1024)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值