运行Mesos

Posted 分布式实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行Mesos相关的知识,希望对你有一定的参考价值。


本文节选自《Mesos:大数据资源调度与大规模容器运行最佳实践》第一章。

本章简要介绍 Apache Mesos 和集群计算框架,并会逐步讲解如何在单节点和多节点上搭建 Mesos。 还会讲述如何使用 Vagrant 在 Amazon EC2 上搭建 Mesos 集群。 本书通篇会交替使 用 Apache Mesos 和 Mesos 两个术语。 本章包括如下内容:

  • 现代数据中心

  • 集群计算框架

  • Mesos 简介

  • 为什么选择 Mesos

  • 单节点 Mesos 集群

  • 多节点 Mesos 集群

  • Amazon EC2 上的 Mesos 集群

  • 使用 Vagrant 运行 Mesos

  • Mesos 社区

1
现代数据中心

现代应用程序高度依赖于数据。 企业生成并处理的数据呈指数级增长,这逐渐改变了我们 存储及处理数据的方式。 当为存储和处理数据规划现代基础架构时,已经无法仅仅通过购 买硬件扩容来解决问题了。 批量处理、 流处理、 面向用户服务、 图像处理及实时分析,这 些不同的框架变得和支撑它们运行的硬件同样重要。 这些框架才是数据中心世界里的支柱应用程序。

大数据的规模和多样性导致,对于现代工作负载而言,传统的扩容策略已经落伍。 因此, 大型企业转向分布式处理,把大量计算机当成单个巨型机器来使用。 很多资源需求各异的 应用程序共享集群,多种架构之间高效共享资源的关键是力争达到资源的高利用率。 需要 将所有的小型机器整合成单个大型计算机。 Mesos 天生就是这些计算机集群的核心。

传统做法是,各种框架分别单独运行,在框架间静态划分资源,这样会导致资源的使用效 率很低。 将大量日常机器当作单个大型机器使用,能够在所有框架之间弹性地共享资源, 这些需求都要求集群计算框架。 Mesos 的灵感来源于集群内多个框架之间共享资源和提供 资源隔离性的想法。

2
集群计算框架

在现代集群里,不同的框架所要求的计算需求会非常不同,企业需要运行多种框架,并在其间共享数据和资源。 资源管理程序面临巨大的挑战和互为矛盾的目标:

  • 高效性:高效共享资源是集群管理软件的终极目标。

  • 隔离性:当多个任务共享资源时,最重要的考量之一是确保资源的隔离性。 隔离性和正确调度的整合是保证服务级别协议(SLA)的基础。

  • 可伸缩性:现代基础架构的持续增长要求集群管理程序可以线性伸缩。 一个重要的 可伸缩性指标是框架伸缩决策制定所需的延时。

  • 健壮性:集群管理是中央组件,持续的业务运营要求健壮的集群管理。 从良好测试的代码到容错设计,很多方面都有助于提高健壮性。

  • 可扩展性:在任何公司里,集群管理软件的开发量都非常大,而且这些软件可能已 经使用了数十年。 运营期间,企业政策和/或硬件的变化都不可避免地要求集群资源 管理方式的改变。 因此,对于大型企业来说,可维护性非常重要。 集群管理软件必 须是可配置的,同时考虑到很多约束条件(比如位置、硬件等),并且能够支持多种 框架。

3
Mesos 简介

Mesos 是集群管理器,力争通过在多种框架之间动态共享资源来优化资源使用率。 该项目 于 2009 年由位于 Berkeley 的加利福尼亚大学发起,已经在很多公司的生产环境上使用过, 包括 Twitter 和 Airbnb。 2013 年 7 月,在该项目孵化大概两年时,就成为 Apache 的最高级 别项目。

Mesos 在多种不同类型的工作之间共享机器(或者节点)的可用资源,如下图所示。 Mesos 可以看作是数据中心的内核,提供所有节点资源的统一视图,所起的作用类似于操作系统 内核在单台机器上的作用,可以无缝地访问多节点资源。 Mesos 提供了帮助构建数据中心 应用程序的核心程序,其核心组件是可伸缩的两阶段调度程序。 Mesos API 允许访问各种 不同的应用程序,而无须向 Mesos 核心程序提供特定领域的信息。因为关注于内核,Mesos 不会遇到中央式调度器天然存在的各种问题。

