Mesos&Marathon实现容器部署

mesos&marathon架构说明


Mesos实现了两级调度架构,它可以管理多种类型的应用程序。第一级调度是Master的守护进程,管理Mesos集群中所有节点上运行的Slave守护进程。集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如Hadoop和MPI作业。第二级调度由被称作Framework的“组件”组成。Framework包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器。Mesos能和不同类型的Framework通信,每种Framework由相应的应用集群管理。上图中只展示了Hadoop和MPI两种类型,其它类型的应用程序也有相应的Framework。


Mesos Master协调全部的Slave,并确定每个节点的可用资源, 聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework(作为Master的客户端)发出资源邀约。Framework可以根据应用程序的需求,选择接受或拒绝来自master的资源邀约。一旦接受邀约,Master即协调Framework和Slave,调度参与节点上任务,并在容器中执行,以使多种类型的任务,比如Hadoop和Cassandra,可以在同一个节点上同时运行.

mesos的体系结构和工作流


Slave是运行在物理或虚拟服务器上的Mesos守护进程,是Mesos集群的一部分。

Framework由调度器(Scheduler)应用程序和任务执行器(Executor)组成,被注册到Mesos以使用Mesos集群中的资源。

  • Slave 1向Master汇报其空闲资源:4个CPU、4GB内存。然后,Master触发分配策略模块,得到的反馈是Framework 1要请求全部可用资源。
  • Master向Framework 1发送资源邀约,描述了Slave 1上的可用资源。
  • Framework的调度器(Scheduler)响应Master,需要在Slave上运行两个任务,第一个任务分配<2 CPUs, 1 GB RAM>资源,第二个任务分配<1 CPUs, 2 GB RAM>资源。
  • 最后,Master向Slave下发任务,分配适当的资源给Framework的任务执行器(Executor),接下来由执行器启动这两个任 务(如图中虚线框所示)。 此时,还有1个CPU和1GB的RAM尚未分配,因此分配模块可以将这些资源供给Framework 2。


mesos工作流程

1.集群中的所有slave节点会和master定期进行通信,将自己的资源信息同步到master,master由此获知到整个集群的资源状况

2.mater会和已注册、受信任的Framework进行交互,定期将最新的资源情况发送给Framework,当Framework前端有工作需求时,将选择接收资源,否则拒绝

3.前端用户提交了一个工作需求给Framework

4.Framework接收slave master发过来的资源信息

5.Framework依据资源信息向slave发起任务启动命令,开始调度工作

Mesos是经典的二层架构,Master只负责管理资源,Framework负责任务调度,它们两者都可以直接给slave通信;Master保持着通用性,轻量性,它和Framework、Slave之间的的交互更多的是状态信息同步;在Slave上有两类进程:一类为Manager,用来与Master通信,交互状态信息,另一类则是由Framework实现的具体Executor,它负责任务的运行,对于Manager而言,他看到的所有Executor、Task都是一致的容器,而不管这些任务具体执行什么样的业务逻辑;

最大最小公平算法将最小的资源分配最大化,并将其提供给用户,确保每个用户都能获得公平的资源份额,以满足其需求所需的资源;


mesos&marathon安装说明如下:

服务器角色说明

master ——>192.168.229.128 ——> zookeeper,mesos-master,mesos-slave,marathon,docker
slave1  ——>192.168.229.132 ——> zookeeper,mesos-master,mesos-slave,marathon,docker
slave2  ——>192.168.229.133 ——> zookeeper,mesos-master,mesos-slave,marathon,docker

修改hostname和绑定hosts

echo "master" > /etc/hostname     #192.168.229.128
echo "slave1" > /etc/hostname      #192.168.229.132
echo "slave2" > /etc/hostname      #192.168.229.133
cat /etc/hosts    #三台机器都需要绑定
192.168.229.128 master
192.168.229.132 slave1
192.168.229.133 slave2
重启系统,使之生效

版本说明

mesos-1.0.1
marathon-1.1.1
zookeeper-3.4.6
docker-1.11.2

mesos安装

tar -zxvf mesos-1.0.1.tar.gz
cd mesos-1.0.1
mkdir build
cd build
../configure
make -j8
make check
make install

编译过程中出现的问题:
1.找到libmesos.so文件所在目录,这里是拷贝到/usr/local/lib目录下
2.在/etc/ld.so.conf中加入include /usr/local/lib
3.执行/sbin/ldconfig –v 更行配置文件
find / -name  libmesos-1.0.1.so
vim /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf   #添加
include /usr/local/mesos-1.0.1/build/src/.libs/
/sbin/ldconfig -v

marathon安装

tar -zxvf marathon-1.1.1.tgz
cd  marathon-1.1.1/bin

启动marathon,出现报错内容如下:
mesos-master marathon[3611]: Exception in thread "main" java.lang.UnsupportedClassVersionError: mesosphere/marathon/Main : Unsupported major.minor version 52.0
解决方法:It worked. Marathon needs jdk8.

zookeeper安装

zk的安装和启动不做说明,主要配置文件如下(zoo.cfg):

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
server.1=192.168.229.128:3888:4888
server.2=192.168.229.132:3888:4888
server.3=192.168.229.133:3888:4888

安装到此完成;

mesos master启动

192.168.229.128上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin &&./mesos-master.sh --ip=192.168.229.128 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas   

192.168.229.132上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.132 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas 

192.168.229.133上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.133 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas

mesos slave启动

192.168.229.128上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=master --ip=192.168.229.128 --work_dir=/data1/mesos_slave1/

192.168.229.132上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=slave1 --ip=192.168.229.132 --work_dir=/data1/mesos_slave1/

