背景:docker swarm集群部署xxl-job
问题:
(1) 执行器自动注册失败
(2) 任务管理台任务执行日志未显示
(3) xxl-job客户端与服务端版本不一致问题
问题分析:
问题1:执行器自动注册失败
错误原因:执行器配置问题
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
错误分析:
生产部署存在2种部署模式,其一:xxl-job-admin容器与xxl-job-executor容器跨集群部署;其二:xxl-job-admin容器与xxl-job-executor容器同一集群部署,主要是网络策略问题导致admin服务无法访问导致自动注册失败。
解决方案:
(1) 同一集群下部署,网络是互通的,容器之间可以使用容器名进行通信,配置应该配置如下形式即可:
xxl.job.admin.addresses=http://xxljob-admin容器名:对内端口/xxl-job-admin/
另外,执行器注册端口尽量不要指定死,可以按照说明配置为0。
(2) 跨集群下部署,网络是不直接互通的,容器间访问需要借助一些中间件进行通信,通常做法是增加网关或者通过映射宿主机开放端口使用负载均衡访问。
问题2:任务管理台任务执行日志未显示
错误原因:
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
错误分析:
任务触发后,执行器日志报错 No such file or directory。。。,主要是xxljob输出日志文件夹不存在且无创建权限导致。
解决方案:
(1) xxl.job.executor.logpath指定为容器当前工作目录下。
(2) docker镜像构建时,指定如:RUN mkdir /xxl-job/logs/ 。
(3) 非容器的部署,通常也是检查运行应用的用户是否有指定文件夹的读写权限。
问题3:xxl-job客户端与服务端版本不一致问题
错误分析:不同版本,API以及处理逻辑、表结构设计都存在一定差异,会导致任务调度异常等一些奇葩问题。
解决方案:建议最好选择客户端与服务端一致版本使用。