【分布式任务调度】XXL-JOB调度中心集群部署配置(一)

news2024/11/20 20:26:40

文章目录

  • 1.概述
  • 2.代码编译
    • 2.1.代码下载
    • 2.2.初始化与编译
  • 3.集群部署
    • 3.1.服务启动
    • 3.2.反向代理
  • 4.结语

1.概述

XXL-JOB是一款轻量级的分布式任务调度中间件,默认支持6000个定时任务,如果生产环境的任务数量在这个范围内,可以选择使用 XXL-JOB。

XXL-JOB由Quartz这款老牌的任务调度中间件演化而来,相对来说,具备以下优势:

  • 操作更简单,学习成本更低
  • 使用异步化调度,性能更好
  • 有配套的运维后台系统,提供了配置、监控、日志、统计报表等功能
  • 拥有更简单的集群部署方案,服务的注册与发现等功能

本文的内容是在官方文档的基础上做了一点细节补充,有经验的同学可以直接查阅《官方文档》。

2.代码编译

2.1.代码下载

打开源码GitHub地址下载代码。
tips: 我们不能直接clone当前的代码仓库,因为当前仓库的代码随时在修改,并不是稳定的版本,我们应该下载的稳定的release版本,这里我们选择最新的版本。
在这里插入图片描述

下载完成之后,我们可以直接使用Maven指令进行编译打包,也可以借助Idea等工具打开源码。这里我们需要对配置做一点小修改,所以使用Idea打开。
在这里插入图片描述

打开后的项目分包如上图所示,每个包的含义如下:

xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
    :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
    :xxl-job-executor-sample-frameless:无框架版本;

2.2.初始化与编译

  • 第一步:初始化数据库
    XXL-JOB的运行依赖于数据库,我们可以通过源码中提供的数据库脚本进行初始化。
    在这里插入图片描述

如果使用的是MySQL,可以直接将图中的脚本扔到数据库中执行,其他数据库需要自己做一点改动。

  • 第二步:修改配置文件
    打开调度中心(也就是xxl-job-admin)的配置文件,修改两处配置:

    • 数据库连接
      配置为刚刚执行了初始化脚本的数据库,我这里是本地安装的MySQL数据库,配置如下:
      在这里插入图片描述

    • accessToken配置
      这个配置主要是为了调度的通信安全,因为是Demo,这里写的比较简单,生产环境可以换成更复杂的密钥。
      在这里插入图片描述

  • 第三步:编译打包
    使用Idea的Maven插件进行编译打包,当然也可以自行编写Maven指令进行打包。
    在这里插入图片描述

如果有Maven私服,可以将xxl-job这个根目录deploy到私服中去,方便后续的生产部署。这里不做生产部署,所以只做了install。

3.集群部署

3.1.服务启动

XXL-JOB的集群部署非常简单,只需要注意两点:

  • 集群节点都连接的是同一个数据库。
  • 多台机器部署时,需要统一系统时间,如果是单个机器部署,则不用管这条。

现在是在同一台机器中,并且在上面打的包中,已经指定了相同的数据库地址,所以只需要正常启动,就满足上述的条件了。

在xxl-job-admin的target目录中可以找到刚刚打的包:xxl-job-admin-2.3.1.jar,通过java -jar启动两个服务。

java -jar xxl-job-admin-2.3.1.jar --server.port=8080
java -jar xxl-job-admin-2.3.1.jar --server.port=8081

接下来就需要统一调用入口,加一层反向代理服务器。

3.2.反向代理

对于生产环境来说,简单粗暴的通过调度中心所在服务器的ip访问并不是一个友好的方式,使用这种方式,一旦ip发生了变化,所有的执行器都需要重新配置调度中心的地址。
更好的方式是通过反向代理的方式来暴露调度中心,下面是以Windows环境为例,配置反向代理:

  • 第一步:修改hosts文件
    如果是生产环境,忽略这一步,直接使用生产环境的域名即可。本地配置hosts文件,主要是想把127.0.0.1映射到某个域名上。
127.0.0.1    ls.xxljob.cn

这里的ls.xxljob.cn 可以配置成任意自己喜欢的域名。

  • 第二步:配置Nginx
    一般来说,我们不会直接在nginx的配置文件中做配置,而是单独创建一个由某个服务独有的配置文件,方便管理。
    这里我们在conf目录中创建xxl-job.conf并做以下配置:
