文章目录
- 前言
- 一、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 集群故障转移的基本过程:
-
节点故障检测:
- 其他集群节点通过心跳机制或定时检测机制会感知到宕机节点的故障,一般通过网络请求超时或节点状态检测来确定节点是否宕机。
-
Leader 丢失检测:
- 集群所有节点会共同监测当前主节点(Leader)的状态,如果主节点挂掉或失效,将视为 Leader 丢失。
-
重新选举 Leader:
- 如果主节点失效,集群中的其他备用节点将会进行重新选举新的主节点。通常会采用一种分布式选主算法(如 Zookeeper 的临时顺序节点)来确保选举的唯一性。
-
新 Leader 接管服务:
- 选举出的新主节点将接管原主节点的工作,负责协调任务调度、管理和监控等任务,开始对外提供服务。
-
服务恢复:
- 一旦新主节点成功选举并接管服务,整个集群恢复正常运行,任务调度和管理等工作继续进行。
通过以上故障转移过程,xxl-job
Admin 集群可以保证在某个节点宕机后能够快速实现主节点的切换,并保持服务的持续性和可用性。在实际应用中,建议合理设置监控机制和故障处理策略,以确保集群的稳定运行。
3.2.2 执行器:
3.2.2.1 负载均衡:
在xxl-job
中,执行器的负载均衡是由调度中心(Admin)完成的。调度中心负责统一管理任务的调度和分配,将任务分配给执行器节点,并在执行器集群中实现负载均衡。
当一个任务需要执行时,调度中心会根据任务的配置和执行器节点的状态,智能地选择合适的执行器节点来执行任务,以实现负载均衡。调度中心会监控执行器节点的负载情况、性能指标等,动态地进行任务的分配和调度,确保任务能够平衡地分配给各个执行器节点。
因此,执行器集群的负载均衡是由xxl-job
的调度中心(Admin)来完成的。调度中心根据任务的特性、执行器节点的状态和负载情况等因素,实现任务的智能分配和负载均衡,以提升系统的性能和稳定性。
3.2.21.2 故障转移:
当一个xxl-job
执行器节点宕机时,整个集群将会启动故障转移过程,其他正常在线的执行器节点将会接管宕机节点的任务,并继续执行下去。以下是xxl-job
执行器集群故障转移的基本过程:
-
调度中心监测节点状态:
- 调度中心会定期检测执行器节点的健康状态,发现宕机节点后,将其标记为不可用。
-
任务调度转移:
- 正在执行的任务可能被宕机节点中断,调度中心会将这些任务重新调度到其他正常在线的执行器节点上,确保任务不被中断。
-
重新分配任务:
- 调度中心会重新分配该节点原本负责的任务到其他可用的执行器节点上,根据负载情况和任务优先级等因素进行分配。
-
执行器节点平稳接管:
- 正在运行的任务可能会由其他执行器节点接管并继续执行,确保任务不被中断或丢失。
-
系统自动恢复:
- 整个集群通过自动的故障转移和任务重新分配,在不影响系统稳定性和任务执行的情况下,使得集群恢复到正常运行状态。
通过以上过程,xxl-job
的执行器集群能够在某个执行器节点宕机时,确保系统的可用性和稳定性,继续执行任务并避免任务中断。建议合理设置监控和预警机制,以便及时发现和处理执行器节点的故障,保证系统的正常运行。
总结
本文介绍xxljob 调度端以及执行器端 的集群,以及任务执行执行时的负载均衡和故障转移。