1、前言
2017年,公司开发了一套DCOS云平台管理,它是采用mesos+marathon开源容器应用编排框架作为底层组件。DCOS云平台产品并在中经汇通公司上线使用,它搭建了以Docker容器为基础封装各类应用和运行环境,以Mesos、Marathon为核心实现容器资源的分布式调度与协调,并以Haproxy、Etcd实现服务注册和业务的引流。其中,Marathon作为DCOS云平台的核心组件,并结合MESOS的资源调度组件,实现DCOS云平台下任务的动态调度,保证应用服务长时间稳定运行。接下的主题是分享MESOS这一核心组件原理与实践。
2、Mesos简介
Mesos 最初由 UC Berkeley 的 AMP 实验室于 2009 年发起,遵循 Apache 协议,目前已经成立了 Mesosphere 公司进行运营。Mesos 可以将整个数据中心的资源(包括 CPU、内存、存储、网络等)进行抽象和调度,使得多个应用同时运行在集群中分享资源,并无需关心资源的物理分布情况。它能够在同样的集群机器上运行多种分布式系统类型,更加动态、有效率、低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点。如果把数据中心中的集群资源看做一台服务器,那么 Mesos 要做的事情,其实就是今天操作系统内核的职责:抽象资源 + 调度任务。Mesos 项目是 Mesosphere 公司 Datacenter Operating System (DCOS) 产品的核心部件。
3、Mesos原理与架构
可以从上图看出,Mesos 采用了经典的主-从(master-slave)架构,其中主节点(管理节点)可以使用 zookeeper 来做 HA。Mesos master 服务将运行在主节点上,Mesos slave 服务则需要运行在各个计算任务节点上。负责完成具体任务的应用框架们,跟 Mesos master 进行交互,来申请资源。Mesos实现了两级调度架构,它可以管理多种类型的应用程序。第一级调度是Master的守护进程,管理Mesos集群中所有节点上运行的Slave守护进程。集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如Hadoop和MPI作业。第二级调度由被称作Framework的“组件”组成。Framework包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器。Mesos能和不同类型的Framework通信,每种Framework由相应的应用集群管理。上图中只展示了Hadoop和MPI两种类型,其它类型的应用程序也有相应的Framework。Mesos Master协调全部的Slave,并确定每个节点的可用资源,聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework(作为Master的客户端)发出资源邀约。Framework可以根据应用程序的需求,选择接受或拒绝来自master的资源邀约。一旦接受邀约,Master即协调Framework和Slave,调度参与节点上任务,并在容器中执行,以使多种类型的任务,可以在同一个节点上同时运行。
4、Mesos特点
支持多种应用框架,包括 Marathon、Singularity、Aurora 等;
多级资源调度(针对内存与CPU);
通过Zookeeper提供容错机制;
轻松扩容到1万台节点服务器;
支持 Docker、LXC 等容器机制进行任务隔离;
提供了多个流行语言的 API接口,包括 Python、Go、Java、C++ 等;
自带了简洁易用的 WebUI,方便用户直接进行操作;
横跨虚拟机、裸机多种方式部署。
5、Mesos适用场景
大数据技术平台
容器应用编排管理平台
CI/CD测试平台
运维管理平台
6、Mesos日志与监控
1、MESOS日志排查
Mesos组件对于DCOS云平台来说是一个非常重要的核心组件。虽然Mesos组件故障时不会影响业务容器,但是会影响到DCOS平台去做资源调度与容器应用发布,甚至影响到容器扩缩容问题。Mesos自身提供了强大的日志输出,默认日志文件路径:/var/log/mesos。
mesos.master日志:用于查看集群中主机资源的总汇聚情况;
mesos.slave日志:用于专注和Master有没有中断连接;
2、MESOS监控指标
指标具体含义
mesos.cluster.cpus_percent分配的 CPU 的百分比
mesos.cluster.disk_percent分配的磁盘空间百分比
mesos.cluster.dropped_messages丢弃的消息数量
mesos.cluster.eventqueuedispatches事件队列里调度的数量
mesos.cluster.eventqueuehttp_requests事件队列里HTTP请求的数量
mesos.cluster.eventqueuemessages事件队列里消息传输的数量
mesos.cluster.frameworks_active活跃的应用框架数量
mesos.cluster.frameworks_connected已经连接的应用框架数量
mesos.cluster.frameworks_disconnected未连接的应用框架数量
mesos.cluster.frameworks_inactive非活动的应用框架数量
mesos.cluster.mem_percent分配的内存百分比
mesos.cluster.outstanding_offers未处理的资源邀约数量
mesos.cluster.slaves_active活动的slave节点数量
mesos.cluster.slaves_connected连接中的slave节点数量
mesos.cluster.slaves_disconnected未连接的slave节点数量
mesos.cluster.slaves_inactive非活动中的slave节点数量
mesos.cluster.tasks_error已经失效的任务数量
mesos.cluster.tasks_failed失败的任务数量
mesos.cluster.tasks_finished已经完成的任务数量
mesos.cluster.tasks_killed被杀死的任务数量
mesos.cluster.tasks_lost丢失的任务数量
mesos.cluster.tasks_running运行中的任务数量
mesos.cluster.tasks_staging待处理任务数量
mesos.cluster.tasks_starting开始的任务数量
mesos.cluster.total_frameworks总的应用框架数量
mesos.cluster.validstatusupdates无效的状态更新的数量
mesos.registrar.registrysizebytes注册表大小
mesos.registrar.statefetchms读注册信息的延迟,单位毫秒:ms
mesos.registrar.statestorems写注册信息的延迟,单位毫秒:ms
mesos.registrar.statestorems.count注册表写入次数
mesos.registrar.statestorems.max最大写注册信息的延迟,单位毫秒:ms
mesos.registrar.statestorems.min最小写注册信息的延迟,单位毫秒:ms
mesos.registrar.statestorems.p50写注册信息延迟的中位数,单位毫秒:ms
mesos.registrar.statestorems.p90写注册信息90%起的延迟,单位毫秒:ms
mesos.registrar.statestorems.p95写注册信息95%起的延迟,单位毫秒:ms
mesos.registrar.statestorems.p99写注册信息99%起的延迟,单位毫秒:ms
mesos.registrar.statestorems.p999写注册信息99.9%起的延迟,单位毫秒:ms
mesos.registrar.statestorems.p9999写注册信息99.99%起的延迟,单位毫秒:ms
mesos.slave.cpus_percent已分配的cpu比例
mesos.slave.disk_percent已分配的磁盘空间比例
mesos.slave.executors_registering注册中的执行器数
mesos.slave.executors_running运行中的执行器数
mesos.slave.executors_terminated已终止的执行器数
mesos.slave.executors_terminating正在终止的执行器数
mesos.slave.frameworks_active活动中的应用数
mesos.slave.mem_percent内存分配百分比
mesos.slave.recovery_errors恢复过程中的错误数
mesos.slave.tasks_failed失败的任务数量
mesos.slave.tasks_finished已经完成的任务数量
mesos.slave.tasks_killed被杀死的任务数量
mesos.slave.tasks_lost丢失的任务数量
mesos.slave.tasks_running运行中的任务数量
mesos.slave.tasks_staging等待运行的任务数量
mesos.slave.tasks_starting开始的任务数量
mesos.stats.elected是否被选为主节点
mesos.stats.system.load_15min15分钟内平均负载
mesos.stats.system.load_1min1分钟内平均负载
mesos.stats.system.load_5min5分钟内平均负载
mesos.stats.system.memfreebytes剩余内存 (bytes)
mesos.stats.uptime_secs从节点运行时间
7、MESOS API接口
DCOS云平台是通过mesos api接口来调度和管理主机资源,目前DCOS平台调用到mesos api两个接口,用来获取计算节点资源和mesos组件健康状态。
1、获取计算节点资源
API接口:http://mesos-master-ip:5050/master/slaves
对应DCOS平台下面计算节点资源
2、Mesos组件健康状态
Mesos master组件状态
API接口:http://mesos-master-ip:5050/metrics/snapshot
Mesos Slave组件状态
API接口:http://mesos-slave-ip:5051/metrics/snapshot
对应DCOS平台下面的mesos主从节点健康状态
3、其它API接口
https://github.com/apache/mesos/blob/master/docs/api-client-libraries.md
8、MESOS优势在哪里,我们为什么选择它
根据对适合构建DCOS的各种技术架构的评估来看,选择以Mesos为基础的方案。其优势是它的成熟度高、两级调度框架、适合多种应用场景、混合部署、应用与平台耦合度低。