工具篇-- 定时任务xxl-job的集群部署

news2024/9/30 19:33:12

文章目录

  • 前言
  • 一、xxl-job-admin 集群部署:
    • 1.1 部署步骤:
    • 1.2 部署求和建议:
    • 1.3 集群部署模拟(单机):
  • 二、xxl-job 执行器 集群部署:
    • 2.1 集群部署要求:
    • 2.2 集群部署模拟:
  • 三、集群部署的保障:
    • 3.1 执行器集群部署如何保证任务不重复执行:
    • 3.2 任务的负载均衡和故障转移
      • 3.2.1 xxl-job admin
        • 3.2.1.1 负载均衡:
        • 3.2.1.2 故障转移:
      • 3.2.2 执行器:
        • 3.2.2.1 负载均衡:
        • 3.2.21.2 故障转移:
  • 总结


前言

xxl-job 中xxl-job-admin 和 xxl-job-executor-samples 集群部署;


一、xxl-job-admin 集群部署:

1.1 部署步骤:

要部署 xxl-job-admin 的集群,可以按照以下步骤进行操作:

  • . 准备工作

    • 准备多台服务器作为 xxl-job-admin 的集群节点,确保这些服务器具有相同的环境和配置。
    • 每台服务器都需要部署一个 xxl-job-admin 实例,并且这些实例需要连接到同一个数据库实例。
  • 数据库配置

    • 创建一个数据库实例用于存储 xxl-job-admin 的数据,确保所有 xxl-job-admin 实例都能够连接到同一个数据库。
    • 在每个 xxl-job-admin 实例的配置文件中,配置数据库连接信息,确保数据库配置一致。
  • 启动 xxl-job-admin 实例

    • 分别在每台服务器上启动 xxl-job-admin 实例,确保它们使用不同的端口号,以避免端口冲突。
    • 启动 xxl-job-admin 实例时,需要确保配置文件中的相关配置正确,包括数据库连接信息、注册中心地址等。
  • 配置集群参数

    • 在每个 xxl-job-admin 实例的配置文件中,配置集群参数,如注册中心地址,集群通讯端口等。
    • 确保所有 xxl-job-admin 实例的配置参数一致。
  • 验证集群

    • 访问每个 xxl-job-admin 实例的 Web 界面,确保能够正常访问。
    • 创建一些测试任务并排定调度时间,验证任务能够在集群中正常执行。

通过以上步骤,=可以成功部署 xxl-job-admin 的集群了。集群部署可以提高系统的稳定性和可靠性,同时支持更多的并发任务调度。确保集群中的每个 xxl-job-admin 实例都正常工作,并保持协同合作,以确保整个集群的正常运行

1.2 部署求和建议:

  • DB配置保持一致;
  • 集群机器时钟保持一致(单机集群忽视);
  • 建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行。

1.3 集群部署模拟(单机):

将 xxl-job-admin原有的application.properties 复制一份出来命名application-1.properties, 在application-1.properties 只需要需要修改 启动的端口server.port 即可;

然后将原有的启动类配置复制一份,将Active profies 生效的文件设置为1,然后同同时启动这两个xxl-job-admin 实例即可;
在这里插入图片描述

二、xxl-job 执行器 集群部署:

2.1 集群部署要求:

