Mesos 资源分配

众所周知, Mesos在运行时使用wDRF( Dominant Resource Fairness)算法进行一级资源分配, 通过应用程序(Framework)运行时使用资源进行二级资源调度。以此来达到资源分配的公平性和灵活性。但在资源有限的情况下,对于尚未部署的程序如何分配资源?为此Mesos提供了两种方式,基于指定节点(Agent)的资源预留(reserve)和基于整个集群的资源配额(quota)。这种资源管理方式间接的划分了整个集群的资源。

附:其中 --weights 参数已不被推荐使用。

1. 资源预留 (reserve & unreserve)

resource reserve 针对 具体的节点(agent)进行,在启动或运行期间通过master对某个agent进行操作。

Mesos在 0.14.0版本中加入了静态资源预留功能,在 0.23.0 版本中加入了动态资源预留功能。所谓静态即在节点加入集群时进行配置且运行后不能修改, 动态即运行时配置并修改(资源预留、取消资源预留)。这两种方式都基于角色(Role)来完成。同时为了保证角色的使用,提供了ACL和认证/授权。

1.1 静态资源预留

静态资源预留可以分为两种方式(层次、颗粒度)。粗颗粒度是节点层面,细颗粒度是CPU、Mem等。粗粒度的本质还是细粒度,只是由内部实现绑定各类资源的全部份额。
其配置方式通过在agent启动时 --resources指定,如: --resources="cpus:4;mem:2048;cpus(ads):8;mem(ads):4096"
即 为ads角色保留8 cpus和4g mem。

1.2 动态资源预留

动态资源预留可以由Framework或User来执行。Framework可以在收到资源的时候调用reserve来保留。User或其他管理工具,可以调用http接口来完成。如

curl -i       -u <operator_principal>:<password>       -d slaveId=<slave_id>       -d resources=‘[
        {
          "name": "cpus",
          "type": "SCALAR",
          "scalar": { "value": 8 },
          "role": "ads",
          "reservation": {
            "principal": <operator_principal>
          }
        },
        {
          "name": "mem",
          "type": "SCALAR",
          "scalar": { "value": 4096 },
          "role": "ads",
          "reservation": {
            "principal": <operator_principal>
          }
        }
      ]‘       -X POST http://<ip>:<port>/master/reserve

1.3 节点层面

