chronos是airbnb开源的分布式crontab,它基于mesos作为分布式操作系统,并定时任务委托给mesos执行。
它以ISO8601时间规范作为定时任务的执行时间配置,所以理解这个时间规范对配置chronos定时任务至关重要:点我学习。
另外,任务可以选择以docker或者Mesos两种container形式执行,支持控制任务是否可以重叠并发(是否等待前一个任务结束),支持任务依赖配置(某个任务的执行开始依赖其他任务的执行结束)。
原理
chronos以framework身份接入Mesos,支持zookeeper选举高可用,同时将所有的定时任务配置存储在zookeeper里。
chronos的工作流程描述如下:
1,从zk获取全部的任务列表。
2,以scheduler身份接入到mesos,分析任务的执行依赖。
3,分析出需要立即执行的任务和暂时不需要执行的任务。
4,将需要立即执行的任务放入执行队列,等待mesos offer足够的资源。
5,等待执行队列中的一个任务被执行,再次回到步骤1。
安装
chronos可以直接使用官方的docker镜像部署,可以参考:官方文档。
我配置了2个chronos作为主备,启动脚本如下:
1 2 3 4 5 |
[root@localhost chronos]# cat start.sh #!/bin/bash docker run -d --net=host -e PORT0=8035 -e PORT1=8036 mesosphere/chronos:latest --zk_hosts zk://localhost:2181,localhost:2182,localhost:2183/chronos --master zk://localhost:2181,localhost:2182,localhost:2183/mesos/master docker run -d --net=host -e PORT0=8037 -e PORT1=8038 mesosphere/chronos:latest --zk_hosts zk://localhost:2181,localhost:2182,localhost:2183/chronos --master zk://localhost:2181,localhost:2182,localhost:2183/mesos/master |
- 网络模式使用host,这样docker容器将共享宿主机的网络namespace,这是因为我们需要的仅仅是docker的执行环境,并不是网络隔离。
- zk_hosts是给chronos保存任务数据和进行Leader选举的存储目录。
- master是mesos-master的zk存储地址,这样chronos才可以找到master并注册上去。
- 环境变量PORT0=8035是chronos的HTTP接口,也是Web UI的地址,PORT1=8036用于libprocess(暂时关注不到)。
使用
访问http://宿主机IP:8035/或者http://宿主机IP:8037都可以访问到Web UI。
chronos的最新版本是v3.x,它对之前的2.x版本进行了重写,导致目前3.x的Web ui界面极其简陋,仅仅提供了基础的任务启停和配置功能,因此如果你看到了下面的界面不要感觉到惊慌:
快速掌握ISO8601
主要还是阅读博客上方的链接自行学习,我建议关注这几个点:
- 所有字母都是大写,无论用来做什么的
- 日期写成2012-02-05或者20120205,都OK
- 时间需要用字母T开始,比如:T08:00:00或者T080000
- 时间末尾用Z表示UTC时间,用+08:00这种表示在UTC时间基础上偏移的时间(+08:00是中国的时区)
- 字母P表示一段时间(我猜是period的意思),常用于表达执行任务的间隔,比如:P10M表示10个月的时长,而PT10M是10分钟的时长,因为T开头表示的时间,非T开头表示的是日期
- R表示从A时间到B时间之间,每间隔C时长,执行一次。
祝玩的愉快
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~

大神求更。
请问下chronos的API能用不,我怎么用不了curl -L -X GET 192.168.149.131:4400/v1/scheduler/jobs返回404
你好,mesos不推荐继续使用,请迁移至k8s。
1
1
1