分布式任务调度系统xxl-job版本升级经验分享

一、xxl-job简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并()接入多家公司线上产品线,开箱即用。具体文档资料参考官方文档。

二、背景

笔者之前使用的是v2.0.2版本,因需要权限管理等功能,决定将版本升级到v2.1.2。该版本自研调度组件,移除quartz依赖,且将DB脚本默认编码改为utf8mb4等,是一次非常大的版本更新。

三、升级步骤

v2.1.2 较之低版本,最大的区别在于数据库表结构方面,因此升级步骤重点在于数据的迁移:

1.初始化数据库

使用 v2.1.2 版本提供的建表SQL,初始化一套新的数据库。
如果选择mysql,建议使用5.7以上版本。5.6以下版本在初始化时可能会报“ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes”,是因为xxl_job_registry的KEY i_g_k_v超出索引字节的限制。
mysql5.6以下版本想正常初始化必须满足下面3个条件:

系统变量innodb_large_prefix为ON
系统变量innodb_file_format为Barracuda
ROW_FORMAT为DYNAMIC或COMPRESSED

2.数据迁移

将旧数据迁移到新数据库中,对比表结构可知迁移方案如下:

表名 迁移策略
xxl_job_lock 新表,无需迁移
xxl_job_user 和XXL_JOB_QRTZ_USER表结构一致,直接迁移该表数据
xxl_job_group 和XXL_JOB_QRTZ_TRIGGER_GROUP表结构一致,直接迁移该表数据
xxl_job_info 和XXL_JOB_QRTZ_TRIGGER_INFO表结构基本一致,新增了trigger_status、trigger_last_time、trigger_next_time字段,需要根据XXL_JOB_QRTZ_TRIGGERS中的TRIGGER_NAME初始化trigger_status,trigger_next_time会自动更新
xxl_job_log 和XXL_JOB_QRTZ_TRIGGER_LOG表结构一致,直接迁移该表数据
xxl_job_logglue 和XXL_JOB_QRTZ_TRIGGER_LOGGLUE表结构一致,直接迁移该表数据
xxl_job_registry 和XXL_JOB_QRTZ_TRIGGER_REGISTRY表结构一致,直接迁移该表数据

3.升级调度中心

1.如果数据库使用域名且新数据库的域名发生了变化,将域名指向新的数据库。否则直接更新项目中配置的数据库连接信息即可。
2.编译部署新版调度中心。

4.升级执行器依赖

升级执行器依赖版本,重新部署即可。

你可能感兴趣的:(架构,中台,经验分享,分布式,经验分享)