一、需求

公司写了很多脚本,分别部署在不同的机器上通过crontab进行管理,这里有一个缺点是,没有一个平台可以查看所有的任务执行情况和进行任务统一管理的平台。为此找了一些开源工具进行测试,测试涉及的产品如下:

国内有的有:jobxSaturn(唯品会)、elasticjob (国内开发,apache孵化)、xxl-job等【基本都由java开发】,国外开源的有:AirflowAzkaban 。但研究了下基本上发现都比较重量级。github上找了下,发现有两个golang实现的相对轻量级的产品gocroncronsun ,比较了以后选择了后者。

二、部署使用

CRONSUN的架构如下,所以安装的时候依赖mongodb和etcd,node节点上无此依赖,只要和web node之间网络是通的,同时连接两种库能通就行。

cronsun
cronsun

这里测试起见etcd和mongodb没有配置集群模式,都是单节点运行。

1、安装mongodb

vim mongodb.repo增加如下内容:

1[mongodb]
2name=mongodb
3#mirrorlist=file:///media/BaseOS/
4baseurl=http://mirrors.163.com/mongodb/yum/el8/
5gpgcheck=0

接下按如下命令安装和启动mongodb:

1yum -y install mongodb-org*
2systemctl start mongod.service 

2、安装etcd

github上下载最新的etcd软件,解压后,将可执行文件etcd 和 etcdctl复制到/usr/bin目录下,接下来配置etcd服务:

 1# vim /usr/lib/systemd/system/etcd.service    (添加以下内容)
 2[Unit]
 3Description=Etcd Server
 4After=network.target
 5[Service]
 6Type=simple
 7WorkingDirectory=/var/lib/etcd/
 8EnvironmentFile=-/etc/etcd/etcd.conf
 9ExecStart=/usr/bin/etcd
10[Install]
11WantedBy=multi-user.target

创建工作文件夹,并配置etcd.conf文件:

1mkdir -p /var/lib/etcd
2mkdir -p /etc/etcd
3# vim /etc/etcd/etcd.conf     (添加以下内容)
4[member]
5ETCD_NAME=default
6ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
7ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379"
8ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"

启动服务:

1systemctl daemon-reload
2systemctl enable etcd.service
3systemctl start etcd.service

3、cronsun部署

下载cronsun并解压后,修改 conf 目录下的配置文件:db.json 和 etcd.json,分别修改 MongoDB 和 etcd 的实际地址和对应的用户密码,在默认安装下mongodb和etcd没有密码,还保持原配置即可。使用如下命令分别启动webnode和node。

1./cronweb -conf conf/base.json &
2./cronnode -conf conf/base.json &

访问前台:http://x.x.x.x:7079/ui/ 默认用户密码: admin@admin.com / admin 登录防问。对应的页面如下:

cronsun-web
cronsun-web

在节点管理里,只需要将节点进行分组,不需要增加节点,只要节点启动,就可以在web页面上查看到。可以通过如下界面进行任务增加:

cronsun-add-job
cronsun-add-job

在日志界面,通过执行成功里点成功或失败界面可以查看相关日志。

三、告警配置

cronsun的告警是由cronweb发出的,不过需要在web和node上都mail.json里的配置设置为Enable才生效,同时在web端的任务里开启告警。mail.json具体配置如下:

 1{
 2    "Enable": true,
 3    "To": ["这里填写缺省默认的告警邮件接收地址"],
 4    "#HttpAPI": "如有此字段,则按 http api 方式发送",
 5    "#Keepalive": "如果此时间段内没有邮件发送,则关闭 SMTP 连接,单位/秒",
 6    "Keepalive": 30,
 7    "#doc": "https://godoc.org/github.com/go-gomail/gomail#Dialer",
 8    "Host": "填写SMTP服务器地址,比如:stmp.qq.com",
 9    "Port": 25,
10    "Username": "这里填写发送人邮箱地址(用于登陆SMTP+from地址)",
11    "Password": "登陆密码",
12    "SSL": false,
13    "LocalName": ""
14}