Marathon  说明文档 
一、Marathon 介绍 ........................................................................................................................ 2 
二、Marathon 之安装指引篇 ........................................................................................................ 5 
三、  Marathon 之应用篇 .............................................................................................................. 7 
3.1  基础应用 .......................................................................................................................... 7 
3.2  运行远程资源 .................................................................................................................. 9 
3.4  容器运行 ........................................................................................................................ 12 
3.5  健康检查 ........................................................................................................................ 15 
3.6  约束语法 ........................................................................................................................ 17 
3.7  应用群组 ........................................................................................................................ 20 
3.8  命令行设臵 .................................................................................................................... 22 
3.9  应用部署 ........................................................................................................................ 23 
3.10  事件总线 ...................................................................................................................... 26 
3.11  应用实例 ...................................................................................................................... 28 
四、Marathon 之高可用篇 .......................................................................................................... 31 
五、Marathon 之 SSL 与基本认证篇 ......................................................................................... 32 
5.1  使用 SSL ........................................................................................................................ 32 
5.2  生成带有 SSL 密钥的 keystore .................................................................................... 32 
5.3  启用基础认证 ................................................................................................................ 34 
六、Marathon 之服务发现篇 ...................................................................................................... 35 
DNS 相关概念 .......................................................................................... 35 
6.1 
6.2 Mesos-DNS 介绍 ............................................................................................................ 39 
6.3  Mesos-DNS 安装与配臵 .......................................................................................... 44 
Mesos-DNS 运行 .......................................................................................... 44 
七、Marathon 之负载均衡篇 ...................................................................................................... 47 
7.1 Marathon-Bridge and HAProxy ...................................................................................... 47 
7.2 Bamboo and HAProxy .................................................................................................... 52 
八、  Marathon 之应用迁移篇 .................................................................................................... 57 
6.4 
 
Marathon  说明文档 
一、Marathon 介绍 
中移苏研-邹能人 
Marathon 是一个 mesos 框架,能够支持运行长服务,比如 web 应用
等。是集群的分布式 Init.d,能够原样运行任何 Linux 二进制发布版本,
如  Tomcat Play 等等,可以集群的多进程管理,实现服务的发现,为部
署提供提供 REST API 服务,SSL 与基础认证、配臵约束,通过 HAProxy、
DNS 实现服务发现和负载平衡,可定制化监控策略实现 Task(一个 App
对应多个 Task)的自动扩缩,Dcos 架构与操作系统架构对比如图 1.1 所
示。 
 
图  1.1 Dcos 架构与操作系统架构 
 
Mesos 仅仅是适用于集群的管理,这意味着它可以隔离不同的任务
负载。但是仍然需要额外的工具来帮助工程师查看不同系统上运行的工
作负载。不然的话,如果某些工作负载消耗了所有资源,那么重要的工
作负载可能就难以及时地获得资源。 
Marathon 是一个“元架构”,它可以让 Mesos 和 Chronos 变得更好用,
随着 Mesos 一起运行,并且在运行工作负载的同时提供了更高的可用
性,让用户可以添加资源以及自动的故障转移,如图 1.2 所示。 
图 1.2 Chronos 与 marathon 
 
 
不像 Chronos 在 Mesos 之上调度作业,Marathon 让 Chronos 在 Mesos
的内部进行运行,通过这种方式,Chronos 也变成  Marathon 所管理的一
项工作。Chronos 的优势在于处理和调度 Hadoop 作业和其他短期的任
务,而 Marathon 则可以直接管理  Chronos 和那些长期运行的 Web 服务。
Marathon 甚至可以运行多个实例。 
图 1.3  集群运行三个不同的应用 
 
 
图 1.4  某一节点失联 
从更广的层面而言,像 Marathon 这样的项目将来可能会在 SDN(软
件定义的网络)、存储,甚至是 DCOS(数据中心操作系统)有更大的
作为。 
 
 
 
 
 
 
 
 
 
 
 
 
二、Marathon 之安装指引篇 
 
安装需求: 
Apache Mesos 0.24.0+ 
Apache ZooKeeper 
JDK 
 
 
测试环境 
1.6+ 
节点 
10.133.19.25 
10.134.29.141 
10.134.29.136 
10.134.29.135 
10.134.29.134 
10.134.29.133 
10.134.29.132 
10.134.29.144 
10.134.29.129 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
安装过程 
 
