docker构建PaaS平台理论知识

 

mesos 集群资源管理框架(以集群的形式出现,主决定资源的分配,从负责执行executor),分配资源,提供offer给framework,不负责调度资源,千言万语都在这里了mesos的设计结构

marathon 是mesos的framework,容器编排系统,保证长时间的运行任务,类似后台执行或者supervisor。

zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置管理维护、域名服务、分布式同步、组服务、健康检查,HA等。
Chronos是一个运行在Mesos之上的具有分布式容错特性的作业调度器。在Airbnb公司,它是cron的替代品。与cron相比,Chronos在很多方面具备优势。比如,它支持ISO8601标准,允许更灵活地定义调度时间;Chronos也支持任务依赖,即一个作业的开始依赖于一些任务的完成,和marathon一样都是听从mesos的指令,给mesos搬砖的。

consul经常拿来和etcd、 zookeeper来对比,他有和etcd一样的服务发现、服务注册功能,也有和etcd、zookeeper一样的配置存储功能,详细的对比在此不再列出。

Registrator是一个独立于服务注册表的自动服务注册/注销组件,一般以容器的方式进行部署。会自动侦测它所在的宿主机上的所有 容器状态(启用/销毁),并根据容器状态到对应的服务注册列表注册/注销服务。去除了需要手动管理Consul服务条目的复杂性,它监视容器的启动和停止,根据容器暴露的端口和环境变量自动注册服务。

 

Apache Mesos概述:

Apache Mesos:Apache-Mesos是一款基于多资源(内存、CPU、磁盘、端口等)调度的开源集群管理套件,能使容错和分布式系统更加容易使用。官方网站http://mesos.apache.org/ ,软件能够自由下载使用;

Apache-Mesos采用Master/Slave结构来简化设计,将Master做得尽可能轻量级,仅保存各种计算框架(Framework)和Mesos Slave的状态信息,这些状态很容易在Mesos出现故障的时候被重构,除此之外Mesos还使用Zookeeper解决Master单点故障的问题;

Apache Mesos专业术语:

Mesos Master:负责管理各个Framework和Slave,并将Slave上的资源分配给各个Framework;

Mesos Slave:负责管理本节点上的各个Mesos Task,为各个Executor分配资源;

Framework:计算机框架,如:Hadoop、Spark等,可以通过MesosSchedulerDiver接入Mesos;

Executor:执行器,在Mesos Slave上安装,用于启动计算框架中的Task

Apache Mesos处理流程:

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

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

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

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

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

zookeeper概述:

ZooKeeper是用来给集群服务维护配置信息,提供分布式同步和提供组服务。所有这些类型的服务都使用某种形式的分布式应用程序。ZooKeeper是一个分布式的,开放源码的协调服务,是Hadoop和Hbase的重要组件,在此zookeeper与mesos结合实现为mesos的master保证其单点故障问题;

ZooKeeper角色

领导者(leader):领导者负责投票发起和决议,更新系统状态;

跟随者(follwoer):follower用于接收客户请求并向客户端返回结果,在选主过程参与投票;

观察者:ObServer可以接受客户端连接,将写请求转发给leader节点,但ObServer不参加投票过程,只同步leader的状态,ObServer的目的是为了拓展系统,提高读取速度;

客户端:请求发起方;

 

 Marathon概述:

是一个mesos框架,能够支持运行长服务,可以实现通过web页面或者api接口实现部署应用,比如web应用等。也是一种私有的Paas,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束; 

 

事实上, 通过读取同一台宿主机的其他容器 的环境变量进行服务注册健康检查定义等操作,支持可插拔式服务注册表配置。

mesos架构:

架构图可以看出mesos主要两部分主和从 ,主集群依靠zookeeper。

架构图展示了Mesos的重要组成部分,Mesos由一个master进程管理运行着每个客户端节点的slave进程和跑任务的Mesos计算框架。

Mesos进程通过计算框架可以很细致的管理cpu和内存等,从而提供资源。每个资源提供都包含了一个清单(slave ID,resource1:amount1,resource2,amount2,…)master会根据现有的资源决定提供每个计算框架多少资源。例如公平分享或者根据优先级分享。

