在Docker Swarm环境下部署DolphinScheduler时,可能会遇到Master节点与Worker节点之间无法通过RPC通信的问题。这通常是由于Master和Worker节点的IP地址与Swarm网络中的IP地址不一致导致的。
一、问题描述
在使用Docker Swarm启动DolphinScheduler集群时,Master节点与Worker节点之间的RPC通信失败。经过排查发现,Master节点和Worker节点注册到Zookeeper中的IP地址并非Swarm网络中的IP地址,而是宿主机的物理网卡IP地址。例如,Master节点的IP地址可能是192.168.56.10
,而Worker节点的IP地址可能是192.168.56.9
,这些IP地址与Swarm网络中的IP地址(如10.0.0.2)不匹配。
这种IP地址不一致的问题会导致Master节点无法正确找到Worker节点,从而无法正常分发任务。
二、问题分析
先查询zk集群节点的zk信息
进入zk当中
bash
./zkCli.sh -server localhost:2181
查询某一个节点的信息
bash
ls /ds/nodes/master
get /ds/nodes/master
查询到zk的节点信息(192.168.56.10)跟docker swarm网络当中容器的节点信息(10.0.0.2)不一致
看DolphinScheduler代码,如何获取ip信息
查找到有一个getHost函数

进一步找到可以通过配置参数指定网卡

三、解决方案
指定Swarm网络的网卡接口
启动DolphinScheduler时,在环境变量当中设置如下指定网卡的值
makefile
DOLPHIN_SCHEDULER_NETWORK_INTERFACE_PREFERRED: eth0
这样可以确保容器绑定到Swarm网络中指定的网卡接口。