Mesos简介与安装

简介

Mesos是什么?

  • Mesos是一个集群管理平台。 可以理解为是一种分布式系统的kernel, 负责集群资源的分配, 这里的资源指的是CPU资源, 内存资源, 存储资源, 网络资源等。 在Mesos可以运行Spark, Storm, Hadoop, Marathon等多种Framework(框架)。

  • Mesos是Apache孵化器中的一个开源项目,使用ZooKeeper实现容错复制,使用Linux Containers来隔离任务,支持多种资源计划分配(内存和CPU)。提供Java、Python和C++ APIs来开发新的并行应用程序,提供基于Web的用户界面来提查看集群状态。

  • Mesos中包含四类主要的服务(实际上是一个socket server),它们分别是Mesos Master,Mesos Slave,SchedulerProcess和ExecutorProcess,它们之间通过Protocal Buffer消息进行通信,每种服务内部注册了若干种Protocal Buffer消息处理器,一旦收到某种消息,则会调用相应的消息处理器进行处理。除了以上四种服务之外,Mesos还对外提供了三种可编程组件,分别是Alloctor、Framework Scheduler和Framework Executor,编写这几个组件必须按照要求实现了几个接口,而这些接口将分别被下图中相邻的服务调用。

  • Mesos的架构主要有Masters(主节点), Slaves(从节点), 和 及在Mesos上运行的Framework(框架)组成。 各个部分的分工如下:Master: 负责处理Slave节点和Framework间的资源通讯, 根据指定的策略来决定分配多少资源给framework。 Slave: 启动本地进程, 同时向Master报告有哪些资源可用。 Framework: 接收来自Master提供的Slave节点的资源(如CPU和内存), Framework由调度器(负责监控和管理Slave的状态)和执行器(负责在服务器执行应用程序代码)组成。

  • Mesos可以认为是资源的中间商,Mesos是第一个可以在多个框架之间共享资源的集群调度器。

  • Mesos做为数据中心的内核,需要为大量不同类型的负载提供服务,没有一个调度器可以满足所有这些框架的需求,为了应对这个问题,Mesos的设计原则是:资源分配和任务调度的分离。

    Mesos master 负责决定分配给每个框架多少资源,任务调度器负责如何使用这些资源,这取决于每个框架的调度器如何根据自身需求去实现。也可以这样理解Mesos的设计理念:Mesos在各个框架间进行粗粒度的资源分配,每个框架根据自身任务的特点进行细粒度的任务调度。

Mesos生态

Mesos本身只提供资源的分配, 并不涉及存储, 任务调度等功能, 所以它要和其它软件或者系统搭配使用才能构成完整的分布式系统。 Mesos, Docker, Marathon/Chronos, RabbitMQ, HDFS/Ceph构成了一个完整的分布式系统, 分别负责资源分配, 进程管理,任务调度, 进程间通信和文件系统的功能。 这里可以和Linux做一个横向的比较。 如图:

Docker: 一个开源的应用容器引擎, 它涉及基础技术有Linux cgroup和namespace, 以及AUFS。 Docker可以理解为更轻量级的虚拟机。

Marathon: 针对服务型分布式应用提供任务调度,比如企业网站等这类需要长时间运行的服务。

Chronos: 针对分布式批处理应用提供任务调度,比如定期处理日志或者定期调Hadoop等离线任务。

RabbitMQ: 一种消息队列, 企业级的消息系统。

HDFS: 即Hadoop分布式文件系统, 提供高吞吐量的数据访问, 适合大数据集的分布式应用。

Ceph: 一种分布式文件系统, 开源存储解决方案, 提供对象存储。

除了上述讲到的分布式系统最基本的五大组件外, 分布式系统还涉及到其它的组件, 如负载均衡器, 服务发现器, 系统性能监控器, 系统告警监控器, 对应的软件分别有HAproxy, Zookeeper, Ganglia, Zabbix等

HAproxy: 是一个轻量级的TCP/HTTP的代理, 提供负载均衡功能,支持数以万计的并发。