执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。执行器集群部署时,几点要求和建议:

  • 执行器回调地址(xxl.job.admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。
  • 同一个执行器集群内AppName(xxl.job.executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表。

2.2 集群部署模拟:

将xxl-job-executor-sample-springboot 复制一份出来命名application-1.properties, 在application-1.properties 只需要需要修改 启动的端口server.port 及执行器端口 xxl.job.executor.port 即可;
然后将原有的启动类配置复制一份,将Active profies 生效的文件设置为1,然后同同时启动这两个xxl-job-executor-sample-springboot 实例即可;
在这里插入图片描述

启动完成可以看到xxl-job-executor-sample 执行器下注册了两个 地址:
在这里插入图片描述

三、集群部署的保障:

3.1 执行器集群部署如何保证任务不重复执行:

(1) 同一任务不被同时执行原理:
xxljob 执行器集群部署时,同一个任务在同一个时间点不会重复执行吗?
xxl-job 执行器集群部署时,同一个任务在同一个时间点不会重复执行。
xxl-job 调度中心会通过多种机制来确保同一个任务在同一个时间点不会被多个执行器实例同时执行,从而避免任务的重复执行。

以下是 xxl-job 调度中心避免任务重复执行的机制:

  • 分片机制

    • xxl-job 调度中心会将任务分片后分配给执行器实例执行,并确保同一个任务的不同分片在同一个时间点只会被一个执行器实例执行。
  • 任务锁机制

  • 调度中心会通过任务锁机制来控制任务的执行,确保同一个任务在同一个时间点只会被一个执行器实例获取执行权限。

  • 调度策略

    • 调度中心会根据任务的调度策略来控制任务的执行逻辑,确保同一个任务在同一个时间点不会被重复执行。
  • 执行日志记录

    • 调度中心会记录任务的执行日志,以及任务的执行状态和执行结果,可以通过执行日志来监控任务的执行情况,并避免重复执行。

总的来说,xxl-job 调度中心会通过以上机制来确保在执行器集群部署时,同一个任务在同一个时间点不会重复执行。同时,开发人员也可以根据具体业务需求和任务特点来合理配置任务的调度策略和参数,从而进一步确保任务的执行正确性和稳定性。

(2) 避免任务重复执行
调度密集或者耗时任务可能会导致任务阻塞,集群情况下调度组件小概率情况下会重复触发;
针对上述情况,可以通过结合 “单机路由策略(如:第一台、一致性哈希)” + “阻塞策略(如:单机串行、丢弃后续调度)” 来规避,最终避免任务重复执行。

3.2 任务的负载均衡和故障转移

3.2.1 xxl-job admin

3.2.1.1 负载均衡:

xxl-job 中,Admin 集群中通常只有一个节点被选举为主节点,负责对外提供服务,也就是所谓的 Leader 节点。其他节点则处于备用状态,可以在主节点宕机或失效时接管服务,实现故障转移。

当一个 xxl-job Admin 集群启动时,集群中会发生 Leader 选举,最终选举出一个节点作为主节点。主节点负责协调任务调度、监控和管理等工作,而备用节点则处于待命状态,等待主节点失效时接管服务。

主节点对外提供服务的优势在于集中了管理和处理请求,增加了系统的稳定性和一致性。同时,当主节点失效时,备用节点可以快速接管服务,保证了服务的持续性和可用性。

总的来说,xxl-job Admin 集群中通常只有一个主节点对外提供服务,其他节点则处于备用状态,用于故障转移和高可用性保障。

3.2.1.2 故障转移:

当某个 xxl-job Admin 节点宕机后,整个集群将会启动故障转移过程,其他节点将会重新选举新的主节点(Leader),以保证集群的可用性和稳定性。以下是 xxl-job Admin 集群故障转移的基本过程:

  1. 节点故障检测

    • 其他集群节点通过心跳机制或定时检测机制会感知到宕机节点的故障,一般通过网络请求超时或节点状态检测来确定节点是否宕机。
  2. Leader 丢失检测

    • 集群所有节点会共同监测当前主节点(Leader)的状态,如果主节点挂掉或失效,将视为 Leader 丢失。
  3. 重新选举 Leader

    • 如果主节点失效,集群中的其他备用节点将会进行重新选举新的主节点。通常会采用一种分布式选主算法(如 Zookeeper 的临时顺序节点)来确保选举的唯一性。
  4. 新 Leader 接管服务

    • 选举出的新主节点将接管原主节点的工作,负责协调任务调度、管理和监控等任务,开始对外提供服务。
  5. 服务恢复

    • 一旦新主节点成功选举并接管服务,整个集群恢复正常运行,任务调度和管理等工作继续进行。

通过以上故障转移过程,xxl-job Admin 集群可以保证在某个节点宕机后能够快速实现主节点的切换,并保持服务的持续性和可用性。在实际应用中,建议合理设置监控机制和故障处理策略,以确保集群的稳定运行。

3.2.2 执行器:

3.2.2.1 负载均衡:

xxl-job中,执行器的负载均衡是由调度中心(Admin)完成的。调度中心负责统一管理任务的调度和分配,将任务分配给执行器节点,并在执行器集群中实现负载均衡。

当一个任务需要执行时,调度中心会根据任务的配置和执行器节点的状态,智能地选择合适的执行器节点来执行任务,以实现负载均衡。调度中心会监控执行器节点的负载情况、性能指标等,动态地进行任务的分配和调度,确保任务能够平衡地分配给各个执行器节点。

因此,执行器集群的负载均衡是由xxl-job的调度中心(Admin)来完成的。调度中心根据任务的特性、执行器节点的状态和负载情况等因素,实现任务的智能分配和负载均衡,以提升系统的性能和稳定性。

3.2.21.2 故障转移:

当一个xxl-job执行器节点宕机时,整个集群将会启动故障转移过程,其他正常在线的执行器节点将会接管宕机节点的任务,并继续执行下去。以下是xxl-job执行器集群故障转移的基本过程:

  1. 调度中心监测节点状态

    • 调度中心会定期检测执行器节点的健康状态,发现宕机节点后,将其标记为不可用。
  2. 任务调度转移

    • 正在执行的任务可能被宕机节点中断,调度中心会将这些任务重新调度到其他正常在线的执行器节点上,确保任务不被中断。
  3. 重新分配任务

    • 调度中心会重新分配该节点原本负责的任务到其他可用的执行器节点上,根据负载情况和任务优先级等因素进行分配。
  4. 执行器节点平稳接管

    • 正在运行的任务可能会由其他执行器节点接管并继续执行,确保任务不被中断或丢失。
  5. 系统自动恢复

    • 整个集群通过自动的故障转移和任务重新分配,在不影响系统稳定性和任务执行的情况下,使得集群恢复到正常运行状态。

通过以上过程,xxl-job的执行器集群能够在某个执行器节点宕机时,确保系统的可用性和稳定性,继续执行任务并避免任务中断。建议合理设置监控和预警机制,以便及时发现和处理执行器节点的故障,保证系统的正常运行。


总结

本文介绍xxljob 调度端以及执行器端 的集群,以及任务执行执行时的负载均衡和故障转移。

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

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

相关文章

pthread_exit和pehread_join函数

pthread_exit: 在线程中禁止调用exit函数,否则会导致整个进程退出,取而代之的是调用pthread_exit函数,这个函数只会使一个线程退出,如果主线程使用pthread_exit函数也不会使整个进程退出,不会影响其他线程…

【基础知识】MPP架构和hadoop架构比对

架构比对 简单一句描述。 mpp架构,就是找一群和自己能力差不多的任一起做事,每个人做的事情是一致的。 hadoop架构,就是找一群能力差一些的人,但只需要他们每个人只做一部分工作。 举例说明 一个特色小饭店如何成为连锁餐饮巨…

【国密算法】深入理解国密算法:原理、实践及注意事项

目录 引言 1. 国密算法概述 2. 国密算法的实践应用 2.1 对称加密(SM1算法) 2.2 非对称加密(SM2算法) 2.3 哈希算法(SM3算法) 3. 国密算法的注意事项 结论 引言 国密算法,即中国密码算法…

AI数字人SadTalker实战

1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色,许多企业和个人正积极利用数字技术来打造属于自己的财富。有没有一种简单而免费的方式来创建自己的数字人呢?本篇博客笔者将为大家介绍如何搭建属于自己的AI数字人。 2.内容 2.1 什么是SadTalker…

内存卡无法读取?这里有救!

一、遭遇内存卡无法读取的困境 在日常生活和工作中,我们越来越依赖电子设备来存储和传输数据。然而,当遇到内存卡无法读取的问题时,很多人会感到困惑和焦虑。无论是重要的工作文件、珍贵的家庭照片,还是其他个人数据,…

基于springboot+vue的音乐网站(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

C++力扣题目 42--接雨水 84--柱状图中最大的矩形

42. 接雨水 力扣题目链接(opens new window) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释&#xff…

C++17之折叠表达式

相关文章系列 深入理解可变参数(va_list、std::initializer_list和可变参数模版) 目录 1.介绍 2.应用 2.1.使用折叠表达式 2.2.支持的运算符 2.3.使用折叠处理类型 3.总结 1.介绍 折叠表达式是C17新引进的语法特性。使用折叠表达式可以简化对C11中引入的参数包的处理&…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure(发音:Ack-sure),代表美国Axure公司;RP则是Rapid Prototyping(快速原型)的缩写。 下载链接:https://www.axure.com/ 下载 可以免费试用…

windows安装onlyoffice8.0

安装erlang 安装Erlang25.3 下载地址 设置环境变量 ERLANG_HOME C:\Program Files\Erlang OTP Path下设置%ERLANG_HOME%\bin 打开cmd输入erl不报错即可 安装rabbitmq rabbitmq和erlang对应的关系 下载地址 执行完exe文件后,找到安装目录下的sbin&am…

H12-821_77

77.如图所示的交换网络,所有交换机都运行了STP协议,当拓扑稳定后,在以下哪台交换机上修改配置BPDU的发送周期,可以影响STD配置BPDU的发送周期? A.STC B.SWD C.SWA D.SWB 答案:C 注释: 在根桥上…

MATLAB环境下基于超高斯全自动组织学图像的盲彩色反卷积方法

图像盲反卷积问题仅根据模糊图像估计清晰图像和模糊核,也是一个欠定问题且求解更加困难。但图像盲反卷积算法更实际,因为许多情况下,模糊核都是未知或部分已知的。求解盲反卷积问题需要为未知量选择适当的先验模型,以得到清晰图像…

二叉树与堆

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树: 2.3 特殊的二叉树: 2.4 二叉树的性质 2.5 二叉树的…

基于springboot+vue的二手图书交易平台(源码+论文)

文章目录 目录 文章目录 前言 一、功能设计 二、功能实现 前台系统功能模块分为 后台系统功能模块分为 三、库表设计 四、论文 前言 在互联网上所有产品的分类信息中,电子类的产品信息无疑是最丰富的,一大批电子资讯类网站从中国互联网诞生初期就开始为…

力扣模板题:回文链表

请牢记检测回文串的模板 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool isPalindrome(struct ListNode* head) {int size0;struct ListNode* pointhead;while(point){size;pointpoint->next;}int arr…

每日学习-2月22日

知识点:二叉树 二叉树的性质: 二叉树的存储结构: 顺序存储: 用数组存储,tree[ 0 ]处空缺,以便编号与下标一致对标完全二叉树,按序号存储在相应索引的位置 i的左孩子:2i i的右孩…

代码随想录Leetcode416. 分割等和子集

题目&#xff1a; 代码(首刷看解析 2024年2月23日&#xff1a; class Solution { public:bool canPartition(vector<int>& nums) {/*因为数值 < 100, length < 200 , 数值 < 20000*/vector<int> dp(10001, 0);int sum accumulate(nums.begin(), num…

武汉建筑安全员ABC小题库不存在未雨绸缪“时间够”

武汉建筑安全员ABC小题库不存在未雨绸缪“时间够” 关于武汉三类人员&#xff08;安全员ABC&#xff09;考试小题库&#xff0c;一般都是考试时间出来&#xff0c;准考证下来了&#xff0c;匹配题库&#xff0c;好好看题&#xff08;认真练习即可&#xff09;&#xff0c;一般…

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…

C++ 之LeetCode刷题记录(三十四)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 12. 整数转罗马数字 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xf…