Mesos 作为数据中心内核

下列组件对于理解 Mesos 的整体架构至关重要。 本节会做简要介绍,之后第 6 章会更加详
细地探讨整体架构的细节。

master

master 负责在 slave 资源和框架之间进行调度。 任何时候,Mesos 只有一个活动的 master, 由 ZooKeeper 使用分布式一致性算法选举产生。 如果 Mesos 配置运行在容错模式下,会 通过分布式主选举协议选出一个 master,其他 slave 则处在待命模式。 从设计角度来讲, Mesos master 本身不会用来做任何重负载计算,这样简化了 master 的设计。 它以资源 offer 的形式将 slave 的资源提供给框架,并且根据已接受的 offer 在 slave 上启动任务。 它同时也 负责任务和框架之间的所有通信。

slave

slave 是 Mesos 集群里真正工作的节点。 它们管理单个节点上的资源,遵守资源政策来适应业务优先级。 slave 管理各种资源,比如 CPU、内存、端口等,同时执行框架递交的任务。

框架

框架是运行在 Mesos 上的应用程序,解决特定的问题。 每一种框架都包括调度程序和执行 程序。 调度程序负责决定接受还是拒绝资源 offer。 执行程序是资源消费者,运行在 slave 上,负责运行任务。

4
为什么使用 Mesos

Mesos 给开发人员和运维人员都带来了巨大的好处。 它将不同的框架整合到统一的基础框 架上,不仅能够节约基础架构的花费,而且给运维团队带来了便利,也帮助开发人员简化 了基础架构的接口,最终有助于业务上的成功。 下面是企业应该使用 Mesos 的几点原因:

  • Mesos 支持多种工作负载,支持批量处理(Hadoop)、交互式分析(Spark)、实时处 理(Storm、 Samza)、 图像处理(Hama)、 高性能计算(MPI)、 数据存储(HDFS、 Tachyon 和 Cassandra)、Web 应用程序(play)、持续集成(Jenkins、GitLab)等一系 列框架。 而且元调度框架,比如 Marathon 和 Aurora 的大多数已有应用程序无须任 何修改就可以运行在 Mesos 上。 Mesos 还是大规模运行容器的理想选择。 这样的灵 活性使得 Mesos 非常易于部署。

  • Mesos 通过在框架间弹性共享资源来改进资源使用率。 如果没有统一的数据中心操 作系统,不同框架就只能运行在隔离的硬件上。 这样的资源静态划分会导致资源碎 片化,限制资源使用率和吞吐量。 通过 Mesos 实现资源的动态共享,能够帮助达到 更高的资源使用率和吞吐量。

  • Mesos 是一个拥有活跃社区的开源项目。 Mesos 的可插拔式架构使其可以针对企业 需求灵活定制。 Mesos 可以在很多不同的操作系统和硬件上运行,给使用者提供了 非常丰富的选择,避免依赖于某个特定的供应商。 因此,基于Mesos API 开发的程 序可以在多种基础架构上运行。 也就是说,Mesos 应用程序可以同时运行在物理机、 虚拟基础架构和云提供商上。

  • Mesos 最重要的优势应该是帮助开发人员构建高效的现代应用程序。 开发人员从为 单台机器开发应用程序转变成为数据中心开发程序,他们需要 API 帮助其关注于自 己的应用逻辑,而不用花时间理解分布式基础框架的细节。 使用 Mesos,开发人员无须关心分布式细节,只需关注自己应用程序特定领域的逻辑。 同时,Mesos 提供 了丰富的 API,帮助开发出可伸缩的,自动容错的分布式应用程序,更多细节见第 7 章。

  • 大型基础架构的运维通常都十分困难。 Mesos 通过提供资源的一致视图来简化基础 架构的管理。 这增加了运维的敏捷性,同时因为不需要分配单独的集群,用 Mesos 部署新服务速度会更快。 Mesos 非常适合运维人员,它将基础架构资源当作整体管 理,而不是一台台单独的机器。 这意味着 Mesos 可以自适应故障,自动保证高可用 性,而无须任何人工干预。 Mesos 支持隔离良好的多租户部署,这对于大规模运营 来说至关重要。Mesos 还提供了功能全面的 REST、Web 和命令行接口,与现有工具 集成良好,更多细节见第 8 章。

  • Mesos 已经在 Twitter、 Airbnb、 HubSpot、 eBay、 Netflix、 Conviva、 Groupon,以及 很多其他公司里经受了生产环境的考验。 Mesos 能够支撑不同类型公司的多样化需 求,这是 Mesos 能够担任数据中心内核这一角色的最佳证明。