upstream local.xxljob.cn {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

server {
    listen       80; # nginx端口
    server_name  ls.xxljob.cn; # hosts中配置的域名
	
    # 需要转发的uri路径
    location ~* /xxl-job-admin {
		proxy_pass  http://local.xxljob.cn; # 映射上面的upstream
    }
}

# 日志配置
log_format  xxl-job  '$remote_addr  - $upstream_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  logs/access.log  xxl-job;
error_log   logs/error.log;

配置好后,打开同级目录下nginx.conf文件,将上面的文件依赖到nginx配置中。

http {
    resolver 8.8.8.8;
    
    include       mime.types;
    default_type  application/octet-stream;
    include xxl-job.conf;
    
# ......此处省略其他配置
}

然后启动nginx,通过域名访问http://ls.xxljob.cn/xxl-job-admin/,默认用户名/密码为:admin/123456。
在这里插入图片描述

  • 第三步:反向代理验证
    在上面的nginx配置中,加入了一个日志格式化配置:- $upstream_addr,有这个配置后,我们就可以在access_log中查看负载均衡的请求详情了。
    刷新几次页面,然后打开nginx目录下的log文件,看到8080和8081交替执行,表达负载均衡配置成功。
    在这里插入图片描述

4.结语

综上,一个基本的调度中心集群就搭建好了,是不是非常简单呢?

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

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

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

总结一下本文的内容,XXL-JOB的调度中心集群部署只需要满足两个条件:

多个节点使用同一个数据库。
多台机器的系统时间配置成一样的。

此外,可以通过反向代理服务器,配置调度中心的统一入口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【手撕C语言基础】联合体与枚举

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…

九五从零开始的运维之路(其二十)

[TOC](文章目录) 文章目录 前言一、LAMP是什么二、配置环境及安装1.配置yum源2.关闭防火墙、网络图形化工具及SElinux3.安装软件包 三、配置apache服务器内容四、启动服务五、访问验证总结 前言 本篇将简述的内容:Linux系统下的LAMP平台部署 基于discuz框架的论坛搭…

StartAllBack| Win11 更新系统后闪屏

解决方法:安装最新版 StartAllBack 中文官网:http://www.startallback.cn 激活方式: ① 点击下载好的 .exe 文件安装 StartAllBack ② 打开 StartAllBack 的安装目录 为我安装的路径:C:\Users\你的用户名\AppData\Local\Start…

opencv 基础学习08-图像通道操作

opencv 基础学习08-图像通道操作 什么是图像通道?通道操作:**1 通过索引拆分**2 通过opencv 函数拆分通道合并 什么是图像通道? OpenCV的通道拆分功能可用于将多通道图像拆分成单独的通道,这在图像处理和计算机视觉任务中具有许多…

[MySQL]MySQL内外连接

[MySQL]MySQL内外连接 文章目录 [MySQL]MySQL内外连接1. 内连接2. 外连接2.1 左外连接2.2 右外连接 3. 简单练习 1. 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,也是在开发过程中使用的最多的连接查询。 语法: SELECT ... FR…

【USRP X310】如何将你的X310转化为USRP RIO 可以用于FPGA编程

X310 转化为USRP RIO X310产品X310和NI-USRP对应关系 简介第一步原理解释打开工具运行 Initialize Flash.vi可以去选择设备类型Hardware Current Version 如何选择 第二步创建工程运行校准程序 附录:射频子板的IDWBXSBXCBXUBXTwinRX X310产品 X310和NI-USRP对应关系…

【Android知识笔记】应用进程(一)

应用进程的启动流程 冷启动与热启动 冷启动与热启动相比:冷启动除了要启动目标进程的入口Activity外,还需要通过AMS向Zygote申请启动目标应用进程,而热启动由于目标进程已经启动,只需直接打开目标进程的入口Activity即可。 AMS冷启动大概流程: 应用进程是在什么时机被启…

网络数据安全风险评估实施指引(二)

评估手段是多种多样的。信息安全风险评估可以用各种不同的方式识别资产脆弱性和攻击路径,数据安全风险评估也包含但不限于以下措施: 人员访谈:对相关人员进行访谈,核查制度规章、防护措施、安全责任落实情况; 文档查…

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后,浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法:get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

C#使用Chart进行统计,切换不同的图表类型

WindowsForm应用程序中Chart图表控件所属的命名空间: Chart 命名空间: System.Windows.Forms.DataVisualization.Charting 对应的dll路径: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\Syst…

链表的头指针、头节点和首元节点

链表的头指针、头节点和首元节点 头节点(哑结点) 有时,在链表的第一个节点之前会额外增设一个节点,该节点的数据域一般不存放数据(有些情况下也可以存放链表的长度等信息),此节点被称为头节点。 若链表中存在头节点&…

[每周一更]-(第54期):Go的多版本管理工具

参考 https://zhuanlan.zhihu.com/p/611253641https://learnku.com/articles/78326 前文概要 Go语言从开始使用从1.13起步,随着泛型的支持,带领团队在转型Go的时候,做基础组件架构选型使用1.18,但是Go版本不断迭代想使用最新版本…

Java的日期时间API

目录 JDK8之前的日期时间API java.lang.System类 java.util.Date类 java.text.SimpleDateFormat类 java.util.Calendar(日历)类 java.util.GregorianCalendar类 JDK8中新日期时间API LocalDate、LocalTime、LocalDateTime 类 Instant类 java.time.format.DateTimeFor…

SCA Sentinel分布式系统的流量防卫兵

Sentinel官网:https://sentinelguard.io/zh-cn Sentinel:Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应保护等多个维度来帮助用户 保障微服务的稳定性 Sentinel与Hystrix对…

http连接处理(下)(四)

1.结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文,并将该报文发送给浏览器端。首先介绍一些基础API,然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分,介绍stat、mmap、iovec、writev。 流程图部分&…

NodeJS 后端通过Http获取Base64格式数据显示图片 ②〇

文章目录 前言BASE64前端开发后端开发异步代码效果总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀…

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库: chrono 流式查询使用: query_iter 输出到Vec使用: query 映射到结构体使用: query_map 获取单条数据使用: query_first 命名…

RTP及RTP Header Extension

https://www.rfc-editor.org/rfc/rfc3550.txt 译文: http://www.gpssoft.cn/download/protocol/RFC-3550-%E4%B8%AD%E6%96%87%E7%89%88.pdf RTP:real-time transport protocol,实时传输协议 每一个 RTP 包中都有前 12 个字节,而…

了解PostgreSQL sql shell和VACUUM命令

从SQL Shell进入PostgreSQL;没用过这东西,看一下; 一直回车;最后输入口令就登入了;此时是登入默认的数据库postgres;这个数据库是默认安装的; 看一下有没有表,根据资料可以用 \d 或…

K210学习篇(五)PWM

machine.PWM PWM: 脉宽调制模块, 硬件支持的PWM, 可以指定任意引脚(0到47引脚) 每个 PWM 依赖于一个定时器, 即当定时器与 PWM 功能绑定后, 不能作为普通定时器使用了。 因为有 3 个定时器&…