集群版 Xxl-Job 分布式定时任务调度的部署和使用
对于 xxl-job 来说,由于执行任务是额外开发的程序,启动多个程序即可组成执行任务集群,因此对于 xxl-job 集群的部署,主要是对 xxl-job-admin 调度平台的集群部署,防止单点调度平台所在的机器宕机。只需要满足以下几个条件即可:
- 每个 xxl-job-admin 节点需要连接同一个 mysql 数据库,配置的 accessToken 也必须一致
- 每个 xxl-job-admin 节点的机器时钟需要保持一致,可以使用相同的 NTP 时钟服务器
一、集群部署 xxl-job-admin 调度平台
上一篇博客已经介绍了 xxl-job 源代码的下载,以及数据库脚本的执行,这里就不再赘述。
本篇博客仍然在 CentOS7 虚拟机(192.168.136.128)上进行搭建,已经安装好了 docker 和 docker-compose
我们搭建一个 2 个节点的 xxl-job-admin 调度平台,通过 nginx 转发实现访问地址的统一
首先创建目录 /app/xxljob-cluster,并在其内部添加相应的子目录和相关文件,具体结构如下:
编写 docker-compose.yml 文件内容如下:
version: "3.5"
services:
xxl-job-admin1:
restart: always
image: xuxueli/xxl-job-admin:2.4.0
container_name: xxl-job-admin1
volumes:
- /app/xxljob-cluster/logs1:/data/applogs
ports:
- 8981:8080
networks:
- xxl_job_net
environment:
# 设置启动参数
PARAMS: "
--spring.datasource.url=jdbc:mysql://192.168.136.128:3306/xxl_job?characterEncoding=utf8&allowMultiQueries=true&useSSL=false
--spring.datasource.username=root
--spring.datasource.password=root
--xxl.job.accessToken=mytest123"
xxl-job-admin2:
restart: always
image: xuxueli/xxl-job-admin:2.4.0
container_name: xxl-job-admin2
volumes:
- /app/xxljob-cluster/logs2:/data/applogs
ports:
- 8982:8080
networks:
- xxl_job_net
environment:
# 设置启动参数
PARAMS: "
--spring.datasource.url=jdbc:mysql://192.168.136.128:3306/xxl_job?characterEncoding=utf8&allowMultiQueries=true&useSSL=false
--spring.datasource.username=root
--spring.datasource.password=root
--xxl.job.accessToken=mytest123"
nginx:
image: nginx
container_name: nginx
privileged: true
restart: always
volumes:
- /app/xxljob-cluster/nginx.conf:/etc/nginx/nginx.conf
ports:
- 8989:8989
networks:
- xxl_job_net
depends_on:
- xxl-job-admin1
- xxl-job-admin2
# 网络配置
networks:
xxl_job_net:
driver: bridge
然后编写 nginx.conf 的配置文件,对两个节点的内部端口进行转发,内容如下:
worker_processes 2;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream xxl-job-cluster {
server xxl-job-admin1:8080;
server xxl-job-admin2:8080;
}
server {
listen 8989;
server_name localhost;
location / {
proxy_pass http://xxl-job-cluster;
}
}
}
最后在 docker-compose.yml 文件所在目录下,运行 docker-compose up -d
启动服务即可。
由于在 docker-compose.yml 中对 xxl-job-admin 的两个节点都映射了对外端口,因此以下访问地址都可以正常访问:
- 第一个节点的访问地址:
http://192.168.136.128:8981/xxl-job-admin
- 第二个节点的访问地址:
http://192.168.136.128:8982/xxl-job-admin
- nginx 转发后的统一访问地址:
http://192.168.136.128:8989/xxl-job-admin
二、代码访问的配置调整
我们仍然采用上篇博客的代码 demo,不需要修改任何代码,只需要修改一下配置文件即可:
第一种方式,把所有节点的访问地址配置上,中间以英文逗号分隔:
server:
port: 8080
xxl:
job:
# 连接 xxl-job-admin 的 token 字符串
accessToken: mytest123
admin:
# 把 xxl-job-admin 中的所有节点地址配置上,中间以英文逗号分隔
addresses: http://192.168.136.128:8981/xxl-job-admin,http://192.168.136.128:8982/xxl-job-admin
executor:
appname: mytest-executor
port: 18989
第二种方式,把 nginx 转发后的统一访问地址配置上即可,推荐使用这种方式:
server:
port: 8080
xxl:
job:
# 连接 xxl-job-admin 的 token 字符串
accessToken: mytest123
admin:
# 把 nginx 转发后的统一访问地址配置上即可(推荐使用这种方式)
addresses: http://192.168.136.128:8989/xxl-job-admin
executor:
appname: mytest-executor
port: 18989
以上都已经过测试,没有问题,大家可以自行下载搭建集群,下载源代码进行验证体验,这里提供一下上篇博客的源代码下载地址:
https://files.cnblogs.com/files/blogs/699532/springboot_xxljob.zip