和传统的虚拟化基础架构相比,Mesos 有明显的优势:

  • 很多应用程序不需要虚拟机级别的隔离性,在 Mesos 中可以选择容器级别的隔离来 运行程序。 与 VM 相比容器的额外消耗要小得多,所以这么做不仅可以增大资源使 用率,而且还带来了很多额外的好处,比如更快的启动等。

  • 和 VM 相比,Mesos 大幅降低了基础架构的复杂性。

  • 使用 VM 来达到容错和高可用的目的是非常昂贵并且困难的。 使用 Mesos,硬件故 障对于应用程序天然透明,Mesos API 能够帮助开发人员轻松处理故障。

既然我们已经了解了使用 Mesos 的优势,那么就来创建一个单节点的 Mesos 集群,开始Mesos 的探索之旅吧。

5
单节点 Mesos 集群

Mesos 可以在 Linux 和 Mac OS X 上运行。尝试使用 Mesos 的最简方式是搭建一台单机器的 Mesos,我们就从这里开始。 目前,Mesos 并没有为不同的操作系统提供二进制包,需要使 用者下载源代码进行编译。 社区里有编译好的可用二进制包。

Mac OS

Homebrew 是 Mac 上 Linux 风格的软件包管理器。Homebrew 支持 Mesos 的安装,在本地进
行编译。 Mac 上安装 Mesos 需要如下步骤:

1)安装 Homebrew,从 http://brew.sh/ 下载。
2) Homebrew 要求安装 Java。 Mac 自带 Java,因此只需确保 JAVA HOME 设置正确。
3) 使用 Homebrew 安装 Mesos,键入如下命令:

mac@master:˜ $ brew install mesos

虽然 Homebrew 提供了在 Mac 上搭建 Mesos 的方式,不过生产环境还是推荐在 Linux 上运行。

Fedora

从 Fedora 21 开始,Fedora 仓库里包含 Mesos 软件包。其中,mesos-master 和 mesos-slave 软件包分别安装在 master 和 slave 上。 mesos 软件包包含 master 和 slave 的软件程序。 在版本
¿=21 的 Fedora 上安装 mesos 软件包,使用如下命令:

fedora@master:˜ $ sudo yum install -y mesos

现在就可以按照之后“启动 Mesos”小节的步骤来运行 Mesos。 对于版本小于 21 的 Fedora, 需要安装依赖软件包,然后编译源代码后进行安装,这种方式类似于 CentOS,会在后文中 详细介绍。

安装依赖软件包

Mesos 要求安装如下依赖软件包:

  • g++(>=4.1)

  • Python 2.6 开发包

  • Java 开发工具集(>=1.6)和 Maven

  • cURL 库

  • SVN 开发库

  • Apache 便携运行时库(APRL)

  • 简单身份验证和安全层(SASL)库

另外,如果想从 git 库构建 Mesos 的话,还需要 autoconf(版本 1.12)和 libtool。 Mesos 的 安装在不同操作系统上有些区别,我们会详细介绍在 Ubuntu 14.10 和 CentOS 6.5 上安装 Mesos 的具体步骤。 在其他操作系统上的步骤与之类似。

CentOS

按照下述步骤在 CentOS 上安装所需依赖软件包:

1)目前,CentOS 默认仓库不提供 >=1.8 的 SVN 库,需要手动添加所需仓库。 在/etc/yum.repos.d/ 下创建文件 wandisco-svn.repo,并添加如下行:

centos@master:˜ $ sudo vim /etc/yum.repos.d/wandisco-svn.repo
[WandiscoSVN] name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$base  arch/
enabled=1 gpgcheck=0

然后使用如下命令安装 libsvn:

centos@master:˜ $ sudo yum groupinstall -y "Development Tools"

2) Maven 的安装需要先下载,然后解压缩,并且放到 PATH 里。 如下命令会在下载完
成后将文件解压缩到 /opt 目录,并将 mvn 链接到 /usr/bin:

centos@master:˜ $ wget http://mirror.nexcess.net/apache/maven/maven
-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz
centos@master:˜ $ sudo tar -zxf apache-maven-3.0.5-bin.tar.gz -C
/opt/
centos@master:˜ $ sudo ln -s /opt/apache-maven-3.0.5/bin/mvn
/usr/bin/mvn

3)使用如下命令安装其他依赖软件包:

centos@master:˜ $ sudo yum install -y python-devel
java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel

Ubuntu

使用如下命令在 Ubuntu 上安装所需依赖软件包:

ubuntu@master:˜ $ sudo apt-get -y install build-essential openjdk-6-jdk python-dev python-boto libcurl4-nss-dev libsasl2-dev libapr1-dev libsvn-dev maven
构建 Mesos

一旦所需软件都安装完成,就可以按照如下步骤构建 Mesos:

1)从 http://mesos.apache.org/downloads/ 下载最新的稳定版本。撰写本书时, 最新版本是 0.21.0。 将文件 mesos-0.21.0.tar.gz 保存到某个目录下。 打开终 端,进入之前保存文件的目录,或者直接在终端运行如下命令下载 Mesos:

ubuntu@master:˜$ wget http://www.apache.org/dist/mesos/0.21.0/mesos
-0.21.0.tar.gz

2)使用如下命令解压缩 Mesos,并进入解压缩后的目录。 注意第二个命令会删除下载的 .tar 文件,并将解压缩的目录重命名,去掉版本号。

ubuntu@master:˜ $ tar -xzf mesos-*.tar.gz 
ubuntu@master:˜ $ rm mesos-*.tar.gz ; mv mesos-* mesos 
ubuntu@master:˜ $ cd mesos

3)创建 build 目录。该目录会包含编译后的 Mesos 二进制文件。该步骤是可选的,但 是推荐执行。这样可以将 build 出的文件发布到各个 slave,而无须在每个 slave 上都 编译一次:

ubuntu@master:˜/mesos $ mkdir build 
ubuntu@master:˜/mesos $ cd build

4)运行 configure 脚本配置安装:

ubuntu@master:˜/mesos/build $ ../configure

configure 脚本支持构建环境的调优,可以运行 configure –help 查看详细参 数列表。 缺失了任何依赖的软件包,configure 脚本都会报告出来,用户可以回头重 新安装缺失的软件包。 一旦配置成功,就可以进入下一步。
5)使用 make 完成编译。 这一步可能会花一些时间。 第二个命令是 make check:

ubuntu@master:˜/mesos/build $ make ubuntu@master:˜/mesos/build $ make check

make check 会构建出示例框架。 现在就已经可以在 build 目录下直接运行 Mesos而无须进行安装了。
6)使用如下命令安装 Mesos:

ubuntu@master:˜/mesos/build $ make install

下表是 Mesos 提供的一系列命令:

安装完成后,就可以使用 mesos-local 命令启动本地 Mesos 集群,该命令会在单个进程里同
时启动 master 和 slave 程序,可以帮助快速检查 Mesos 是否正确安装。

启动 Mesos

启动 Mesos 进程。 首先,需要为 Mesos replicated log 创建目录,并赋予目录读写权限:

ubuntu@master:˜ $ sudo mkdir -p /var/lib/mesos 
ubuntu@master:˜ $ sudo chown ‘whoami‘ /var/lib/mesos

如下命令会使用上面创建的目录,启动 master:

ubuntu@master:˜ $ mesos-master --work_dir=/var/lib/mesos
I1228 07:29:16.367847 2900 main.cpp:167] Build: 2014-12-26 06:31:26 by
ubuntu
...
I1228 07:29:16.510967 2903 master.cpp:1263] The newly elected leader is master@master:5050 with id 20141228-072916-251789322-5050-2900
I1228 07:29:16.511157 2903 master.cpp:1276] Elected as the leading master!
...
ubuntu@master:˜ $ mesos-slave --master=master:5050

I1228 07:33:32.415714   4654    main.cpp:142] Build: 2014-12-26 06:31:26 by
vagrant     
……
I1228 07:33:32.448619 4654 slave.cpp:318] Slave hostname: master
I1228 07:33:32.462025 4655 slave.cpp:602] New master detected at master@ master5050
...

如上输出证明 slave 已经连接上了 master,并且列出了 slave 资源。 至此,集群启动成功,已经有一个运行着的 slave 以供随时运行框架。

运行测试框架

Mesos 包含了多种使用 C++、 Java 和 Python 编写的示例测试框架。 这些框架可以用来验证集群是否配置正确。 如下测试框架使用 C++ 运行五个示例应用。 使用如下命令运行:

ubuntu@master:˜/mesos/build/src $ ./test-framework --master=master:5050 I1228 08:53:13.303910 6044 sched.cpp:137] Version: 0.21.0
I1228 08:53:13.312556 6065 sched.cpp:234] New master detected at master@
master:5050
……
Task 4 is in state TASK_FINISHED
I1228 08:53:15.337805 6059 sched.cpp:1286] Asked to stop the driver I1228 08:53:15.338147 6059 sched.cpp:752] Stopping framework
’20141228-085231-251789322-5050-5407-0001’
I1228 08:53:15.338543 6044 sched.cpp:1286] Asked to stop the driver

如上输出显示框架连接到 master,并从 slave 接收了资源 offer。同时也显示了所启动任务的各种状态。 Java 示例框架在目录 src/example/java 下。

ubuntu@master:˜/mesos/build/src/examples/java $ ./test-framework master:5050
I1228 08:54:39.290570 7224 sched.cpp:137] Version: 0.21.0
I1228 08:54:39.302083 7250 sched.cpp:234] New master detected at master@ master:5050
I1228 08:54:39.302613 7250 sched.cpp:242] No credentials provided. Attempting to register without authentication
I1228 08:54:39.307786 7250 sched.cpp:408] Framework registered with 20141228-085231-251789322-5050-5407-0002
……
Status update: task 4 is in state TASK_FINISHED Finished tasks: 5
I1228 08:54:41.788455 7248 sched.cpp:1286] Asked to stop the driver I1228 08:54:41.788652 7248 sched.cpp:752] Stopping framework
’20141228-085231-251789322-5050-5407-0002’
I1228 08:54:41.789008 7224 sched.cpp:1286] Asked to stop the driver

类似地,Python 示例框架在目录 src/example/python 下,输出还会显示 frameworkId和各种任务状态:

ubuntu@master:˜/mesos/build/src/examples/python $./test-framework master: 5050
I1228 08:55:52.389428 8516 sched.cpp:137] Version: 0.21.0
I1228 08:55:52.422859 8562 sched.cpp:234] New master detected at master@ master:5050
I1228 08:55:52.424178 8562 sched.cpp:242] No credentials provided. Attempting to register without authentication
I1228 08:55:52.428395 8562 sched.cpp:408] Framework registered with 20141228-085231-251789322-5050-5407-0003
……
Task 4 is in state TASK_FINISHED
All tasks done, waiting for final framework message Received message: ’data with a \x00 byte’
All tasks done, and all messages received, exiting
I1228 08:55:54.136085 8561 sched.cpp:1286] Asked to stop the driver I1228 08:55:54.136147 8561 sched.cpp:752] Stopping framework
’20141228-085231-251789322-5050-5407-0003’
I1228 08:55:54.136261 8516 sched.cpp:1286] Asked to stop the driver
Mesos Web UI

Mesos 提供 Web UI 来展示 Mesos 集群信息。 可以从 <master-host>:<port> 处访问。 示例中是http://master:5050。报告里包括 slave、聚合资源、框架等信息。如下是 Web 接口的截图:

Mesos Web 接口

6
多节点 Mesos 集群

手动重复之前介绍的步骤,在每个 slave 节点上启动 mesos-slave,从而启动整个集群, 但是在大规模集群上,这样的手动操作既费时又容易出错。 Mesos 的 deploy 目录包含一系 列脚本,可以用来在集群上部署 Mesos。 这些脚本依赖于 SSH 完成部署。 需要搭建免密码 登录的 SSH。 下面开始搭建集群,包括两个 slave 节点(slave1、slave2)和一个 master 节点(master)。

在所有节点上都安装好所需依赖软件包之后,完成集群配置,确保节点机器之间可以互相访问。 如下命令会生成 SSH 密钥,并将其复制到 slave 上:

ubuntu@master:˜ $ ssh-keygen -f ˜/.ssh/id_rsa -P "" ubuntu@master:˜ $ ssh-copy-id -i ˜/.ssh/id_rsa.pub ubuntu@slave1 ubuntu@master:˜ $ ssh-copy-id -i ˜/.ssh/id_rsa.pub ubuntu@slave2

将编译后的 Mesos 复制到两个 slave 上,放到和 master 相同的目录下:

ubuntu@master:˜ $ scp -R build slave1:[install-prefix] 
ubuntu@master:˜ $ scp -R build slave2:[install-prefix]

在 [install-prefix]/var/mesos/deploy/masters 目录创建 masters 文件,可以使用任意编辑器,每一行表示一个 master,在本节示例中,只有一行,如下:

ubuntu@master:˜ $ cat [install-prefix]/var/mesos/deploy/masters master

类似地,slaves 文件列出所有想用作 Mesos slave 的节点:

ubuntu@master:˜ $ cat [install-prefix]/var/mesos/deploy/slaves slave1
slave2

现在,可以使用 mesos-start-cluster 脚本启动整个集群,使用 mesos-stop-cluster停止集群:

ubuntu@master:˜ $ mesos-start-cluster.sh

也可以顺序调用 mesos-start-masters 和 mesos-start-slaves, 这样也能正确地 在 master 节点和 slave 节点上启动相应程序。 该脚本会读取 [install-prefix]/var/ mesos/deploy/mesos-deploy-env.sh 里的环境配置。 另外,为了更好地进行配置管 理,master 和 slave 的配置参数可以分别定义到独立的 [install-prefix]/var/mesos/ deploy/mesos-master-env.sh 和 [install-prefix]/var/mesos/deploy/mesos- slave-env.sh 文件中。

7
Amazon EC2 上的 Mesos 集群

Amazon 的 Elastic Compute Cloud(EC2)借助于虚拟机技术,提供了按使用情况付费的 资源访问计算能力,是试验 Mesos 的绝佳方式。 Mesos 提供脚本辅助实现在 EC2 上创建各 种不同配置的 Mesos 集群。mesos-ec2 脚本位于 ec2 目录下,允许启动、运行作业,卸载 整个 Mesos 集群。 注意,即使没有构建 Mesos,我们也可以使用该脚本,但是需要安装版 本 >=2.6 的 Python。 可以使用不同名称管理多个集群。

