Apache Mesos

Mesos

Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.

Mesos is built using the same principles as the Linux kernel, only at a different level of abstraction. The Mesos kernel runs on every machine and provides applications (e.g., Hadoop, Spark, Kafka, Elastic Search) with API’s for resource management and scheduling across entire datacenter and cloud environments.

Apache Mesos是一个集群管理器,可为跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它可以在动态共享节点池上运行许多应用程序
Apache Mesos将CPU,内存,存储和其他计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统能够轻松构建并有效运行。

Mesos 的架构

在这里插入图片描述

Mesos业务逻辑流程

在这里插入图片描述
Mesos的框架图的逻辑流程分为如下四步:

  1. Slave1节点向master报告它有空闲资源4个CPU和4GB内存。
  2. Master发送一个Resource Offer给Framework1来描述Slave1有多少可用资源。
  3. FrameWork1中的Sheduler会答复Master,有两个task需要运行在Slave1,一个Task需要< 2个cpu,1gb内存>,另一个Task需要< 1个cpu,2gb内存>
  4. Master将任务需求资源发送给Slave1,Slave1分配适当的资源给Framework1的Executor,然后executor开始执行这两个任务,因为Slave1还剩< 1CPU,1gb内存>的资源未分配,分配模块还可用将这些资源提供给Framwork2来使用。

Marathon简介

Marathon是基于Mesos Framework的开源框架,能够支持运行长服务,比如web应用等。是集群的分布式Init.d,能够运行在任何Linux二进制发布版本,如Tomcat Play等等,可以集群的多流程管理。也是一种私有的PAAS,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。
Marathon可以指定每个应用程序需要的资源以及要运行此程序需要多少实例。它可以使用的集群资源对失败的任务自动做出响应。如果某个Mesos Slave宕机或应用的某个实例退出、失败,Marathon将会自动启动一个新的实例,来替换掉失败的实例。Marathon也允许用户在部署时指定应用程序彼此间的依赖关系,这样就可以保证某个应用程序实例不会在它依赖的数据库实例启动前启动。
在这里插入图片描述

Mesos 和 Marathon 实践

请参考 https://blog.51cto.com/13643643/2162906

安装

  1. 在master 机器上安装mesos
  2. 安装zookeeper集群,配置zookeeper 和 mesos 关联的配置文件zoo.cfg:
dataDir=/home/q/zookeeper/data
dataLogDir=/home/q/zookeeper/datalog          //手动创建/data /datalog目录
server.1=172.16.10.28:2888:3888
server.2=172.16.10.44:2888:3888
server.3=172.16.10.45:2888:3888                    //2888为信息交互端口,3888为选举端口

在三台服务器上安装zookeeper软件,然后启动服务,在服务开启完成之后就会开始选取zookeeper 的leader
3. 部署mesos 集群:
安装完成zookeeper之后,zookeeper选举出的zookeeper的leader会帮助mesos选举mesos的leader,确定多master环境中,谁处于actived,又有哪些master是处于standby状态。就是说,在接下来分派任务时,三台master会去找zookeeper的leader询问,谁是主,谁来负责分派任务。
通过开启mnesos-master服务,就可以访问http://172.16.10.28:5050

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://172.16.10.28:2181/mesos --quorum=2
//在master1上执行,在编译安装完成之后,系统会自动识别该命令,不需要创建软连接即可直接使用
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://172.16.10.44:2181/mesos --quorum=2
//在master2上执行
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://172.16.10.45:2181/mesos --quorum=2
//在maseter3执行,地址为master3地址
  1. 安装mesos-slave 并开启服务:
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --no-hostname_lookup --ip=0.0.0.0
  1. 在master1上安装并开启marathon服务:
//开启服务
./bin/start --hostname 172.16.10.28 --master zk://172.16.10.28:2181,172.16.10.44:2181,172.16.10.45:2181/mesos --http_address 0.0.0.0
  1. 测试marathon 和 mesos联合工作:
    a) 访问网页创建test任务
    b) 通过marathon rest api 创建 app:
    在这里插入图片描述
curl -X POST -H "Content-type:application/json" http://172.16.10.28:8080/v2/apps [email protected]

猜你喜欢

转载自blog.csdn.net/qq_21222149/article/details/89098210