192.168.229.133上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=slave2 --ip=192.168.229.133 --work_dir=/data1/mesos_slave1/

marathon启动

192.168.229.128上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon

192.168.229.132上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon

192.168.229.133上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon


使用说明

1.打开http://192.168.229.132:5050/#/ 查看

这里可以看到我们定义cluster为我们定义的paas,master server地址:192.168.229.128:5050 ,无论我们进入master,slave1,slave2 这三台任意一台中master server的地址都为192.168.229.128,这里是通过zk选举的master,如果128 挂掉后,master server会被其他服务器取代

2.查看slave资源情况

3.查看Frameworks页面,可以看到现在frameworks使用的是marathon  slave1主机,同mesos master一样,这里无论marathon任何一个down掉,其他的marthon都会顶上,也是使用zk来做选举,点击slave1,即可跳转到marathon管理界面

4.访问marathon管理界面

5.创建一个docker应用,创建5个instances(前提:已将docker image存放在3台机器上,可以直接run)

点击Create Application 完成应用的创建,然后查看状态已为Runing

查看5个详细实例

点击slave1:31289,跳转到对应的应用中

到此应用部署成功,当然这些实例也可以做伸缩,具体的操作,请查阅相关文档。

Mesos&Marathon实现容器部署

时间: 2024-10-12 12:21:11

Mesos&Marathon实现容器部署的相关文章

[经验交流] 在 Mesos Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

关于 Docker 容器的监控,google cAdvisor 是个很好的工具,但是它默认只显示实时数据,不储存历史数据.为了存储和显示历史数据.自定义展示图,可以把将cAdvisor与InfluxDB.Grafana 集成起来,国外的专家 Brian Christner 写了一篇文章”How to setup Docker Monitoring“,描述了部署方法. Brian 的方法是手动运行 docker run 命令进行部署,为了能在 Mesos Marathon 平台上自动部署,我对他的

Docker云Paas平台部署:Docker+Mesos+Marathon

针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发展,又给大规模集群管理带来了新的想象空间. 如何将二者进行有效地结合? 本人将以实验的角度来部署mesos + marathon的docker集群 一.谈谈mesos Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开

mesos 集群安装部署marathon(4)

############################################################### 配置 marathon 服务 ############################################################### Marathon:marathon是一个mesos框架,能够支持运行长服务,比如web应用等.是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat Play等等,可以集群的多进程管理

mesos+marathon管理docker集群

服务器架构 主机名 IP 安装服务 mesos-master 192.168.56.7 docker.mesos-master.mesos-slave.marathon.zookeeper mesos-slave 192.168.56.8 docker.mesos-slave.zookeeper 系统环境 # uname -r 3.10.0-229.el7.x86_64 # cat  /etc/redhat-release CentOS Linuxrelease 7.1.1503 (Core)

Mesos+Marathon docker 集群管理

前面我们了解了docker常见的操作和部署方法,在企业中,如果要大规模使用docker就不能通过纯手工的方式去维护和部署了.目前比较流行的有两种解决方案,一种是使用 Mesos+Marathon+docker的方式对集群中的容器进行管理,另一种方式是使用Kubernetes,就目前Kubernetes有引领行业的趋势,但是对于小型的集群管理,mesos符合传统主从架构,更加简单. Mesos介绍 Mesos容器管理的理念个人觉得类似于OpenStack, 通过master将整个集群的资源搜集起来

Mesos+Kubernetes集成安装部署

因为Docker本身没有提供集群管理能力,对于docker集群一台台的登陆操作不太现实,因此需要引进容器集群的管理工具,主流的有mesosphere的marathon.谷歌的Kubernetes.docker社区的swarm,目前成熟度最高的是Kubernetes.Kubernetes是Google开源的容器集群管理系统,其提供应用部署.维护. 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下: 使用Docker对应用程序包装(package).实例化(

kubernetes 和 mesos + marathon的对比

Kubernetes概述 根据Kubernetes网站的说法,“Kubernetes是一个自动化,容器化应用程序部署扩展和管理的开放源代码系统.”Kubernetes由Google根据他们在生产中运行容器的经验使用称为Borg的内部集群管理系统(有时简称Omega). Kubernetes的体系结构依赖于这种经验,如下所示: 从上图可以看出,有一些与Kubernetes集群相关的组件.主节点将容器工作负载放置在工作节点.其他组件包括: etcd:该组件存储配置数据,可以通过简单的HTTP或JSO

【转】Singularity:基于Apache Mesos构建的服务部署和作业调度平台

Singularity是一个在云基础设施中部署和运行服务和计划作业的平台,同时也是HubSpot PaaS的核心组件.它能够高效地管理底层进程的生命周期,并有效地利用集群资源.它可以作为持续部署基础设施的基本组成部分,而且是微服务部署的理想选择.它不仅能够管理数以百计的服务器上运行着的数以千计的进程,而且还提供了如下开箱即用的特性: 丰富的REST API,既有用于部署的,也有用于获取活动部署和历史部署信息的: Web应用客户端(Singularity UI)使用上述API向用户提供所有可获得信

一步一步搭建ZooKeeper + Mesos + Marathon平台管理Docker集群

最近在Youtube看Docker视频的过程中不幸看到了Mesos的介绍,然后就有一种一见如故的感觉,最终根据mesosphere官网的文档在IBM的Bluemix虚拟机上搭建了基于ZooKeeper + Mesos + Marathon的平台. 搭建之前先简单了解下各个组件是做什么的.(来自wikipedia及其他网络) ZooKeeper:Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.