统一定时任务管理系统cronsun

  • 统一定时任务管理系统cronsun已关闭评论
  • 115,232 views
  • A+
所属分类:运维实战

摘要

cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 近似。是为了解决多台 Linux  机器上 crontab 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行)。支持界面管理机器上的任务,支持任务失败邮件提醒,安装简单,使用方便,是替换 crontab 一个不错的选择。

背景

crontab是linux系统下最普遍常用的定时任务管理工具,好多业务系统的定时任务都是通过crontab来定义的,感觉是很爽。但是随着业务服务器不停地扩容到多台时,问题来了:

  • crontab 任务分布到各个服务器,有时修改个脚本得逐台服务器更新,维护成本大大提高了
  • 任务到底执行成功了没有,有些失败了很久才发现,排查还得一台一台的登录服务器查看日志
  • 服务器迁移,最扯淡的是脚本都不知道谁弄的,太坑了

基于上述,我们引进了cronsun,cronsun的部署架构如下:

统一定时任务管理系统cronsun

安装

1:安装MongoDB

下载地址:https://www.mongodb.com/download-center#community

统一定时任务管理系统cronsun

下载完安装包,并解压 tgz

 

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz  
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

export PATH=<mongodb-install-directory>/bin:$PATH

<mongodb-install-directory>为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb
创建数据库目录
MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。
以下实例中我们将data目录创建于根目录下(/)。
注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。

mkdir -p /data/db

 命令行中运行 MongoDB 服务
 你可以再命令行中执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
 注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。
 $ ./mongod
 2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal
 2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed
 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16
 2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52
 2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7

MongoDB后台管理 Shell
 如果你需要进入MongoDB后台管理,你需要先打开mongodb装目录的下的bin目录,然后执行mongo命令文件。
 MongoDB Shell是MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。
 当你进入mongoDB后台后,它默认会链接到 test 文档(数据库):
 $ cd /usr/local/mongodb/bin
 $ ./mongo
 MongoDB shell version: 3.0.6
 connecting to: test
 Welcome to the MongoDB shell.
 ……

由于它是一个JavaScript shell,您可以运行一些简单的算术运算:

 > 2+2
 4
 > 3+6
 9

现在让我们插入一些简单的数据,并对插入的数据进行检索:

 > db.runoob.insert({x:10})
 WriteResult({ "nInserted" : 1 })
 > db.runoob.find()
 { "_id" : ObjectId("5604ff74a274a611b0c990aa"), "x" : 10 }
 >

第一个命令将数字 10 插入到 runoob 集合的 x 字段中。

MongoDb web 用户界面
MongoDB 提供了简单的 HTTP 用户界面。 如果你想启用该功能,需要在启动的时候指定参数 --rest 。

$ ./mongod --dbpath=/data/db --rest

MongoDB 的 Web 界面访问端口比服务的端口多1000。
如果你的MongoDB运行端口使用默认的27017,你可以在端口号为28017访问web用户界面,即地址为:http://localhost:28017。

统一定时任务管理系统cronsun

当然,生产环境还是建议集群模式

2:安装Etcd3

etcd 是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。etcd 的灵感来自于 ZooKeeper 和 Doozer,

侧重于:

简单:支持 curl 方式的用户 API (HTTP+JSON)

安全:可选 SSL 客户端证书认证

快速:单实例可达每秒 1000 次写操作

可靠:使用 Raft 实现分布式

系统环境:CentOS release 6.5 x64

安装步骤:

wget https://github.com/coreos/etcd/releases/download/v3.0.6/etcd-v3.0.6-linux-amd64.tar.gz

tar -xvf etcd-v3.0.6-linux-amd64.tar.gz

cd etcd-v3.0.6-linux-amd64

直接运行命令 ./etcd 就可以启动服务端了,非常简单:

默认使用2379端口为客户端提供通讯, 并使用端口2380来进行服务器间通讯。
查看当前安装的版本:

[root@node01 etcd-v3.0.6-linux-amd64]# ./etcd --version  

etcd Version: 3.0.6  

Git SHA: 9efa00d  

Go Version: go1.6.3  

Go OS/Arch: linux/amd64

3:安装cronsun

下载cronsun,下载地址为https://github.com/shunfei/cronsun

分别修改conf目录下的配置文件db.json.sample和etcd.json.sample为db.json和etcd.json,分别对应修改mongoDB和etcd的实际地址。

启动web:./cronweb -conf conf/base.json

启动node:./cronnode -conf conf/base.json

访问前台:http://x.x.x.x:7079/ui/

4:功能

部署完成后,访问前台就能看到cronsun管理WEB界面了,如下图:

统一定时任务管理系统cronsun

Exec result:

统一定时任务管理系统cronsun

统一定时任务管理系统cronsun

job:

统一定时任务管理系统cronsun

Node:

统一定时任务管理系统cronsun

 

 

 

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 微信公众号
  • 微信公众号扫一扫
  • weinxin
avatar