①、安装 Mesos 
角色 
docker 私有镜像库 
dcos 集群部 署 workstation 
mesos-master、zookeeper 
mesos-master、zookeeper 
mesos-master、zookeeper、UI 
mesos-slave 
mesos-slave 
mesos-slave 
mesos-slave 
简单的方法是通过系统的包管理来安装,当然也可以使用源码安装
mesos,具体可以参考 Mesos 官网。 
 
②、安装 Marathon 
通过 Package  Manager,Marathon 可以从软件仓库中下载。 
$ curl -O 
http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz 
$ tar xzf marathon-0.15.2.tgz 
 
③、生产环境下运行 
生产环境下启动 Marathon,需要 ZooKeeper 和 Mesos 同时运行,下面
的命令将会在生产环境中启动 Marathon,将你的 web 浏览器的 localhost
设为 8080,将会看到 Marathon 的界面。 
 
$ 
10.134.29.135:2181,10.134.29.136:2181/mesos 
--zk 
zk://10.134.29.134:2181,10.134.29.135:2181,10.134.29.136:2181/marathon 
Marathon 使用--master 参数去发现 Mesos 的 master 节点,使用--zk 发现
ZooKeeper,因为两者之间相对独立,所以 Mesos  master 节点也使用其
他方式来发现,比如 etcd 等。 
--master zk://10.134.29.134:2181 
./bin/start 
对于 marathon 所有的参数设臵选项,请查看 marathon 之命令行篇。
对于 Marathon 更多的高可用特性,请查阅 marathon 之高可用篇。 
 
④、Mesos Library 
MESOS_NATIVE_JAVA_LIBRARY:通过 bin/start 可以找到通常的安装路
径, /usr/lib 和/usr/local/lib,如果你为链接库设臵了其他路
径,MESOS_NATIVE_JAVA_LIBRAR    需要设臵为其它环境变量,设臵如
下。 
 
$MESOS_NATIVE_JAVA_LIBRARY=/Users/bob/libmesos.dylib ./bin/start
 
--maste 
10.134.29.135:2181,10.134.29.136:2181/mesos   
--zk 
zk://10.134.29.134:2181
10.134.29.135:2181,10.134.29.136:2181/marathon 
zk://10.134.29.134:2181 
 
 
启动应用 
Marathon 应用的介绍以及如何执行,请查阅 Marathon 之应用篇。 
 
 
,
三、Marathon 之应用篇 
  3.1  基础应用 
将下述代码,保存为 shell.json: 
{ 
        "id": "shell",   
        "cmd": "while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done", 
        "cpus": 0.1, 
        "mem": 10.0, 
        "instances": 1 
} 
 
执行下述命令行: 
curl  http://10.134.29.134/v2/apps 
application/json" 
其将 json 文件通过 marathon api /v2/apps 传递给 marathon 调度器,请求
创建一个实例,资源需求为 0.1cpu、10M 内存,执行 shell 命令行。cmd
将被发送给 Mesos 底层执行器进行执行,通过/bin/bash -c ${cmd}。 
 
打开 dcos 控制台,跳转到 marathon 管理界面,如图 3-1 所示,可以看
到名为 shell 的 App 正在运行,App 在 marathon 框架中被定义为长服务,
一对多的关系,即为一个 App 可以有多个 task。 
-H  "Content-type: 
-d  @shell.json 
 
对图 3-1,可以发现 marathon 提供 app 的自动扩展,健康检查以及运行
图  3-1 
 
情况的健康,日志管理等功能。 
marathon 对 app 的生命周期进行有效的管理,首先介绍其自动扩缩功能,
选择 Scale  Application 进行快速扩容,在如图 3-2 中填上 10,即可扩展
到 10 个实例。 
如下图 3-3 所示,shell app 扩展到 10 个实例。 
图  3-2 
 
 
图  3-3 
既然可以扩展,当然也可以销毁,选择你所需销毁的 task,点击 kill  & 
scale 即可,如果点击 kill,marathon 将会继续创建 task 至 10 个为止。 
使用 ps 命令查看 shell 所在节点的进程 ID,使用 lsof 查看该进行打开的
文件,结果如图 3-4 所示。