一、Mesos是啥?
概念
Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核,目标是在不同的framework之间高效的共享硬件资源,同时简化自身的调度逻辑,使其具有尽可能大的兼容性和可扩展性,以保证在大规模集群使用环境下的健壮性和对各种可能的运算框架的普遍适用性。
个人理解:相当于是一个简单的操作系统,将一个个分散的节点聚合起来,形成一个巨大分布式操作系统,并提供的资源管理和硬件分配的功能, 让分布式集群中简化了资源使用和分配,使得多个应用同时运行在集群中分享资源,并无需关心资源的物理分布情况。
Mesos节点类型
-
总控节点Mesos-master:负责管理各个framework和slave ,并将slave 上的资源分配给各个framework框架,并管理这任务的生命周期,主要任务是资源分配和管理
-
计算节点Mesos-slave:负责执行framework发送过来的任务,主要是执行任务
Framework介绍
-
Mesos提供的是 Framework的接口,而不是一个具体的Framework实现,Mesos为开发人员提供了一套分布式的SDK,开发人员基于这套SDK可以开发相关的Framework。如:Marathon, Hadoop , Spark等
-
调度器
负责与mesos-master进行通信获取资源,并协调slave上的执行器工作
-
执行器
执行器,安装到mesos-slave上,用于启动计算框架中的task,执行具体的任务
Mesos调度流程解析
“ 1.集群中的所有slave节点会和master定期进行通信,将自己的资源信息同步到master,master由此获知到整个集群的资源状况
2.mater会和已注册、受信任的Framework进行交互,定期将最新的资源情况发送给Framework,当Framework前端有工作需求时,将选择接收资源,否则拒绝
3.前端用户提交了一个工作需求给Framework
4.Framework接收slave master发过来的资源信息
5.Framework依据资源信息向slave发起任务启动命令,开始调度工作
Mesos是经典的二层架构,Master只负责管理资源,Framework负责任务调度,它们两者都可以直接给slave通信;Master保持着通用性,轻量性,它和Framework、Slave之间的的交互更多的是状态信息同步;在Slave上有两类进程:一类为Manager,用来与Master通信,交互状态信息,另一类则是由Framework实现的具体Executor,它负责任务的运行,对于Manager而言,他看到的所有Executor、Task都是一致的容器,而不管这些任务具体执行什么样的业务逻辑”
以上引用于网络资料,看的人都能懂,我就不再阐述
Mesos框架支持
- DevOps工具
- 长运行服务
- 大数据处理
- 批处理调度
- 数据存储
- 机器学习
二、Mesos安装
-
需要安装好Zookeeper
-
服务规划
IP 功能 192.168.9.61 Master集群 192.168.9.62 Master集群 192.168.9.63 Master集群
-
下载(参考官方文档)
官方:mesos.apache.org/documentati…
$ wget http://archive.apache.org/dist/mesos/1.4.1/mesos-1.4.1.tar.gz $ tar -zxf mesos-1.4.1.tar.gz -
安装必要条件,参考官网我目前是centos7
# 安装一些实用工具 $ sudo yum install -y tar wget git # 获取 Apache Maven repo 文件。 $ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo # 安装 EPEL 存储库,以便我们可以将“libserf-1”作为我们的一部分 # subversion 安装如下。 $ sudo yum install -y epel-release # 'Mesos > 0.21.0' 需要 'subversion > 1.8' 开发包, # 这在默认存储库中不可用。 # 创建一个 WANdisco SVN repo 文件来安装正确的版本: # 复制-------------------- $ sudo bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo <<EOF [WANdiscoSVN] name=WANdisco SVN Repo 1.9 enabled=1 baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/ gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco EOF' # -------------------结束 # 部分 Mesos 需要 systemd 才能运行。然而,Mesos # 仅支持包含“Delegate”标志的 systemd 版本。 # 这个标志是在'systemd version 218'中首次引入的,它是 #低于centos安装的默认版本。幸运的是,centos # 7.1 有一个补丁“systemd < 218”,其中包含“Delegate”标志。 # 显式更新 systemd 到这个补丁版本。 $ sudo yum update systemd -y # 安装必要的开发工具。 $ sudo yum groupinstall -y "Development Tools" # 安装其他 Mesos 依赖项。 $ sudo yum install -y apache-maven python-devel python-six python-virtualenv java-1.8.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel -
编译安装(单节点)
# 进入Mesos目录 $ cd mesos # Bootstrap(仅当从 git 存储库构建时才需要)。 $ ./bootstrap # 配置和构建 $ mkdir build $ cd build $ ../configure $ make check $ make && make install
三、Mesos-master安装(集群)
| IP | 功能 |
|---|---|
| 192.168.9.61 | Master节点 |
| 192.168.9.62 | Master节点 |
| 192.168.9.63 | Slave节点 |
| 192.168.9.64 | Slave节点 |
编译打包分发
- 第二节中我在61安装的mesos,需要将编译好的mesos进行打包,分发到计划好的master节点
tar -zcvf mesos-1.11.0.1build.tar.gz mesos-1.11.0
scp mesos-1.11.0.1build.tar.gz root@192.168.9.62:/root/app/
Mesos配置项
- 官方配置介绍:mesos.apache.org/documentati…
- mesos master和slave可以通过命令行参数或环境变量来传递一系列的配置选项
- 执行命令的时候使用--option_name=value来传递配置选项
- 通过设定环境变量MESOSOPTION_NAME(变量名都以MESOS 开头)执行时会先读取环境变量,然后才看命令行参数
- 以上两种根据个人需求来定,本文用的是命令传递
公共配置项
| 配置项(部分常用) | 说明 |
|---|---|
| --ip=VALUE | 监听IP地址 |
| --port=VALUE | 监听端口 |
| --log_dir=VALUE | 存放日志文件的位置 |
| --logging_level=VALUE | 输出高于此级别的日志消息。可能的值:INFO、WARNING、ERROR |
| --quorum=VALUE | 使用基于replicated-Log的注册表时,复制的个数。此值需要设置为masters总数量的一半以上,也就是: quorum > (number of masters)/2 |
| --work_dir=VALUE | 工作目录 |
| --zk=VALUE | ZooKeeper 的 URL地址(用于在masters中做领导选举) |
Master配置项
| 配置项(部分常用) | 说明 |
|---|---|
| --quorum=VALUE(必选) | 使用基于replicated-Log 的注册表时,复制的个数。此值需要设置为masters总数量的一半以上,也就是:quorum >(number of masters |
| --work_dir=VALUE(必选) | 工作目录 |
| --zk=VALUE(必选) | ZooKeeper的URL地址(用于在masters中做领导选举) |
Slave配置项
| 配置项(部分常用) | 说明 |
|---|---|
| --master=VALUE(必选) | Master地址 |
| --work_dir=VALUE(必选) | 工作目录 |
| --containerizers=VALUE | 由逗号分隔的容器化实现方式列表。可选项有mesos , external , and docker (on Linux).排列的顺序就是容器化过程中尝试的顺序。(默认: mesos) |
Mesos启动
- 检查Zookeeper是否开启
[root@localhost bin]# sh zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/app/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
- 启动mesos
安装Marathon
Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用。
-
要求
- Apache Mesos 1.0.1+
- Apache ZooKeeper
- JDK 1.8+
- Default JVM set to Java 8
-
下载并解压最新的 Marathon 版本。
$ curl -O http://downloads.mesosphere.com/marathon/v1.5.1/marathon-1.5.1.tgz $ tar xzf marathon-1.5.1.tgz -
在高可用性模式下运行
ZooKeeper 和 Mesos 都需要运行才能以 启动 Marathon 高可用性模式 。
$ ./bin/marathon --master zk://zk1.foo.bar:2181,zk2.foo.bar:2181/mesos --zk zk://zk1.foo.bar:2181,zk2.foo.bar:2181/marathonMarathon用途
--master找到 Mesos 主节点,以及--zk寻找zookeeper用于存储状态。 它们是单独的选项,因为 Mesos 主节点也可以是 以其他方式发现。
四、Mesos-slave安装
未完待续~