cronsun
定时任务管理系统 二进制单机+集群搭建前言:
环境:centos7 ubuntu18.04 LTS
概览:
下载安装mongodb
安装etcd
部署cronsun
一. 单机版cronsun
部署 1.
部署mongodb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz tar -xzvf mongodb-linux-x86_64-4.0.2.tgz mv mongodb-linux-x86_64-4.0.2 mongodbcd /opt/mongodbmkdir -p /data/dbmkdir -p /data/logsmkdir -p /etc/mongodb/vim /etc/mongodb/mongodb.conf dbpath=/data/db logpath=/data/logs/mongo.log bind_ip=0.0.0.0 logappend=true fork=true port=27017 cd /opt/mongodb && bin/mongod --config /etc/mongodb/mongodb.conf[root@localhost cronsun-v0.3.5] tcp LISTEN 0 128 *:27017 *:* users
2.
安装etcd
yum
安装1 2 3 4 5 6 7 8 9 10 11 12 13 yum install -y etcd vim /etc/etcd/etcd.conf [member] ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379" ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379" systemctl restart etcd systemctl enable etcd
编译安装(适用于centos ubuntu
) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 #!/bin/bash set -edir ="etcd-v3.5.0-linux-amd64" ectd_v="etcd-v3.5.0-linux-amd64.tar.gz" download_etcd (){ mkdir -p /tmp/etcd tar -xvf ${ectd_v} mv -i ${dir} /tmp/etcd cp -rfi /tmp/etcd/etcd* /usr/local/bin/ mkdir -p /var/lib/etcd/ mkdir -p /opt/etcd/config/ chmod 700 /var/lib/etcd } configuration_conf (){cat <<EOF | sudo tee /opt/etcd/config/etcd.conf #节点名称 ETCD_NAME=$(hostname -s) #数据存放位置 ETCD_DATA_DIR=/var/lib/etcd EOF } system_etcd () {cat <<EOF >/etc/systemd/system/etcd.service [Unit] Description=Etcd Server Documentation=https://github.com/coreos/etcd After=network.target [Service] User=root Type=notify EnvironmentFile=-/opt/etcd/config/etcd.conf ExecStart=/tmp/etcd/etcd Restart=on-failure RestartSec=10s LimitNOFILE=40000 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload && systemctl enable etcd && systemctl start etcd systemctl status etcd etcdctl -h } main () { download_etcd configuration_conf system_etcd } main
配置etcd
1 2 3 4 5 6 7 8 9 10 vim /opt/etcd/config/etcd.conf [member] ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379" ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379" systemctl restart etcd systemctl enable etcd
3.
安装cronsun
下载cronsun并解压后 , 修改conf
目录下的配置文件:db.json
和 etcd.json,
分别修改 MongoDB
和etcd
的实际地址和对应的用户密码, 在默认安装下mongodb
和etcd
没有密码,还保持原配置即可。使用如下命令分别启动webnode
和node
。
1 2 ./cronweb -conf conf/base.json & ./cronnode -conf conf/base.json &
效果 二. 集群版cronsun
部署 NOTE: 先部署一个单节点 再部署普通节点 普通节点部署只需要部署cronsun
的node
服务 + 修改cronsun
两个配置文件db+etcd
修改访问地址即可
master
节点配置①. 设置mongodb
任意IP
访问 /etc/mongodb/mongodb.conf
②. db.json
与etcd.json
配置保持不变 (普通节点需要指向master
节点)
③. 修改etcd
配置将其他节点加入进来 (此文件所有节点修改内容大同小异 vim /etc/etcd/etcd.conf
) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ETCD_NAME=etcd1 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://10.0.0.10:2379,http://127.0.0.1:2379" ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.10:2379,http://127.0.0.1:2379" ETCD_LISTEN_PEER_URLS="http://10.0.0.10:2380" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.10:2380" ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.10:2380,etcd2=http://10.0.0.131:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="cronsun-etcd-cluster"
普通节点操作 ①. 修改etcd
配置 vim /opt/etcd/config/etcd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ETCD_NAME=etcd1 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://10.0.0.131:2379,http://127.0.0.1:2379" ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.131:2379,http://127.0.0.1:2379" ETCD_LISTEN_PEER_URLS="http://10.0.0.131:2380" ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.131:2380" ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.10:2380,etcd2=http://10.0.0.131:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER_TOKEN="cronsun-etcd-cluster"
②. 配置cronsun
并修改db.json etcd.json
指向master节点
db.json
(配置为master
节点mongodb
)1 2 3 4 cd /opt && tar -xvf cronsun-v0.3.5.tar.gz vim /opt/cronsun-v0.3.5/conf/db.json
etcd.json
(配置为master
节点etcd
)1 2 vim /opt/cronsun-v0.3.5/conf/etcd.json
启动cronsun node
(也可以启动web
这样两个节点都能访问http://ip:7079
) 1 2 3 4 ./cronnode -conf conf/base.json & ./cronweb -conf conf/base.json &
三. 效果
四. 扩展 NOTE: 每个节点都需要配置告警否则会出现 只有配置了告警的节点 定时任务出现问题收到邮件
①. cronsun
配置定时任务失败报警 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { "Enable" : true , "To" : ["这里填写缺省默认的告警邮件接收地址" ], "#HttpAPI" : "如有此字段,则按 http api 方式发送" , "#Keepalive" : "如果此时间段内没有邮件发送,则关闭 SMTP 连接,单位/秒" , "Keepalive" : 30, "#doc" : "https://godoc.org/github.com/go-gomail/gomail#Dialer" , "Host" : "填写SMTP服务器地址,比如:stmp.qq.com" , "Port" : 25, "Username" : "这里填写发送人邮箱地址(用于登陆SMTP+from地址)" , "Password" : "登陆密码" , "SSL" : false , "LocalName" : "" }
实际配置:
②. 告警配置 首先要清楚cronsun
的告警是由cronweb
发出的,而不是 cronnode
(但是cronnode
的 mail.json
也必须 Enable:true,
否则还是无法发出告警 不会显示报警开关按钮)。
其次,编辑 cronweb
和 cronnode
的配置文件:mail.json
,如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 { "Enable" : true , "To" : ["8788611@qq.com" ], "#HttpAPI" : "如有此字段,则按 http api 方式发送" , "#Keepalive" : "如果此时间段内没有邮件发送,则关闭 SMTP 连接,单位/秒" , "Keepalive" : 60, "#doc" : "https://godoc.org/github.com/go-gomail/gomail#Dialer" , "Host" : "smtp.qq.com" , "Port" : 465, "Username" : "8788611@qq.com" , "Password" : "bryatscojpvec" , "SSL" : true , "#LocalName" : "LocalName is the hostname sent to the SMTP server with the HELO command. By default, 'localhost' is sent." , "LocalName" : "localhost" }
效果
特殊符号说明: • *:星号会匹配字段中的所有值,如在小时字段用了星号,表示每个小时都会匹配; • /: 匹配指定的数字,如 */3 在小时字段中等于 0,3,6,9,12,15,18,21 等被 3 整除的数; • ,: 匹配分开的值,如 1,3,4,7,8 在小时字段中表示这里面的小时会匹配; • -: 匹配范围,例如:1-6,意思等同于 1,2,3,4,5,6; • ?: 在 日 或者 星期 字段可代替 *; 预定格式: 预定项 描述 等价规则 @yearly (或 @annually) 每年执行一次, 每年 1 月 1 日 0 点开头执行 0 0 0 1 1 * @monthly 每月执行一次, 每月 1 日 0 点开头执行 0 0 0 1 * * @weekly 每周执行一次, 星期天 0 点开头执行 0 0 0 * * 0 @daily (或 @midnight) 每天执行一次, 每天 0 点开头执行 0 0 0 * * * @hourly 每小时执行一次, 每小时 0 分开头执行 0 0 * * * *
教程结束。