Mesos是Apache开源的分布式集群管理器,和Google的集群管理系统Borg类似,负责在集群层面管理任务的编排工作。 Mesos将所有资源汇聚到一个单独的资源池中以避免静态划分,通过在多种框架之间动态共享资源来优化资源的使用率。 通过Mesos,我们可以把整个数据中心当作一台的机器来使用,Mesos可以看作是数据中心的内核。

Mesos主要组成部分

Mesos的整体架构可以查看官方文档http://mesos.apache.org/documentation/latest/architecture/。 主要由如下几部分组成:

  • Mesos master:master的职责是管理集群中在每台机器上运行的Mesos slave守护进程,master负责在slave资源和framework之间进行调度。只会有一个活动的master节点,由ZooKeeper选举产生,其他master节点作为备用处于待命状态。
  • Mesos slave:salve管理集群单个节点上的资源(包括cpus,mem,disk,ports等),同时执行framework提交的任务task。
  • frameworks:框架是运行在Mesos上的应用程序,每种框架的存在都是为了解决某种特定的问题,如长时间运行的服务、批处理、流处理、实时分析等等。框架由调度器scheduler和执行器executor组成。 调度器注册到mesos master获取集群的资源,执行器在mesos slave节点上执行任务。

mesos-architecture

Mesos master

Mesos master主要负责给各个框架分配资源并管理框架任务的生命周期。master节点使用可插拔的分配模块或调度算法来讲资源分配到各种调度器,从而决定将资源提供给某个framework。 Mesos master使用资源offer实现跨应用的细粒度的资源分配。 作为资源的调度者,Mesos master支持各种策略(如公平共享策略、优先级策略),根据这些策略将资源以offer的形式提供给框架。

Mesos slave

Mesos slave负责利用已有资源执行框架提交的任务,并对任务进行资源隔离,确保每个任务获得所承诺的资源。 Mesos slave通过访问ZooKeeper来确定主master节点,同时将CPU、内存、磁盘等资源信息以资源的形式宣告给master节点。

slave上的资源使用resource和attribute来表示。resource是任务执行时消耗的元素,attribute用来表示某个slave节点具体特殊的信息(可以是机器所处的位置例如机柜编号、特别的硬件、特别的操作系统或软件、特别的网络环境等等)。 reousce和attribute都表示简单的键值对,每次向框架提供资源offer时都会传递这些属性,各个框架具体的实现负责对这些属性的解析使用。

resource和attribute的值包含以下类型:

  • scalar(标量): 浮点数
  • range(范围): 一组标量,以[最小值-最大值]表示
  • set(集合): 任意的字符串集合
  • text(文本):任意字符串

Mesos默认预定义了以下资源cpu, gpu, mem, disk, ports,某台机器上的slave启动时会自动探测可用资源数,其中mem和disk以MB为单位。

另外可以显示的通过–resources和–atrribute显示配置slave节点的可用资源。更多内容参考官方文档http://mesos.apache.org/documentation/latest/attributes-resources/

frameworks

框架就是运行在Mesos之上的应用程序。框架由调度器scheduler和执行器executor组成。每个框架会运行很多任务,任务是资源的最终消费者。

Mesos官方文档http://mesos.apache.org/documentation/latest/frameworks/介绍了一些常用框架。 其中包含属于Long Running Services的Marathon和Batch Scheduling的Chronos。