甘山松 發表於 2022-11-15 09:05:00

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

<h2>开心一刻</h2>
<p>  公交车上,一位老大爷睡着了,身体依靠在背后的一位年轻小伙子身上</p>
<p>  小伙子一直保持站姿十几分钟,直到老人下车</p>
<p>  这位在校大学生,接受采访时说:”当时就觉得背后这个人很轻盈,以为是个姑娘!“</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114173301517-490787362.gif" width="200" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>前提准备</h2>
<p>  对 xxl-job、docker 要有基本的了解</p>
<h3>  xxl-job</h3>
<p>  直接看官网:xxl-ob,你想要的和不想要的,官网都有详细说明</p>
<p>  楼主也做了简单尝试:分布式任务调度平台 → XXL-JOB 初探、分布式任务调度平台 → XXL-JOB 实战</p>
<p>  示例版本:&nbsp;<span class="cnblogs_code">2.1.0</span>&nbsp;</p>
<h3>  docker</h3>
<p>  网上资料很多,b站视频也挺多的(推荐:尚硅谷2022版Docker实战教程(docker教程天花板))</p>
<p>  楼主就不做介绍了(主要是楼主不知道呀!)</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221110163121081-1368782552.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>admin 和 executor 都单独部署</h2>
<p>  部署很简单,我就不具体演示了(不是主角,没戏份!)</p>
<p>  直接看效果</p>
<p>  192.168.8.222 上部署&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221110171725143-1625699068.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  192.168.8.223 上部署&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111084837989-859027742.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  是不是很简单?</p>
<p>  效果也和我们预想的一样</p>
<h2>admin 单独部署,executor&nbsp;通过 docker 部署</h2>
<p>  192.168.8.223 安装&nbsp;<span class="cnblogs_code">docker</span>&nbsp;,安装过程我就不演示了,直接看效果</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111093617348-387042825.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  &nbsp;<span class="cnblogs_code">docker</span>&nbsp;版本&nbsp;<span class="cnblogs_code">20.10.21</span>&nbsp;</p>
<p>  大家注意,伴随着&nbsp;<span class="cnblogs_code">docker</span>&nbsp;的运行,多了一个网卡配置信息</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111095646430-1832927536.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  有兴趣的可以查阅下:&nbsp;<span class="cnblogs_code">docker</span>&nbsp;网络的&nbsp;<span class="cnblogs_code">bridge</span>&nbsp;模式;这里先混个眼熟,<strong><span style="color: rgba(255, 0, 0, 1)">注意IP</span></strong>&nbsp;<span class="cnblogs_code">172.17.0.1</span>&nbsp;</p>
<h3>  executor 和 docker 并存</h3>
<p>  此时我们重启下&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;,然后在&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;重新注册下执行器</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111103654204-1955831083.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  自动注册上来的机器IP是&nbsp;<span class="cnblogs_code">172.17.0.1</span>&nbsp;,而非&nbsp;<span class="cnblogs_code">192.168.8.223</span>&nbsp;,那么伴随而来的问题就是:&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;访问不通&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;</p>
<p>  我们改成手动注册,看看能否访问通</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111103827256-1529080029.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  可以看到,手动注册不受&nbsp;<span class="cnblogs_code">docker</span>&nbsp;的影响,能正常访问通</p>
<p>  而自动注册则受了&nbsp;<span class="cnblogs_code">docker</span>&nbsp;的影响,注册的IP不对,至于如何解决,请继续往下看</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111104227634-154555187.png" width="300" style="display: block; margin-left: auto; margin-right: auto"></p>
<h3>  executor 通过 docker 部署</h3>
<p>  如何打将&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;打成&nbsp;<span class="cnblogs_code">docker</span>&nbsp;镜像,不是本文的内容,所以省略不演示(言外之意是需要大家自行去学习!)</p>
<p>  我们直接&nbsp;<span class="cnblogs_code">run</span>&nbsp;执行器镜像</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111134705350-1352351432.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  自动注册上来的IP&nbsp;<span class="cnblogs_code">172.17.0.2</span>&nbsp;,很明显,问题(&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;访问不通&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;)再次出现</p>
<p>  那改成手动注册试试</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111135337843-1072364603.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  哟嚯,&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;还是访问不通&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;</p>
<p>  放弃抵抗吧,别挣扎了</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111135510168-582943880.png" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  少年莫急,我们的&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;是通过&nbsp;<span class="cnblogs_code">docker</span>&nbsp;部署的,你有把&nbsp;<span class="cnblogs_code">docker</span>&nbsp;容器的&nbsp;<span class="cnblogs_code">9999</span>&nbsp;端口映射到宿主机吗</p>
<p>  (<span style="color: rgba(255, 0, 0, 1)"><strong>由于换了地方,IP也跟着变了</strong></span>,&nbsp;<span class="cnblogs_code">192.168.8.222</span>&nbsp;-&gt; &nbsp;<span class="cnblogs_code">10.5.13.222</span>&nbsp;,&nbsp;<span class="cnblogs_code">192.168.8.223</span>&nbsp; -&gt;&nbsp;&nbsp;<span class="cnblogs_code">10.5.13.223</span>&nbsp;)</p>
<p>  重启下&nbsp;<span class="cnblogs_code">sample-executor:1.0</span>&nbsp;</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111151300759-609064796.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  我就问你,是不是通了?</p>
<h2>admin 和 executor 都通过 docker 部署</h2>
<p>  &nbsp;<span class="cnblogs_code">executor</span>&nbsp;通过&nbsp;<span class="cnblogs_code">docker</span>&nbsp;部署,前面已经讲过了</p>
<p>  &nbsp;<span class="cnblogs_code">admin</span>&nbsp;通过&nbsp;<span class="cnblogs_code">docker</span>&nbsp;部署,请看我表演</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111161654671-24226508.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  可以看到,手动注册是没有问题滴</p>
<p>  自动注册还要试吗?</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221111162305260-304638077.gif" alt="" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>自动注册IP问题</h2>
<p>  前面说了那么多,最终回归到一个问题:<span style="color: rgba(255, 0, 0, 1)"><strong>自动注册的IP为什么不是&nbsp;<span class="cnblogs_code">Docker</span>&nbsp;宿主机的IP</strong></span>?</p>
<p>  不管是&nbsp;<span class="cnblogs_code">xxl-job-admin</span>&nbsp;还是&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;,都是直接用的官方的代码,楼主可一行都没改</p>
<p>  那肯定是&nbsp;<span class="cnblogs_code">xxl-job</span>&nbsp;自动注册没有做好&nbsp;<span class="cnblogs_code">docker</span>&nbsp;的兼容呗</p>
<p>  这可不是我瞎说,&nbsp;<span class="cnblogs_code">github</span>&nbsp;上&nbsp;<span class="cnblogs_code">xxl-job</span>&nbsp;有很多相关的&nbsp;<span class="cnblogs_code">issue</span>&nbsp;(191、630、1121、1658、1668)</p>
<p>  许大大在源码中也给出了解决方案,&nbsp;<span class="cnblogs_code">xxl-job-executor-sample-springboot</span>&nbsp;有个类:&nbsp;<span class="cnblogs_code">XxlJobConfig.java</span>&nbsp;,其中有如下说明</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114094355871-1696442161.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  那试试呗,我们对&nbsp;<span class="cnblogs_code">xxl-job-executor-sample-springboot</span>&nbsp;进行改造</p>
<p>  引入依赖</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114140912992-2146077853.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  修改&nbsp;<span class="cnblogs_code">XxlJobConfig.java</span>&nbsp;</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114143355707-1945757167.png" width="900" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  添加配置</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114141151541-709417265.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<h3>  executor 和 docker 并存</h3>
<p>  &nbsp;<span class="cnblogs_code">docker</span>&nbsp;运行,但&nbsp;<span class="cnblogs_code">executor</span>&nbsp;不通过&nbsp;<span class="cnblogs_code">docker</span>&nbsp;部署</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114144606404-1804826248.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  自动注册的ip竟然是:&nbsp;<span class="cnblogs_code">127.0.0.1</span>&nbsp;,莫非要通过&nbsp;<span class="cnblogs_code">docker</span>&nbsp;部署?</p>
<h3>  executor 通过 docker 部署</h3>
<p>  镜像我已经打包好:&nbsp;<span class="cnblogs_code">sample-executor:1.1</span>&nbsp;,我们来看下效果</p>
<p><span class="marker"><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114153211896-1582617315.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></span></p>
<p>  自动注册的ip是&nbsp;<span class="cnblogs_code">172.17.0.2</span>&nbsp;,不是宿主机ip:&nbsp;<span class="cnblogs_code">10.5.13.223</span>&nbsp;,莫非&nbsp;<span class="cnblogs_code">docker</span>&nbsp;镜像打的有问题?</p>
<p>  我们进容器内看看日志</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114153617432-1664373192.gif" width="900" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  我们再看看容器内的网卡配置信息</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114154351441-1640825070.png" alt="" loading="lazy" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  请问这如何获取宿主机IP(&nbsp;<span class="cnblogs_code">10.5.13.223</span>&nbsp;)?</p>
<p>  许大欺我?</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114154836037-106714138.gif" width="200" style="display: block; margin-left: auto; margin-right: auto"></p>
<h2>总结</h2>
<p>  1、就目前来看,一旦&nbsp;<span class="cnblogs_code">xxl-job-executor</span>&nbsp;遇上&nbsp;<span class="cnblogs_code">Docker</span>&nbsp;,自动注册就不对了</p>
<p>    知道如何处理的小伙伴,欢迎评论区留言</p>
<p>  2、自动注册不行了,那就用手动注册呗</p>
<p><img src="https://img2022.cnblogs.com/blog/747662/202211/747662-20221114163016138-1326038173.png" width="300" style="display: block; margin-left: auto; margin-right: auto"></p>
<p>  3、大家自己验证的时候,一定要注意&nbsp;<span class="cnblogs_code">docker</span>&nbsp;与宿主机的端口映射</p><br><br>
来源:https://www.cnblogs.com/youzhibing/p/16712462.html
頁: [1]
查看完整版本: 当 xxl-job 遇上 docker → 它晕了,我也乱了!