在mesos上部署chronos

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作为主备,启动脚本如下:

  • 网络模式使用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界面极其简陋,仅仅提供了基础的任务启停和配置功能,因此如果你看到了下面的界面不要感觉到惊慌:

2BAF9650-6031-46F6-B37C-1BC8FB3E5EF8

快速掌握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时长,执行一次。

祝玩的愉快

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~