性能文章>当 xxl-job 遇上 docker → 它晕了,我也乱了!>

当 xxl-job 遇上 docker → 它晕了,我也乱了!原创

2年前
331889

开心一刻

公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上

小伙子一直保持站姿十几分钟,直到老人下车

这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“

前提准备

对 xxl-job、docker 要有基本的了解

xxl-job

直接看官网:xxl-ob,你想要的和不想要的,官网都有详细说明

楼主也做了简单尝试:分布式任务调度平台 → XXL-JOB 初探分布式任务调度平台 → XXL-JOB 实战

示例版本: 2.1.0 

docker

网上资料很多,b站视频也挺多的(推荐:尚硅谷2022版Docker实战教程(docker教程天花板)

楼主就不做介绍了(主要是楼主不知道呀!)

admin 和 executor 都单独部署

部署很简单,我就不具体演示了(不是主角,没戏份!)

直接看效果

192.168.8.222 上部署 xxl-job-admin 

192.168.8.223 上部署 xxl-job-executor 

是不是很简单?效果也和我们预想的一样

admin 单独部署,executor 通过 docker 部署

192.168.8.223 安装 docker ,安装过程我就不演示了,直接看效果

docker 版本 20.10.21 

大家注意,伴随着 docker 的运行,多了一个网卡配置信息

有兴趣的可以查阅下: docker 网络的 bridge 模式;这里先混个眼熟,注意IP 172.17.0.1 

executor 和 docker 并存

此时我们重启下 xxl-job-executor ,然后在 xxl-job-admin 重新注册下执行器

自动注册上来的机器IP是 172.17.0.1 ,而非 192.168.8.223 ,那么伴随而来的问题就是: xxl-job-admin 访问不通 xxl-job-executor 

我们改成手动注册,看看能否访问通

可以看到,手动注册不受 docker 的影响,能正常访问通

而自动注册则受了 docker 的影响,注册的IP不对,至于如何解决,请继续往下看

executor 通过 docker 部署

如何打将 xxl-job-executor 打成 docker 镜像,不是本文的内容,所以省略不演示(言外之意是需要大家自行去学习!)

我们直接 run 执行器镜像

自动注册上来的IP 172.17.0.2 ,很明显,问题( xxl-job-admin 访问不通 xxl-job-executor )再次出现,那改成手动注册试试

哟嚯, xxl-job-admin 还是访问不通 xxl-job-executor ,放弃抵抗吧,别挣扎了

少年莫急,我们的 xxl-job-executor 是通过 docker 部署的,你有把 docker 容器的 9999 端口映射到宿主机吗

由于换了地方,IP也跟着变了, 192.168.8.222 ->  10.5.13.222 , 192.168.8.223  ->  10.5.13.223 )

 重启下 sample-executor:1.0 

我就问你,是不是通了?

admin 和 executor 都通过 docker 部署

 executor 通过 docker 部署,前面已经讲过了

 admin 通过 docker 部署,请看我表演

可以看到,手动注册是没有问题滴,自动注册还要试吗?

自动注册IP问题

前面说了那么多,最终回归到一个问题:自动注册的IP为什么不是 Docker 宿主机的IP

不管是 xxl-job-admin 还是 xxl-job-executor ,都是直接用的官方的代码,楼主可一行都没改

那肯定是 xxl-job 自动注册没有做好 docker 的兼容呗

这可不是我瞎说, github 上 xxl-job 有很多相关的 issue (191630112116581668

许大大在源码中也给出了解决方案, xxl-job-executor-sample-springboot 有个类: XxlJobConfig.java ,其中有如下说明

那试试呗,我们对 xxl-job-executor-sample-springboot 进行改造

引入依赖

修改 XxlJobConfig.java ,添加配置

executor 和 docker 并存

docker 运行,但 executor 不通过 docker 部署

自动注册的ip竟然是: 127.0.0.1 ,莫非要通过 docker 部署?

executor 通过 docker 部署

镜像我已经打包好: sample-executor:1.1 ,我们来看下效果

自动注册的ip是 172.17.0.2 ,不是宿主机ip: 10.5.13.223 ,莫非 docker 镜像打的有问题?

我们进容器内看看日志

  我们再看看容器内的网卡配置信息

请问这如何获取宿主机IP( 10.5.13.223 )?

  许大欺我?

总结

1、就目前来看,一旦 xxl-job-executor 遇上 Docker ,自动注册就不对了

知道如何处理的小伙伴,欢迎评论区留言

2、自动注册不行了,那就用手动注册呗

3、大家自己验证的时候,一定要注意 docker 与宿主机的端口映射

点赞收藏
分类:标签:
青石路
请先登录,查看8条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步
9
8