【常见问题】Failed to connect to 172.19.0.199 port 8040: Operation timed out 问题解析


Administrator
飞致云 发布于 2022-11-01 / 709 阅读 / 0 评论 /
问题场景: 创建 Excel 数据集或者定时同步数据集,数据同步异常,查看更新信息里失败的任务可看到如下字样:Failed to connect to 172.19.0.199 port 8040: Operation timed out。 问题原因: 该问题一般出现在 Kettle 跟 Doris

问题场景:
创建 Excel 数据集或者定时同步数据集,数据同步异常,查看更新信息里失败的任务可看到如下字样:Failed to connect to 172.19.0.199 port 8040: Operation timed out。

问题原因:
该问题一般出现在 Kettle 跟 Doris 分开部署的情况下,Kettle 在做数据同步时会去请求 Doris-be 的 8040 端口。端口无法连通,就会出现如上的问题。

而针对 Doris 不同的部署方式,该问题也有两种不同的解法。

问题解决:
我们在部署 Doris 时一定会有这么一个步骤:连接 Doris-fe ,执行 ALTER SYSTEM ADD BACKEND ‘xx.xx.xx.xx:9050’ 添加 Doris-be。

添加完成后我们可以执行 show backends 查看 Doris-be 状态,如下图所示:
image-1667266545483

我们要注意到展示出来的信息里会有一个 IP 的信息,这个 IP 信息是 Doris-be 自动获取的,容器部署时默认获取的则是容器的 IP。而我们的 Kettle 在请求 Doris-be 的端口时使用的也是这个 IP 。

这样在 Kettle 与 Doris 分开部署的情况下,就可能会出现端口无法连通的情况了。

1 容器化部署 Doris

Doris 自动获取的 IP 信息是可配置的,我们可以在 fe.conf 及 be.conf 里进行配置,默认的 Doris-fe、Doris-be 的配置文件里均有如下配置。
image-1667266550802

我们需要打开 priority_networks 的注释,并且修改 CIDR 的配置信息。

我们想要让 Kettle 能够访问到 Doris-be 的 8040 端口,那么就需要让 Doris-be 自动获取的 IP 地址为宿主机的 IP ,这样才能保证网络的连通。

而在容器部署的情况下,我们就必须要修改 Doris 的容器网络配置,使其共享宿主机的网络,如下所示,注意 network_mode 的配置:

version: '2.1'
services:
 
  doris-fe:
    image: registry.cn-qingdao.aliyuncs.com/dataease/doris:v1.1.0-0704
    container_name: doris-fe
    environment:
      - DORIS_ROLE=fe-leader
    volumes:
      - /opt/dataease/data/fe:/opt/doris/fe/doris-meta
      - /opt/dataease/logs/fe:/opt/doris/fe/log
      - /opt/dataease/conf/fe.conf:/opt/doris/fe/conf/fe.conf
      - /opt/dataease/bin/doris:/docker-entrypoint-initdb.d/
    network_mode: "host"
    restart: always
    depends_on:
      doris-be:
        condition: service_healthy
    healthcheck:
      test: [ "CMD-SHELL", "curl -sS 127.0.0.1:8030 || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 3
 
  doris-be:
    image: registry.cn-qingdao.aliyuncs.com/dataease/doris:v1.1.0-0704
    container_name: doris-be
    environment:
      - DORIS_ROLE=be
    volumes:
      - /opt/dataease/data/be:/opt/doris/be/storage
      - /opt/dataease/logs/be:/opt/doris/be/log
      - /opt/dataease/conf/be.conf:/opt/doris/be/conf/be.conf
    network_mode: "host"
    restart: always
    healthcheck:
      test: [ "CMD-SHELL", "curl -sS 127.0.0.1:8040 || exit 1" ]
      interval: 10s
      timeout: 5s
      retries: 3

此时我们再去修改 fe.conf 及 be.conf 的 priority_networks 配置,这里举例,假如宿主机的 IP 地址为 10.1.12.100,那么我们的配置文件可以写成

priority_networks = 10.1.12.0/24

接着删除 Doris-fe 及 Doris-be 的数据目录,重新拉起服务即可。

2 直接部署在宿主机上

检查下 Kettle 到 Doris-be 所在机器的 8040 端口是否打通。

主要从两个角度去排查,第一个,机器防火墙端口是否开放。第二个,机器之间是否存在安全组策略或网络策略。



是否对你有帮助?