[Mesos]Mesos和Marathon简介和浅析

一、Mesos和Marathon是什么

1.1Mesos是什么

Mesos是什么呢,可以用这样一个例子进行说明。假定某公司需要频繁进行大数据计算,该任务运行时需要N多个CPU和内存,为了满足这个需求,有两种方案:
1.使用小型服务器,为任务提供足够的资源。
2.采用分布计算,即提供一批普通配置的机器,组成集群,将计算任务拆分到各个机器上计算,然后汇总结果。
Mesos就是实现这类分布式计算的框架,在分布式计算过程中,Mesos会对上述计算机资源进行管理和分配。
1.2 Marathon是什么
Marathon按照官方的说法是基于Mesos的私有PaaS,它实现了Mesos的Framework。Marathon实现了服务发现和负载平衡、为部署提供REST API服务、授权和SSL、配置约束等功能。Marathon支持通过Shell命令和Docker部署应用。提供Web界面、支持cpu/mem、实例数等参数设置,支持单应用的Scale,但不支持复杂的集群定义。Marathon能够支持运行长服务,比如Web应用等。Marathon能够原样运行任何Linux二进制发布版本,比如Tomcat Play等。
1.3 Mesos和Marathon的关系
如果将Mesos类比为操作系统的内核,负责资源调度。则Marathon可以类比为服务管理系统,比如init,systemd或upstart等系统,用来管理应用的状态信息。Marathon将应用程序部署为长时间运行的Mesos任务。

二、Mesos框架简介
在Mesos的框架中存在如下基本概念:

Mesos-matser: 协调全部的slave,并确定每个节点的可用资源,聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework发出资源邀约。
Mesos-slave:向Master汇报自己的空闲资源和任务的状态,负责管理本节点上的各个mesos-task,在framework成功向Master申请资源后,收到消息的slave会启动相应framework的executor。
Framework:Hadoop,Spark等,通过MesosSchedulerDriver接入Mesos。Framework由两部分组成,调度器(Scheduler)和执行器(Executor)。Scheduler在master上注册,获取提供的资源,Executor进程在slave节点上启动,运行framework的任务。
Executor:执行器,用于启动计算框架中的task。
2.1 Mesos框架图如下图所示:
在框架图中framework有两种,一种是Hadoop;一种是MPI。从框架图中可以看出,Mesos是一个master/slave结构,其中master根据调度策略(比如公平调度和优先级方式),来决定将slave节点上的空闲资源(比如:CPU、内存或磁盘等)的提供给framwork使用。另外Mater会保存framework和mesos slave的一些状态,这些状态可用通过framework和slave重新注册来进行重构,因此可用使用zookeeper来解决mesos matser单点故障的问题。slave主要功能是向Mater汇报任务状态和启动framwork的executor。

  2.2 Mesos业务逻辑流程

 Mesos的框架图的逻辑流程分为如下四步:

第一步,Slave1节点向master报告它有空闲资源4个CPU和4GB内存。
第二步,Master发送一个Resource Offer给Framework1来描述Slave1有多少可用资源。
第三步,FrameWork1中的FW Sheduler会答复Master,有两个task需要运行在Slave1,一个Task需要< 2个cpu,1gb内存>,另一个Task需要< 1个cpu,2gb内存>
第四步,Master将任务需求资源发送给Slave1,Slave1分配适当的资源给Framework1的Executor,然后executor开始执行这两个任务,因为Slave1还剩< 1CPU,1gb内存>的资源未分配,分配模块还可用将这些资源提供给Framwork2来使用。
三、Marathon简介
Marathon是基于MesosFramework的开源框架,框架图可参考如下。Marathon可以指定每个应用程序需要的资源以及要运行此程序需要多少实例。它可以使用的集群资源对失败的任务自动做出响应。
如果某个Mesos Slave宕机或应用的某个实例退出、失败,Marathon将会自动启动一个新的实例,来替换掉失败的实例。Marathon也允许用户在部署时指定应用程序彼此间的依赖关系,这样就可以保证某个应用程序实例不会在它依赖的数据库实例启动前启动。

Marathon提供对外的API接口函数,比如:

curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" 
localhost:8080/v2/apps -d '{
"container": {"image": "docker:///libmesos/ubuntu", "options": ["--privileged"]},
"cpus": 0.5,
"cmd": "sleep 500",
"id": "docker-tester",
"instances": 1,
"mem": 300
}'

2.通过Marathon Rest API检查启动任务的状态

curl -X GET -H "Content-Type: application/json" localhost:8080/v2/apps

原文链接:https://blog.csdn.net/polo2044/article/details/84567848

原文地址:https://www.cnblogs.com/Swetchine/p/11943357.html