资源分配&调度
mesos采用双层调度方案, master决定将多少资源分配给framework, 如何使用由framework决定, 流程:
- 框架向master注册
- master从slave获取资源offer,调用分配模块函数决定将资源分配给哪个框架
- 框架调度器接收资源offer,检查offer是否合适,若合适接受offer并发送task列表给master,若不合适则拒绝该offer
- master得到框架的接受、拒绝消息,若接受则并做相应的检查后将task信息发送给对应的slave
- slave分配所请求的资源并运行任务执行器,执行器运行框架下的任务
- 框架调度器接收任务任务运行状态,同时框架调度器继续接收offer并在合适的时机启动任务
- 框架注销后不在接收任何offer
Mesos通过支配资源公平算法(DRF)进行资源分配
概念:
最大-最小资源公平算法:
支配资源:在总资源比例最大的资源类型
支配比例:支配资源所在总资源的比例
例如:总资源为<8 CPU, 32 G>,框架A申请<2CPU, 1G>, 则支配资源为max([2/8, 1/32]),即cpu为支配资源,其支配比例为25%
DRF算法是在每个框架的支配资源上在利用最大-最小资源公平算法进行资源分配
Mesos FrameworkInfo中的用户角色可以用来决定资源的分配,可以每个用户或者每个框架一个角色,或者多个用户和框架共享一个角色,若未显示设置,则为运行框架调度器的用户
加权DRF:
在Mesos master启动时可以通过--weights和--roles设置加权DRF, --weights后接角色/权重列表格式为role1=weight1,权重为非整数,且roles中设置的角色必须都在weights设置权重
静态预留:
在slave上可以通过resource参数设置某部分资源只能由某角色使用,格式为name(role)value的列表,若没有指定角色的资源和未出现的资源将被划分到默认角色下, 例如
--resources="cpus:4;mem:2048;cpus(product):8;mem(product):4096"
指将8个cpu,4096M内存的slave预留给product角色
修改resources属性后需要重启slave
动态预留:
在framework接受到offer可以发送Offer::Operations::Reserve和Offer::Operations::Unreserve管理预留资源
也可以通过/reserve和/unreserve两个restapi对资源预留进行管理,此时不需要重启slave
网友评论