为了支持不同种的政策,master通过插件机制新增额一个allocation模块使之分配资源更简单方便。

一个计算框架运行在两个组建之上,一个是Scheduler,他是master提供资源的注册中心,另一个是Executor程序,用来发起在slave节点上运行计算框架的任务。master决定给每个计算框架提供多少计算资源,计算框架的调度去选择使用哪种资源。当一个计算框架接受了提供的资源,他会通过Mesos的任务描述运行程序。Mesos也会在相应的slave上发起任务。

Mesos是Apache下的开源分布式资源管理框架,它被称为分布式系统的内核。Mesos最初是由加州大学伯克利分校的AMPLab开发,后在Twitter得到广泛使用。

Mesos-Master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework。

Mesos-Slave:负责管理本节点上的各个mesos-task,比如:为各个executor分配资源。

Framework:计算框架,如:Hadoop、Spark、Kafaka、ElasticSerach等,通过MesosSchedulerDiver接入Mesos

Executor:执行器,就是安装到每个机器节点的软件,这里就是利用docker的容器来担任执行器的角色。具有启动销毁快,隔离性高,环境一致等特点。

Mesos-Master是整个系统的核心,负责管理接入Mesos的各个framework(由frameworks_manager管理)和slave(由slaves_manager管理),并将slave上的资源按照某种策略分配给framework(由独立插拔模块Allocator管理)。

Mesos-Slave负责接受并执行来自Mesos-master的命令、管理节点上的mesos-task,并为各个task分配资源。Mesos-slave将自己的资源量发送给mesos-master,由mesos-master中的Allocator模块决定将资源分配给哪个framework,当前考虑的资源有CPU和内存两种,也就是说,Mesos-slave会将CPU个数的内存量发送给mesos-master,而用户提交作业时,需要指定每个任务需要的CPU个数和内存。这样:当任务运行时,mesos-slave会将任务放导包含固定资源Linux container中运行,以达到资源隔离的效果。很明显,master存在单点故障问题,为此:Mesos采用了Zookeeper解决该问题。

Framework是指外部的计算框架,如果Hadoop、Mesos等,这些计算框架可通过注册的方式接入Mesos,以便Mesos进行统一管理和资源分配。Mesos要求可接入的框架必须有一个调度模块,该调度器负责框架内部的任务调度。当一个framework想要接入Mesos时,需要修改自己的调度器,以便向Mesos注册,并获取Mesos分配给自己的资源,这样再由自己的调度器将这些资源分配给框架中的任务,也就是说,整个Mesos系统采用了双层调度框架:第一层,由Mesos将资源分配给框架。第二层,框架自己的调度器将资源分配给自己内部的任务。当前Mesos支持三中语言编写的调度器,分别是C++、Java、Python。为了向各种调度器提供统一的接入方式,Mesos内部采用C++实现了一个MesosSchedulerDriver(调度驱动器),framework的调度器可调用该driver中的接口与Mesos-master交互,完成一系列功能(如注册,资源分配等。)

Executor主要用于启动框架内部的task。由于不同的框架,启动task的接口或者方式不同,当一个新的框架要接入mesos时,需要编写一个Executor,告诉Mesos如何启动该框架中的task。为了向各种框架提供统一的执行器编写方式,Mesos内部采用C++实现了一个MesosExecutorDiver(执行器驱动器),framework可通过该驱动器的相关接口告诉Mesos启动task的方式。

mesos运行流程:

流程步骤:

1、slave1报告给master他拥有4核cpu和4G剩余内存,Marathon调用allocation政策模块,告诉slave1计算框架1应该被提供可用的资源。

2、master给计算框架1发送一个在slave上可用的资源描述。

3、计算框架的调度器回复给master运行在slave上两个任务相关信息,任务1需要使用2个CPU,内存1G,任务2需使用1个CPU,2G内存。

4、最后,master发送任务给slave,分配适当的给计算框架执行器,继续发起两个任务(图1.1-2虚线处),因为任有1个CPU和1G内存未分配,allocation模块现在或许提供剩下的资源给计算框架2。

除此之外,当任务完成,新的资源成为空闲时,这个资源提供程序将会重复

 

 

猜你喜欢

转载自blog.csdn.net/Richardlygo/article/details/82814434