cronsun定时任务管理系统 二进制单机+集群搭建

前言:

环境:centos7 ubuntu18.04 LTS

概览:

  1. 下载安装mongodb
  2. 安装etcd
  3. 部署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
# 下载mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz
# 解压到 /opt 目录下
tar -xzvf mongodb-linux-x86_64-4.0.2.tgz
mv mongodb-linux-x86_64-4.0.2 mongodb
cd /opt/mongodb
mkdir -p /data/db
mkdir -p /data/logs
mkdir -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
# 启动mongodb
cd /opt/mongodb && bin/mongod --config /etc/mongodb/mongodb.conf
# 验证
[root@localhost cronsun-v0.3.5]# ss -ntulp |grep 27017
tcp LISTEN 0 128 *:27017 *:* users

2.安装etcd

yum安装
1
2
3
4
5
6
7
8
9
10
11
12
13
# yum方式安装
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
#环境:centos7
#软件:ectd
set -e
dir="etcd-v3.5.0-linux-amd64"
ectd_v="etcd-v3.5.0-linux-amd64.tar.gz"

download_etcd (){
# wget https://github.com/coreos/etcd/releases/download/v3.4.14/etcd-v3.4.14-linux-amd64.tar.gz
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,
分别修改 MongoDBetcd的实际地址和对应的用户密码,
在默认安装下mongodbetcd没有密码,还保持原配置即可。使用如下命令分别启动webnodenode

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

image-20230812134852232

二. 集群版cronsun部署

NOTE: 先部署一个单节点 再部署普通节点 普通节点部署只需要部署cronsunnode服务 + 修改cronsun 两个配置文件db+etcd 修改访问地址即可

master节点配置

①. 设置mongodb任意IP访问 /etc/mongodb/mongodb.conf

image-20230812124153433

②. db.jsonetcd.json配置保持不变 (普通节点需要指向master节点)

image-20230812133236429

③. 修改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配置 

# 此处为本机配置需要配置本机IP

#[member]
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"

# 此处配置本机IP

#[cluster]
ETCD_LISTEN_PEER_URLS="http://10.0.0.10:2380" # 本机内部通信使用的URL
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.10:2380"

# 此处为集群配置集群IP

# 广播给集群内其他成员访问的URL
ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.10:2380,etcd2=http://10.0.0.131:2380"
# 初始集群成员列表
ETCD_INITIAL_CLUSTER_STATE="new"
# 初始集群状态,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配置

# 此处为本机配置需要配置本机IP

#[member]
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"

# 此处配置本机内部IP

#[cluster]
ETCD_LISTEN_PEER_URLS="http://10.0.0.131:2380" # 改为本机地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.131:2380"

# 此处为集群配置集群IP

# 广播给集群内其他成员访问的URL 配置节点地址
ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.10:2380,etcd2=http://10.0.0.131:2380"
# 初始集群成员列表
ETCD_INITIAL_CLUSTER_STATE="new"
# 初始集群状态,new为新建集群
ETCD_INITIAL_CLUSTER_TOKEN="cronsun-etcd-cluster" #集群的名称
②. 配置cronsun并修改db.json etcd.json 指向master节点
db.json (配置为master节点mongodb)
1
2
3
4
# 解压cronsun源码包
cd /opt && tar -xvf cronsun-v0.3.5.tar.gz
# 配置指向master节点
vim /opt/cronsun-v0.3.5/conf/db.json

image-20230812131417617

etcd.json (配置为master节点etcd)
1
2
# 配置指向master节点
vim /opt/cronsun-v0.3.5/conf/etcd.json

image-20230812132731811

启动cronsun node(也可以启动web这样两个节点都能访问http://ip:7079

1
2
3
4
# 启动
./cronnode -conf conf/base.json &
# 可选
./cronweb -conf conf/base.json &

三. 效果

image-20230812133554396image-20230812133603539

四. 扩展

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(但是cronnodemail.json 也必须 Enable:true,否则还是无法发出告警 不会显示报警开关按钮)。

其次,编辑 cronwebcronnode 的配置文件: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"
}

image-20230812134028266

效果

image-20230812134112155

③. 时间设置

特殊符号说明:
• *:星号会匹配字段中的所有值,如在小时字段用了星号,表示每个小时都会匹配;
• /: 匹配指定的数字,如 */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 * * * *

教程结束。