要使用 ec2 脚本, 需要 AWS 密钥对、 access key 和 access secret。 通过环境变量定义 access key 和 access secret。 使用 AWS 管理控制台(https://console.aws.amazon. com/console/home)创建并下载密钥对,并赋予 600 权限:

ubuntu@local:˜ $ chmod 600 my-aws-key.pem
ubuntu@local:˜ $ export AWS_ACCESS_KEY_ID=<your-access-key> 
ubuntu@local:˜ $ export AWS_SECRET_ACCESS_KEY=<your-secret-key>

现在就可以使用 Mesos 提供的 EC2 脚本来启动新集群了,使用如下命令:

ubuntu@local:˜/mesos/ec2 $ ./mesos-ec2 -k <your-key-pair> -i
<your-identity-file> -s 3 launch ec2-test

这会启动一个名为 ec2-test,有三个 slave 的集群。 脚本执行完毕后,会打印出 Mesos 的 Web UI 链接,格式类似于 <master-hostname>:8080。访问这个 Web 接口可以验证集群 是否已经启动。 该脚本还提供了一些列参数,下表列举了其中一些。 可以运行 mesos-ec2–help 来查看所有可用参数:

可以使用 login 操作,通过集群名称登录到已启动的集群上,命令如下:

ubuntu@local:˜/mesos/ec2 $ ./mesos-ec2 -k <your-key-pair> -i
<your-identity-file> login ec2-test

该脚本还会在 /root/ephemeral-hdfs/ 目录下搭建 HDFS 实例,可以通过命令使用该实例。

最后,如下命令可以终止集群。 在终止某个集群前一定要备份好重要数据: ubuntu@local:˜/mesos/ec2 $ ./mesos-ec2 destroy ec2-test

该脚本还支持高级功能,比如用 EBS 后台实例来暂停和重启集群。 任何不清楚的地方请参 照 Mesos 文档。 另外要注意,Mesosphere(http://mesosphere.com)提供了在 Amazon EC2、 Google Cloud 及其他平台上创建弹性 Mesos 集群的便捷方式,和对 Mesos 的商业支 持。

8
使用 Vagrant 运行 Mesos

Vagrant 提供了很好的方式来创建便携的虚拟环境,使用它可以很容易地在虚拟机里运行Mesos。 本节讲解如何使用 Vagrant 在虚拟机上创建单节点和多节点 Mesos 集群:

1)从 https://www.vagrantup.com/download.html 上下载并安装 Vagrant。Vagrant可以运行在所有主流操作系统上。
2)使用 Vagrant 插件搭建 Vagrant。 执行如下命令完成安装:

ubuntu@local:˜ $ vagrant plugin install vagrant-omnibus vagrant-berkshelf vagrant-hosts vagrant-cachier vagrant-aws

3)从 https://github.com/everpeace/vagrant-mesos/ 下载 Vagrant 配置文件,或者使用 git 克隆文件,并 cd 到目录下:

ubuntu@local:˜ $ git clone https://github.com/everpeace/vagrant- mesos.git ; cd vagrant-mesos

4)对于单节点集群搭建,cd 到 standalone 目录,运行 vagrant up 命令。 这样会 创建一台运行 Mesos master、 slave 和 ZooKeeper 实例的虚拟机。 从 http://192. 168.33.10:5050: 可以访问到 Mesos UI:

ubuntu@local:˜ $ cd standalone ; vagrant up

5)对于多节点集群搭建,cd 到 multinode 目录。 在 cluster.yml 文件里配置创建 多少台虚拟机用于 Mesos master、slave 和 ZooKeeper 实例。默认会创建五个虚拟机, 一台运行 ZooKeeper,两台运行 Mesos master 实例,两台运行 Mesos slave 实例。 从 http://172.31.1.11:5050 可以访问多节点环境的 Mesos Web UI:

ubuntu@local:˜ $ cd multinode ; vagrant up

6)Mesos 集群已经启动并运行。 可以通过 vagrant ssh 命令登录到这些机器上。 单 节点集群里使用 master 和 slave 作为主机名,而在多节点集群里,主机名是 master1、slave1 等:

ubuntu@local:˜ $ vagrant ssh master # to login to master
ubuntu@local:˜ $ vagrant ssh slave # to login to slave

7)可以使用 halt 命令停止虚拟机。 之后使用 up 命令再次启动虚拟机及整个 Mesos 集群。 最后,destroy 命令会删除所有 Vagrant 创建的虚拟机。 注意,必须相应地 在 standalone 或者 multinode 目录下执行 vagrant destroy 命令:

ubuntu@local:˜ $ vagrant halt
ubuntu@local:˜ $ vagrant destroy

Vagrant 搭建方式也允许很多不同的配置,同时支持启动 Amazon EC2 上的 Mesos 集群。 仓库里包含的 vagrant 文件和 README 文件里有更多详细内容。

9
Mesos 社区

