本文描述了在OS X上安装使用Marathon的过程。
Marathon简介
Marathon是Mesosphere公司为Mesos生态圈打造的一个轻量级、扩展性很强的调度long-running service的调度框架。支持RESTful api来创建和管理app,自动为app做容错迁移,凡是能用shell起的任务,理论上都可以通过Marathon在mesos上简单地启动和管理起来。
下图为Mesos, Marathon, Chronos混布示意图:
安装和启动过程
Marathon依赖zk和mesos,如果没用mesos集群的话可以跑local模式。
首先download zookeeper包,修改conf/zoo.cfg,然后
bin/zkServer.sh start
启动一个在local:2181的单个zk服务。zk对Marathon来说,用于做同一个app的多个副本的选举,以做到app fail后marathon可以在新的mesos slave上重新启动。另一方面,zk也用于mesos集群的HA模式。即zk同时负责了对mesos和marathon的HA,但节点路径是分开的,可以见下面启动参数。
然后是安装mesos。可以直接使用brew安装,非常非常方便,
brew install mesos
启动和安装可以参考这篇文章
我也是这样在本地启动了一个master和一个slave
/usr/local/sbin/mesos-master --registry=in_memory --ip=127.0.0.1
/usr/local/sbin/mesos-slave --master=127.0.0.1:5050
然后可以在localhost:5050 看到mesos master的UI。
下载Marathon包,我使用的是0.8.0版本,支持0.20.0+版本的mesos。下载完解压就可以使用
./bin/start --master 127.0.0.1:5050 --zk zk://localhost:2181/marathon
这里连接的就是local启动的mesos master和zk。在local:8080查看marathon的UI。
hello world
我直接YY了一个hello world,在marathon提供的UI里create了一个app,如图
填完后,mesos UI上开始定时地蹦出大量的task,
跟到日志里看,stdout里打印如下日志
Registered executor on 192.168.59.3
Starting task test.c633dc4e-f7eb-11e4-b8f3-66ea63a3c279
sh -c 'echo "hello world"'
Forked command at 44530
hello world
Command exited with status 0 (pid: 44530)
Marathon上的app以json格式描述,具体见官方文档
Run with Docker
Github上描述了与Docker的交互,首先把Docker启动起来,可以参考我之前这篇文章 然后 cd到marathon目录,有个Dockerfile文件,执行
docker build -t marathon-tip .
# 接下来是漫长的package下载和install过程。。。
build成功后,在docker中启动marathon,
docker run marathon-tip --master local --zk zk://localhost:2181/marathon
总结
Marathon相比Mesos上另一个service调度框架Apache Aurora更加易上手,本身是Scala开发的,整体和mesos一样让人感觉轻量,主要提供的是google-scale能力和方便的app管理服务。
全文完:)