集群版 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,并在其内部添加相应的子目录和相关文件,具体结构如下:

image

编写 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


posted @ 2024-02-11 18:11  乔京飞  阅读(6709)  评论(0编辑  收藏  举报