cronsun 定时任务管理

linux上的定时任务可以通过crontab命令配置,简单但是不方便管理。因此,采用分布式cronsun管理各节点的定时任务,并监控日志。
在这里插入图片描述

1. 在master上安装mongodb

  1. 配置yum源,创建mongodb的repo文件,版本信息根据实际进行改动
vim /etc/yum.repos.d/mongodb-org.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
  1. 安装mongodb
    此处可能报错:GPG key retrieval failed: [Errno 14] curl#6 - “Could not resolve host: www.mongodb.org; Unknown error”,处理办法:https://blog.csdn.net/clementad/article/details/46896075
yum install mongodb-org -y
  1. 修改配置文件
vim /etc/mongod.conf
net:
  port: 27017
  bindIp: 0.0.0.0  

security:
  authorization: enabled
  1. 启动并设置开机自启
sudo systemctl start mongod
sudo systemctl enable mongod
  1. 创建用户
mongo
use admin
db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},"readWriteAnyDatabase"]})

# 此处进入master节点下创建cronsun用户
mongo --host <masterIP>
use admin
db.auth("root", "123456")
use cronsun
db.createUser({user:'cronsun',pwd:'123456',roles:[{role:"userAdmin",db:"cronsun"}]})

2. 在msater上安装etcd

  1. 安装命令
yum install etcd -y
  1. 修改配置文件
vim  /etc/etcd/etcd.conf
ETCD_NAME="master" 
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
  1. 启动服务并且验证状态
systemctl start etcd
etcdctl set testdir/testkey0 0
etcdctl get testdir/testkey0 
etcdctl -C http://<masterIP>:4001 cluster-health
etcdctl -C http://<masterIP>:2379 cluster-health

3. 在master上安装cronsun

  1. 下载并解压安装包,有时候网速慢,github上一直连不上,可以手动去网站下
cd /opt
wget https://github.com/shunfei/cronsun/releases/download/v0.3.5/cronsun-v0.3.5-linux-amd64.zip
unzip cronsun-v0.3.5-linux-amd64.zip
  1. 修改cronsun配置文件
vim /opt/cronsun-v0.3.5/conf/db.json
{
  "Hosts": [
    "<masterIP>:27017"
  ],
  "Database": "cronsun",
  "#AuthSource": "AuthSource Specify the database name associated with the user’s credentials.",
  "#AuthSource": "AuthSource defaults to the cronsun's Database.",
  "#AuthSource": "If connect mongodb like './bin/mongo mytest -u test -p 123 --authenticationDatabase admin' ",
  "#AuthSource": "the AuthSource is 'admin'. ",
  "AuthSource": "admin",
  "UserName": "root",
  "Password": "123456",
  "#Timeout": "connect timeout duration/second",
  "Timeout": 15
}
vim /opt/cronsun-v0.3.5/conf/etcd.json
{
    "Endpoints":[
        "http://<masterIP>:2379"
    ],
    "Username":"",
    "Password":"",
    "#DialTimeout":"单位秒",
    "DialTimeout": 2
}
  1. 将cronsun拷贝到集群其他节点地址
scp -r /opt/cronsun-v0.3.5 <other_server>:/opt
  1. 在所有节点上启动cronnode,(采用supervisor维护)
/opt/cronsun-v0.3.5/cronnode -conf /opt/cronsun-v0.3.5/conf/base.json
[program:cronsun_node]
command=/opt/cronsun-v0.3.5/cronnode -conf /opt/cronsun-v0.3.5/conf/base.json
directory=/opt
;process_name=%(process_num)02d?
;numprocs=5
autorestart=true
autostart=true
startsecs=1
startretries=10
stderr_logfile=/opt/cronsun-v0.3.5/stderr.log
stdout_logfile=/opt/cronsun-v0.3.5/stdout.log
;environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
  1. 在master上启动cronweb,(采用supervisor维护)
 /opt/cronsun-v0.3.5/cronweb -conf /opt/cronsun-v0.3.5/conf/base.json
[program:cronsun_web]
command=/opt/cronsun-v0.3.5/cronweb -conf /opt/cronsun-v0.3.5/conf/base.json
directory=/opt
;process_name=%(process_num)02d?
;numprocs=5
autorestart=true
autostart=true
startsecs=1
startretries=10
stderr_logfile=/opt/cronsun-v0.3.5/stderr.log
stdout_logfile=/opt/cronsun-v0.3.5/stdout.log
;environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT

4.访问cronsun界面

masterIP :7079/ui/#/node
默认登录账号密码: admin@admin.com/admin

5. 问题处理

5.1 断电重启

某次虚拟机意外断电,重启cronsun服务时报错:mongod.service: control process exited, code=exited status=14
在这里插入图片描述
处理方法:执行如下命令

sudo chown mongod:mongod /tmp/mongodb-27017.sock

5.2 serverStatus was very slow

某天发现cronsun突然断掉,检查mongodb挂掉了,重启,并去日志中查看,报错:serverStatus was very slow,查阅资料后描述可能是某次mongodb访问的内存不足,检查访问日志后发现进行了一次cronsun工作日志的查询,并且查询中没有设置时间,导致mongodb从job_log表中一次拉取过多的返回,处理方法:

mongo -host <ip>
use admin
db.auth("root", "root")
use cronsun
show collections
# 删除job_log表,由于job_latest_log表保存了近期的工作日志,本项目无需保存所有日志,故直接删除
db.job_log.drop()
# 有日志保存需求的,可先将job_log重命名到bak中,cronsun会自动创建新的job_log
# db.job_log.renameCollection(job_log_20211220) renames the collection
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值