1.说明
xxl-job的高可用搭建需要几个条件:
- 数据库配置一样
- 登录的accessToken一致
- 机器的时钟保持一致
高可用的原理如下图:
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部署
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的本地镜像并启动容器了。