xxl-job 2.4.0 Docker集群部署

470 阅读2分钟

1.说明

xxl-job的高可用搭建需要几个条件:

  • 数据库配置一样
  • 登录的accessToken一致
  • 机器的时钟保持一致

高可用的原理如下图:

image.png

Nginx需要添加 xxljob的upstream的负载均衡,以及转发策略(nginx是高可用的)

upstream local.xxljob.cn {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
  # 需要转发的uri路径
    location ~* /xxl-job-admin {
    proxy_pass  http://local.xxljob.cn; # 映射上面的upstream
   }

XXL-JOB的集群不是分片集群,不管部署多少台,同一时间执行调度任务的只会有一台,集群部署纯粹只是为了处理单点故障问题,但是也不是单纯的主备关系
从上面的配置中可以发现,XXL-JOB的集群中有节点宕机后并不会做选举,实际上XXL-JOB的每个节点都可以提供服务,只要不是所有节点一起宕机,就不会有单点故障的问题。

重复调度怎么处理呢?
重复调度问题一般是通过分布式锁来处理的,实现分布式锁的方式有很多,XXL-JOB选择的方式是通过数据库的锁来实现的。

调度性能如何保障的呢?
在XXL-JOB的架构中,调度器与执行器是分离的,并且所有的调度流程都实现了异步化,从而大大降低了调度中心的性能压力,所以一台调度中心服务器就可以满足要求了。

2.xxl-job部署

image.png

2.1 数据库脚本初始化

将xxl-job的初始化sql,通过mysql客户端执行。

2.2 修改配置

修改application.properties文件中,数据库连接地址。

2.3 DockerFile

# 该镜像需要依赖的基础镜像
FROM openjdk:8u342
COPY xxl-job-admin-2.4.0.jar xxl-job.jar
COPY application.properties application.properties
# 将目录下的jar包复制到docker容器/home/目录下面
EXPOSE 8090
# 执行命令
ENTRYPOINT ["sh","-c","java -jar -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08   xxl-job.jar "]

2.4 启动脚本install.sh

#!/bin/bash
echo "install xxl-job"
docker build -t xxl-job:v2.4.0 .

docker run -di --restart unless-stopped --net=host --name xxl-job   -v /etc/localtime:/etc/localtime xxl-job:v2.4.0

docker ps
echo "please check xxl-job is runing"

执行sh install.sh即可以build xxl-job的本地镜像并启动容器了。