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默认不启用。参见文档authentication

mesos 资源分配的更多相关文章

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

    读了mesos的论文(https://people.eecs.berkeley.edu/~alig/papers/mesos.pdf ),感觉应用在 CI 上的资源管理很赞,能够解决 jenkins在 ...

  2. Mesos的资源分配

    Apache Mesos能够成为最优秀的数据中心资源管理器的一个重要功能是面对各种类型的应用,它具备像交警一样的疏导能力.本文将深入Mesos的资源分配内部, 探讨Mesos是如何根据客户应用需求,平 ...

  3. mesos概述

    mesos解决的问题 不同的分布式运算框架(spark,hadoop,ES,MPI,Cassandra,etc.)中的不同任务往往需要的资源(内存,CPU,网络IO等)不同,它们运行在同一个集群中,会 ...

  4. 《Spark 官方文档》在Mesos上运行Spark

    本文转自:http://ifeve.com/spark-mesos-spark/ 在Mesos上运行Spark Spark可以在由Apache Mesos 管理的硬件集群中运行. 在Mesos集群中使 ...

  5. 资源管理与调度系统-资源管理系统Mesos

    资源管理与调度系统-资源管理系统Mesos 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Mesos是诞生于UC Berkeley的一个研究项目,它的设计动机是解决编程模型和计算框 ...

  6. Mesos

    1. 软件定义数据中心 Mesos的二级调度机制: maseos协调每个节点的slave,获取每个节点的机器资源.获取资源后,在相应节点运行framework,在容器中执行任务.从而使得多种类型的服务 ...

  7. [经验交流] Apache Mesos Docker集群初探

    前言 因工作需要,我对基于Apache Mesos 的 Docker 集群作了一点研究,并搭建了一套环境,以下是资料分享. 1. Apache Mesos概述 Apache Mesos是一款开源群集管 ...

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

    针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发 ...

  9. spark on mesos 两种运行模式

    spark on mesos 有粗粒度(coarse-grained)和细粒度(fine-grained)两种运行模式,细粒度模式在spark2.0后开始弃用. 细粒度模式 优点 spark默认运行的 ...

随机推荐

  1. 翻译的很好的一篇android mediaplayer

    MediaPlayer类可用于控制音频/视频文件或流的播放.关于如何使用这个类的方法还可以阅读VideoView类的文档. 1.状态图对播放音频/视频文件和流的控制是通过一个状态机来管理的.下图显示一 ...

  2. C语言写的俄罗斯方块

    源:C语言写的俄罗斯方块 2014年最后一天, 任天堂将风靡全球30年的经典游戏<<俄罗斯方块>>下架. 作为全球最畅销的游戏, 其移植版本遍布各个平台. 下面这个是我去年在5 ...

  3. 搭建git服务器及利用git hook自动布署代码

    注意:服务器:Ubuntu Server 14.04,我的项目比较小,所有操作都使用root,建议最好新建一个用户(需要有管理员权限,否则在后面使用hooks自动部署代码时会出现各种权限问题,很蛋疼的 ...

  4. Hibernate---基础配置

    hibernate.cfg.xml里可以设置一个值显示更详细的sql语句: <property name="format_sql">true</property& ...

  5. Extjs5.0中的新特性

    We are excited that Ext JS 5 is now available! Ext JS 5 introduces many new and exciting improvement ...

  6. 设计模式笔记之二:Android开发中的MVP架构(转)

    写在前面,本博客来源于公众号文章:http://mp.weixin.qq.com/s?__biz=MzA3MDMyMjkzNg==&mid=402435540&idx=1&sn ...

  7. js实现从字符串中查找出现次数最多的字符的两种解决办法

    方法一:正则表达式匹配 var str = "adadfdfseffserfefsefseeffffftsdg"; ; var result = ""; whi ...

  8. 使用spol导出exce

    sqlplus 能生产xls的excel文件 connect / as sysdba; SET NEWPAGE 0 SET SPACE 0 SET LINESIZE 80 SET PAGESIZE 0 ...

  9. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  10. JavaScript实用功能代码片段

    把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 1.原生JavaScript实现字符串长度截取 function cutst ...