ZooKeeper: 分布式系统涉及服务发现(分布式系统有多个实例, 系统要知道实例是要通过哪个ip哪个端口去访问, 才能对它进行调度,这个就是服务发现), 这个要配合ZooKeeper来做, 将要调度的实例的地址和端口写到ZooKeeper。

Ganglia: 是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率, I/O负载、网络流量情况等

Zabbix: 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案

安装

  • 下载
  1. Apache下载最新稳定版(推荐)。
1
2
$ wget http://www.apache.org/dist/mesos/1.1.0/mesos-1.1.0.tar.gz
$ tar -zxf mesos-1.1.0.tar.gz
  1. 克隆Mesos的Git库(适合高级用户)。
1
$ git clone https://git-wip-us.apache.org/repos/asf/mesos.git

注:如果你在运行上述命令时遇到问题,你可能需要先安装 wget, tar, git 这些工具。可以参考系统要求部分。

  • 安装

    1
    2
    3
    $tar -zxf mesos-1.1.0.tar.gz
    $mv mesos-1.1.0 mesos
    $./configure --prefix=/opt/mesos && make && make install

    问题:编译中configure: error: GCC 4.8 or higher required (found 4.4.7)由于系统自带版本4.4.7比较低,无法编译。

    gcc -v 查看一些gcc版本,如果低于4.8.0,则需要升级gcc

    解决:安装GCC 4.8.0

    • cent6 自带的gcc版本是4.4.7, 不过可以使用red hat出的devtoolset-3(其实这是一套, 有1,2 现在版本是3, 参照官方教程即可)升级gcc到4.8+, 使用yum可以直接搞定.

      方法如下
      使用 root 账号登陆或 sudo

      Bash

      1
      2
      3
      4
      #参考https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/
      yum install centos-release-scl
      yum install devtoolset-3-gcc-c++
      #devtoolset-3-gcc会被作为依赖安装

      安装完毕后使用命令临时切换gcc版本’

      Bash

      1
      2
      scl enable devtoolset-3 bash  
      gcc -v #可以看到版本已经更新

      如果需要永久覆盖, 可以

      Bash

      1
      echo "source /opt/rh/devtoolset-3/enable" >> /etc/bashrc

      重新登陆terminal生效

    • configure:error:cannot find libz. libz is required for mesos to build.

      • 原因是缺少zlib-devel,yum -y install zlib-devel-*
    • configure:error:cannot find libapr-1 headers. libapr-1 is required for mesos to build.

      • 原因是缺少apr-devel, yum -y install apr-devel-*
    • configure:error:cannot find libcurl. libcurl is required for mesos to build.

      • 原因是缺少libcurl-devel ,yum -y install libcurl-devel-*
    • configure:error:cannot guess JAVA_HOME(no 'java' or 'javac' found)

      • 需要安装jdk,不做介绍,注意配好JAVA_HOME
    • configure:error:cannot find man on your path

      • 需要安装maven,配置MAVEN_HOME
    • configure:error:cannot find libsasl2

      • 原因是缺少cyrus-sasl-devel,yum -y install cyrus-sasl-devel-*
    • checking SASL CRAM-MD5 support … configure error no.

      • 原因缺少cyrus-sasl-md5,yum -y install cyrus-sasl-md5-*
    • configure:error:cannot find libsvn_subr-1 headers.

      • yum -y install subversion-*
    • python 环境不对

      • yum -y install python-devel-*
  • 安装RPM包

  • 启动停止

    • start mesos-master/slave
    • stop mesos-master/slave

参考资

参考:http://blog.csdn.net/u014729236/article/details/46404303

官方文档:http://mesos.apache.org/documentation

中文翻译:http://mesos.mydoc.io/

GitHub:https://github.com/apache/mesos/tree/master

董的博客:http://dongxicheng.org/category/apache-mesos/

参考Mesos的官方文档:http://mesos.apache.org/documentation/latest/getting-started/

国内对官方文档的翻译:https://mesos-cn.gitbooks.io/mesos-cn/content/primer/Mesos-of-Getting-Started.html

RPM:https://open.mesosphere.com/downloads/mesos/#apache-mesos-1.1.0

坚持技术分享,您的支持将鼓励我继续创作!