文章摘要:在生产环境中部署Elastic-Job集群后,那么如何来运维监控线上跑着的定时任务呢?
如果在生产环境的大规模服务器集群上部署了集成Elastic-Job的业务工程,而没有相应的运维监控工具可以来监控定时任务执行状态和动态修改定时任务执行时间,修改相应的配置还得手动更新数据库或者配置文件,那么则会给运维和研发工程师增添不少麻烦。使用过Quartz集群方案的同学应该都有过同样的感触,修改定时任务执行时间配置和监控任务的状态都比较麻烦,想要一个功能齐全的监控运维平台还得自己专门来开发。所幸的是,Elastic-Job开源社区很早就考虑到该问题,在项目发布初期即提供了一个功能相对齐全的Elastic-Job运维监控console平台。
一、Elastic-Job-Console的介绍
从前面一篇文章《分布式定时任务Elastic-Job在SpringBoot工程中实践方法(一)》中提到的Elastic-Job分布式协调框架的系统架构图(如下)可以看出运维平台—Elastic-Job-Console项目也是Elastic-Job项目中必不可少的一个重要部分。
Elastic-Job-Console以Web的方式向运维和开发人员提供监控、更改配置和暂停/启动定时任务的服务。从上面的架构上来看,console平台并没有和Elastic-Job-Lite发生直接的关联,而是借助ZooKeeper作业注册中心和 Elastic-job-lite关联起来了。下面主要列举了Elastic-Job-Console运维监控平台具备的主要功能:
(1)登录安全控制
(2)注册中心管理
(3)定时任务维度状态查看
(4)服务器维度状态查看
(5)快捷修改定时任务配置(Cron表达式、作业分片总数、分片序列号、是否支持失效转移和是否支持错过重执行)
(6)控制任务的暂停和恢复运行
二、Elastic-Job-Console监控控制平台的实践
1、版本环境准备
JDK 1.8、Maven 3.3.9、Elastic-Job-Lite 2.1.5、Zookeeper 3.4.6。
2、下载Elastic-Job开源项目的源码
Elasitc-Job开源项目在git-hub上的地址为:https://github.com/elasticjob/elastic-job-lite;由于需要在自己本地重新构建Elastic-Job-Console项目,所以有必要下载其源代码至本地。此外,任何一款优秀的开源组件均值得我们去学习和借鉴,只有不断地一遍一遍去撸源码,才能真正做到“知其然知其所以然”,最后才可以参与开源社区为其贡献自己的代码。
3、Maven构建Elastic-Job-Console
将当前目录切换至下载Elastic-Job项目的根目录下,并在Cmd窗口中运行以下的maven构建命令即可编译构建Elastic-Job项目。
//Maven编译构建命令
mvn clean install -Dmaven.test.skip=true
编译构建后的截图如下:
4、启动Elastic-Job-Console平台
使用maven编译构建成功后在“{本地路径}\elastic-job-lite\elastic-job-lite-console\target”路径下会生成一个名为“elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz”的压缩包,解压后即可使用。解压后的文件bin目录中,有两个脚本,“start.bat”是windows环境下使用;“start.sh”是linux环境下使用。
在conf目录中,可以修改auth.properties文件中的登录名/密码来进行安全认证。该文件的内容如下:
root.username=root
root.password=root
guest.username=guest
guest.password=guest
以windows环境为例,双击“start.bat”脚本即可启动Elastic-Job-Console运维监控平台。从该脚本中可以看到默认启动运行的端口为:8899。
@echo off
if ""%1"" == ""-p"" goto doSetPort
if ""%1"" == """" goto doStart
echo Usage: %0 [OPTIONS]
echo -p [port] Server port (default: 8899)
goto end
:doSetPort
shift
set PORT=%1
:doStart
set CFG_DIR=%~dp0%..
set CLASSPATH=%CFG_DIR%
set CLASSPATH=%~dp0..\lib\*;%CLASSPATH%
set CONSOLE_MAIN=io.elasticjob.lite.console.ConsoleBootstrap
echo on
if ""%PORT%"" == """" set PORT=8899
java -cp "%CLASSPATH%" %CONSOLE_MAIN% %PORT%
:end
启动后的日志如下图所示:
5、使用Elastic-Job-Console平台管理分片任务
在本地开启浏览器访问“localhost:8899”地址,使用前面在配置文件中设置的用户名和密码(默认为root/root)即可登录上Elastic-Job-Console平台。设置完Zookeeper作业中心的IP地址,端口和命名空间后即可对部署的Elastic-Job分片定时任务进行监控和管理了。
在“作业维度”一栏中可以看到当前在测试环境中跑的示例分片定时任务的各个属性(如作业名称、分片总数、Cron定时任务表达式和状态)以及管理分片任务的操作按钮等。
在“服务器维度”一栏中可以看到,分片定时任务的运行实例,在该示例中,分片定时任务的实例分别在两台虚拟机上跑,并且当前运行状态均正常。通过最后一列的操作按钮,可以对每个分片定时任务实例进行终止、失效和查看详情的操作。
通过Elastic-Job-Console提供的Web页面,可以根据实际的线上业务情况对业务工程中的分片定时任务进行一些动态的调整,比如大家比较关注的定时任务执行间隔时间,定时任务分片总数、是否支持自动失效转移。通过选择“作业维度”中的定时任务的“修改”按钮,就可以调整下定时任务的一些属性了。下面主要展示了修改定时任务的执行间隔时间:
从图中可以看出原来原来分片定时任务的执行时间间隔为每10S运行一次,通过在页面上修改定时任务的Cron时间表达式,即可完成对定时任务的更改配置。修改后的Web页面和日志截图分别如下:
从上面的Elastic-Job分片定时任务的日志截图中即可看出,部署在两台机器上的两个分片定时任务的执行间隔时间均发生了改变,都由原来的10S变成了20S。在Quarz集群中,原本需要修改配置文件或者DB才能完成更改定时任务属性,而现在只需要在Console平台的Web页面上设置下即可完成分片定时任务的动态属性配置,是不是挺方便的呢?
四、总结
本文主要介绍了基于开源的分布式弹性定时任务调度框架—Elastic-Job的运维监控平台—Elastic-Job-Console的功能介绍和实践方法。由于文章篇幅的原因,本文无法对Elastic-Job框架的一些细节和源码无法进行更为细致的阐述,作者将在后面Elastic-Job框架的源码系列文章中继续逐一进行介绍。同时,限于笔者的才疏学浅,对本文内容可能还有理解不到位的地方,如有阐述不合理之处还望留言一起探讨。