虽然还是个较新的项目,Mesos 已经拥有了表现出色的社区(http://mesos.apache. org/community/)。 小型和大型企业都有很多使用 Mesos 的成功案例(http://mesos.apache.org/docume … esos/)。 企业可以使用 Mesos 干 很多事情,从网络服务的数据分析到数据存储框架。

案例研究

很多企业将 Mesos 用于生产环境来简化基础架构管理。 本节列举了一些案例,介绍这些公司是如何使用 Mesos 的。

Twitter

Twitter 是 Mesos 的第一位使用者,其在 Apache 还处于孵化阶段时就向促进 Mesos 项目发 展伸出援手。 Twitter 是一个实时社交平台,在可靠的基础架构的帮助下,解决了著名的“失 败鲸”难题。 Twitter 将 Mesos 作为其整个基础架构的基础,在 Mesos 平台上运行各种各样 的作业,包括分析、 广告平台、 预输入服务和消息基础架构。 所有 Twitter 构建的新服务 都是 Mesos 支撑的,更为重要的是,Mesos 帮助改变了开发人员对分布式环境资源的理 解。 现在开发人员会考虑使用资源的共享池,而不是像以前那样只考虑单台机器的资源。 Twitter 还构建了 Aurora 调度框架来管理在 Mesos 上长期运行的服务。

HubSpot

HubSpot 制造集客营销的产品。 HubSpot 在 Amazon EC2 上运行 Mesos,支持 150 多种不同 类型的服务。 Mesos 改进了资源使用率,在无须运行服务的多个拷贝的前提下确保了高可 用性,降低了基础架构的花费。 HubSpot 意识到使用 Mesos 开发人员能够更快地启动新服 务,服务能够更可靠更容易扩展。 HubSpot 在 Mesos 上创建了 Singularity 框架,并且构建 了平台即服务(Platform-as-a-Servie,PaaS)来促进服务的标准化部署。

Airbnb

Airbnb 是社区驱动的租赁公司,也是 Mesos 的最早使用者之一。 Airbnb 在 Mesos 上使 用 Hadoop、 Spark、 Kafka 及 Cassandra 和 Rails 这样的服务来完成数据分析。 Airbnb 也为 Mesos 创建了 Chronos 调度框架,本书会在第 5 章里详细讨论 Aurora 和 Chronos。

Twitter 的代码构建在 Ruby on Rails 和 JBoss-esque 框架上, 天生就是基于服务的, 而 Airbnb,从另一方面,更多地使用 Mesos 进行数据处理,天然是 ETL。 Twitter 在私有基 础架构上,使用 Solaris Zone 将 Mesos 运行在物理硬件上。 而 Airbnb 使用 AWS 上基于 VMware 和 Xen hypervisor 的虚拟机。这些案例都有力地证明了 Mesos 提供了通用且易于使 用的 API,能够胜任现代分布式基础框架的内核这一角色,可以在多种不同的硬件上运行, 并在其上为多种框架提供服务。

邮件列表

在 http://mesos.apache.org/documentation/latest/ 上有很多与 Mesos 相关的在 线文档,详细讲解了 Mesos 的绝大部分内容。 当文档信息不够时,Mesos 的用户邮件列表 是很好的平台,它使用户可以和其他成员交互,也是 Mesos 社区的关键组成部分。 用户邮 件列表(user@mesos.apache.org)和开发者邮件列表(dev@mesos.apache.org)都 非常活跃,可以讨论 Mesos 的开发和使用问题。

小结

本章首先讲解了现代集群管理框架的概述,随后又演示了如何搭建 Mesos 集群。 至此,已 经可以在 Mesos 上运行多种框架了,接下来的几章会对它们进行深入介绍。 下一章将介绍 Mesos 上的 Hadoop 框架。



《Mesos:大数据资源调度与大规模容器运行最佳实践》已经在京东上线,点击左下角原文链接可以购买本书。

以上是关于运行Mesos的主要内容,如果未能解决你的问题,请参考以下文章

一言不合秀代码 | 怎样写好Mesos Framework

Airflow 中文文档:使用Mesos扩展(社区贡献)

Mesos 能在 Windows Server 上运行了!

spark运行模式

集群管理器 Mesos 能在 Windows Server上运行了

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