mesos介绍

meso的使用

Posted by Dongyupu on October 19, 2017

如何使用mesos

  • 从最简单的角度看,mesos是跨级群管理CPU、内存以及其他资源的 编排平台。mesos使用容器化技术,比如Docker和linux container(LXC),来达到上述目的。但是mesos在此之上提供了更多功能——它提供实时API,可以用来和集群交互并且辅助开发。

  • mesos 所提供的功能跨越了Infrastructure as a Service(IaaS 基础架构即服务)和Platform as a Service(PaaS 平台即服务),以便达到系统级别上更高的效率。一方面mesos是基础架构:它是用户部署Hadoop和Storm 以及其他业务所需PaaS软件的平台,另一方面,假定用户尝试开发一种能够处理大规模计算的应用程序,类似Hadoop或Spark。这时,mesos则又成为用户用来构建这些程序的平台。

  • 实际上,最好将mesos当作服务于不同目标的综合体。它让用户在开发和部署应用程序时都无需再关注单台机器。它允许用户将集群看成一个单一的大型资源组。mesos帮助用户更为敏捷地测试并且部署新的分布式系统,当用户需要在这些流程里引入开发即运维(DevOps)团队时,能够更加快速且高效地提供部署内部应用程序的平台。

mesos作为部署系统

  • mesos集群能够动态重新分配资源,或者根据多种外部因素,比如当前负载等,动态地更改配置。
  • 框架能够自动并且动态地适应故障机器,改变工作负载,让运维人员能够安心处理别的工作。

mesos作为执行平台

  • 使用mesos集群作为基础之后,用户可以在现在,或者当新需求新技术出现时,轻松启动所需的任何框架,来提供所需的任何功能。

mesos本质上是操作系统:它管理计算机,将其统一治理成单一的逻辑单元。

  • mesos和框架携手并进,将mesos集群里的机器片分配给不同的角色。这样的能力——将某个框架所独占的机器群壁垒打破——正是mesos带来更高运维效率的秘密所在。

框架

  • 运行在mesos上的应用程序称为框架。一个框架由两部分组成:控制器部分,称为 调度器;工作单元部分,称为 执行器。

master 和 slave (agent 新版本1.0之后称为agent)

  • Mesos集群由两部分组成:mesos master 和 mesos slave(agent)。msater是协调集群的软件,slave(agent)则在容器里执行代码。

    master

    mesos master是集群的大脑,它们的职责如下:

    • 它们是运行任务的中央资源
    • 它们在所有连接上的框架间公平共享集群
    • 它们为集群维护主要的UI
    • 它们确保资源的高可用性和高效分配。综合考虑,它们会成为单点故障,但是mesos会自动处理这种情况,能够从单个master的故障里恢复。

    Slave (agent)

    mesos master的补充就是slave(agent)。slave(agent)的职责有所不同,如下所示:

    • 它们启动并管理托管的执行器的容器(LXC容器和docker镜像)
    • 它们提供UI来访问容器内数据
    • 它们和本地执行器通信,从而管理和mesos master的通信
    • 它们展示所运行的主机信息,包括运行任务和执行者的信息、可用资源,以及其他元数据
    • 它们管理任务的状态更新
    • 它们创建状态的检查点,从而启用集群的滚动重启

资源

  • mesos的最根本抽象是资源——任务和执行器在完成工作时消费资源。

    CPU

    mem

    disk

配置自定义资源

  • mesos资源由 键/值 对指定。键 是资源名称,比如cpu、mem、disk、或者port。值 是这些资源有多少可用。

配置slave(agent)属性

  • slave(agent)可以将机器的任意 键/值 数据暴露成属性。和资源不一样,属性不由mesos分配使用。它们仅仅传递给框架调度器来辅助其调度决策。

角色

  • 为了决定哪些资源能够提供给哪些框架,mesos使用了 “角色” 的概念。角色类似于 组 : 用户可以有dgrnbrg角色(给运行的东西所用),qa角色(给质量保证相关的任务所用),db角色(给数据库所用),等等。

静态和动态slave(agent)预留

  • slave(agent)预留用来确保特定资源始终能够用于特定的用户场景。

任务和执行器

  • 调度器想要完成某些工作时,会启动一个执行器。执行器可以简单理解为调度器的worker:调度器决定给某个执行器发送一个或者多个任务,执行器会独立完成这些任务,在任务完成时将状态更新发送给调度器。

CommandExecutor

  • 大多数用户和开发人员不需要使用mesos执行器API的复杂特性。为了快速并且可靠地开发应用程序,mesos提供了CommandExecutor,这是一种特别的简化执行器。如果任务仅仅简单地启动一个命令行应用程序,就可以在启动任务时制定CommandInfo,而不是ExecutInfo。

理解mesos.proto

  • 所有和mesos的通信使用的都是google protocol buffer (也称为 protobuf)编码。所有数据模式都存储在同一个地方:mesos 代码的 include/mesos/mesos.proto文件里。

不通过Mesos管理

要构建可以工作的Mesos集群,需要一些应用程序

Zookeeper

  • Mesos使用Zookeeper提供集群的发现服务。Zookeeper quorum 由其运行机器的DNS名称命名。因此,Mesos集群的Zookeeper quorum通常在三台或者五台特定机器上运行,这样保证拥有稳定的名称。

数据库

  • 持久化卷 。数据库的mesos框架,提供高性能的代理层。

监控

  • Mesos观察并且监控其框架,帮助开发人员构建高可用性并且可靠的系统。
  • 一个健壮的生产环境使用的mesos集群必须带有主机级别的监控,并且它必须归档和警报mesos自身收集的数据。该领域的一种集成方案是Satellite,能够自动停用有问题的slave(agent),基于自定义条件生成警报,并且将历史数据存储到InfluxDB、Elastic Search,以及很多其他的数据库里。
  • 幸运的是,搭建监控系统和zookeeper集群所需的工作量,比搭建所有准备在mesos上运行的框架的独立版本的工作量小得多。