每个节点都有一个默认角色, 通过 启动时的 --default_role 参数控制, 默认值为*, 这是一个特殊标识,标识该资源未被保留,任何未指定role的Framework可以使用该资源,同时这些资源也可以通过动态保留接口来分配给其他指定的role。在节点启动时也可以指定其他默认角色,如slave_public,角色名需要符合规范(不能包含空白字符, 符合Linux目录命名规则,参见代码common/roles.cpp 或文档invalid roles

输入的角色名应该在白名单中,即master启动时指定的--roles参数中。在0.27版本以后,该参数没有指定值时,可以输入任何角色名。同时配合ACL,保障角色被授权使用。

1.4 Role 层面

对于空的whitelist,即未指定白名单时,role可以为任何符合命名规则的值。

1.5 Framework层面

目前Framework和Role是多对一。未来可以支持多对多的关系,即一个Framework可以使用多个role,一个role也可以被多个Framework使用。参见 issue, 消息代码 mesos.proto
Framework对role的设置则通过acl来进行控制。

2. 资源配额 (quota)

同资源预留,配额也基于Role进行。配额为role分配在整个集群中的资源,而不具体到指定的节点上。配额包含已经通过reserve在某些节点上进行预留的资源。配额不能被Framework的API调用操作,只能通过http接口操作(配合ACL来授权调用)。

配额目前支持添加、查询、删除。具体参见文档 quota

由于配额是在运行期间设置,对于已经被Framework给占用的资源,是无法剥夺的,除非Framework运行结束。因此为配额预留的资源不会分给使用其他role运行的Framework。

配额不能针对端口这种资源。目前,Mesos只提供配额的绝对值的最小设置方式(也就是说不能提供相对比例的最大分配)。在资源充足的情况下,可以超过配额限制的资源。

3 ACL & Authorization

ACL为以上操作提供鉴权,ACL提供了两种实现方式,local模式和custom模式。使用哪种模式由参数--authorizers指定,默认值为local。local模式通过在master启动时指定--acls来进行配置。对于custom模式,则需要编写mesos的module,在启动时加载。

local规则和custom authorizer,参见文档acl

4 authentication

Mesos默认使用sasl框架来进行用户认证,也可以通过加装自定义的认证模块来修改认证方式。

Authentication默认不启用。

时间: 2024-11-03 21:28:23

Mesos 资源分配的相关文章

CI集成 mesos 资源分配的思考, 待续

读了mesos的论文(https://people.eecs.berkeley.edu/~alig/papers/mesos.pdf ),感觉应用在 CI 上的资源管理很赞,能够解决 jenkins在构建中,分配 executor 以及 executor 在building 的时候 hang 的问题,所以装了一个来试一下. 首先是先装 mesos 了,官网 1.3.0 rpm -Uvh http://repos.mesosphere.com/el/6/noarch/RPMS/mesosphere

深入浅出Mesos(四):Mesos的资源分配

http://www.infoq.com/cn/articles/analyse-mesos-part-04 [编者按]Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开发的,后在Twitter得到广泛使用.InfoQ接下来将会策划系列文章来为读者剖析Mesos.本文是整个系列的第一篇,简单介绍了Mesos的背景.历史以及架构. 注:本文翻译自Cloud Architect Musings,InfoQ中文站在获得作

Mesos的资源分配

Apache Mesos能够成为最优秀的数据中心资源管理器的一个重要功能是面对各种类型的应用,它具备像交警一样的疏导能力.本文将深入Mesos的资源分配内部, 探讨Mesos是如何根据客户应用需求,平衡公平资源共享的.在开始之前,如果读者还没有阅读这个系列的前序文章,建议首先阅读它们.第一篇是Mesos的概述,第二篇是两级架构的说明,第三篇是数据存储和容错. 我们将探讨Mesos的资源分配模块,看看它是如何确定将什么样的资源邀约发送给具体哪个Framework,以及在必要时如何回收资源.让我们先

颠覆大数据分析之Mesos:集群调度及管理系统

正如前面"Mesos:动机"一节中所述,Mesos的主要目标就是去帮助管理不同框架(或者应用栈)间的集群资源.比如说,有一个业务需要在同一个物理集群上同时运行Hadoop,Storm及Spark.这种情况下,现有的调度器是无法完成跨框架间的如此细粒度的资源共享的.Hadoop的YARN调度器是一个中央调度器,它可以允许多个框架运行在一个集群里.但是,要使用框架特定的算法或者调度策略的话就变得很难了,因为多个框架间只有一种调度算法.比如说,MPI使用的是组调度算法,而Spark用的是延迟

Mesos&Marathon实现容器部署

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

Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开发,后在Twitter得到广泛使用. Mesos-Master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework. Mesos-Slave:负责管理本节点上的各个mesos-task

Mesos架构简介

1. 前言 同其他大部分分布式系统一样,Apache Mesos为了简化设计,也是采用了master/slave结构,为了解决master单点故障,将master做得尽可能地轻量级,其上面所有的元数据可以通过各个slave重新注册而进行重构,故很容易通过zookeeper解决该单点故障问题. (什么是apache mesos?参考:<统一资源管理与调度平台(系统)介绍>,本文分析基于Mesos SVN Revision 1327410) 2. Apache mesos中的基本术语解释 (1) 

Mesos原理与代码分析(5): Mesos Master的启动之四

? 5. Create an instance of allocator. ? 代码如下 ? Mesos源码中默认的Allocator,即HierarchicalDRFAllocator的位置在$MESOS_HOME/src/master/allocator/mesos/hierarchical.hpp,而DRF中对每个Framework排序的Sorter位于$MESOS_HOME/src/master/allocator/sorter/drf/sorter.cpp,可以查看其源码了解它的工作原

Mesos资料收集(持续更新)

深入浅出Mesos(一):为软件定义数据中心而生的操作系统 深入浅出Mesos(二):Mesos的体系结构和工作流 深入浅出Mesos(三):持久化存储和容错 深入浅出Mesos(四):Mesos的资源分配