问题场景:
创建 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 状态,如下图所示:
我们要注意到展示出来的信息里会有一个 IP 的信息,这个 IP 信息是 Doris-be 自动获取的,容器部署时默认获取的则是容器的 IP。而我们的 Kettle 在请求 Doris-be 的端口时使用的也是这个 IP 。
这样在 Kettle 与 Doris 分开部署的情况下,就可能会出现端口无法连通的情况了。
1 容器化部署 Doris
Doris 自动获取的 IP 信息是可配置的,我们可以在 fe.conf 及 be.conf 里进行配置,默认的 Doris-fe、Doris-be 的配置文件里均有如下配置。
我们需要打开 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 端口是否打通。
主要从两个角度去排查,第一个,机器防火墙端口是否开放。第二个,机器之间是否存在安全组策略或网络策略。