Mesos 实战-1:Mesos 起步
Mesos
Mesos 是一套成熟的分布式资源管理系统,应用场景非常广泛。
今天我们来学习 Mesos 的基本架构原理,并亲自动手部署一套 Mesos 集群环境。
Mesos 架构之基本概念
首先我们来看看,一个典型的 Mesos 集群包含的组件,以及各组件之间的关系。
以下是 Mesos 架构示意图:
从图中可以看出 master 和 agent 进程,可以看到有执行任务所需的 framework,以及存储集群元数据的 zookeeper。
Master 和 Agent
Mesos 的进程包含 master 和 agent 两种角色。
master 管理整个集群的资源,依据策略为各个框架分配资源,调度所有节点少的 agent 进程。
agent 汇报并注册节点的资源状况,并管理本地执行的计算任务,启动/停止计算进程。
Mesos Framework
计算任务通过 Mesos 框架的形式提交到 mesos 集群。
Mesos 框架包括两部分:在 master 节点上注册的任务调度器 scheduler,和在 agent 上运行的任务进程 worker。
在分配资源方案,mesos-master 进程和 scheduler 有不同的分工。
分配资源时,master 决定给框架分配多少
资源,scheduler 则从拿到的资源中具体来选择使用哪个
资源来创建任务。
分配资源后,框架将任务的描述信息发给 mesos,由 mesos 调度在对应的 agent 上启动计算任务。
Zookeeper 和 HA
Zookeeper 在生产系统中用于存储元数据。
生产环境中,通过多节点的 Zookeeper 方案可以保证元数据达到较高可用性。 一般部署奇数个(3/5/7) Zookeeper 节点。 数量为奇数是为了防止选举 leader 时出现脑裂。 对于不同级别的可用性要求,一般部署 3 或者 5 个即可满足需求。
关于 zookeeper 集群,可以参考 zookeeper 官方文档。
Mesos 之动手实践
方案
先确定下我们目标,部署一个基本的 Mesos 集群环境,包含的组件:
- 1个 Zookeeper 进程
- 1个 mesos-master 进程
- 1个 mesos-agent 进程
系统环境
我们使用 mesosphere 提供的安装包,在 CentOS 7 系统上安装 mesos 及相关工具。
yum install -y http://repos.mesosphere.com/el-testing/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm && \
yum update -y && \
yum install -y mesos mesosphere-zookeeper
如果有 docker 环境,还可以直接用这个事先做好的 docker 镜像来试用:
docker pull liulantao/mesos
docker run -i -t —rm —entrypoint /bin/bash liulantao/mesos
启动 Zookeeper
启动 zookeeper。 命令如下:
service start zookeeper
默认的 zookeeper 访问地址为 zk://127.0.0.1:2181
。
生产环境中,zookeeper 一般需要多节点组成高可用集群,可以参考官方文档对配置文件进行修改。
启动 mesos-master
启动 mesos master,指定使用 zookeeper 的访问地址,并指定本地工作目录。 命令如下:
mesos-master --quorum=1 --zk=zk://127.0.0.1:2181/mesos --ip=127.0.0.1 --work_dir=/var/lib/mesos/master
可以使用额外参数,如 --hostname
指定主机名或 ip,--cluster
指定集群名。
更多启动选项请参考:Mesos Configuration。
Mesos master UI
mesos master 启动时进程会监听在指定的端口,默认是 5050。
所以,刚启动的 master 地址就是 http://127.0.0.1:5050
。
在浏览器打开 http://127.0.0.1:5050,可以看到 mesos 管理界面。
在这个界面里,我们能看到整个集群的资源分配情况和框架的状态。 现在所有资源还是空,也没有任何进程。
启动 mesos-agent
启动 mesos agent,指定 master 地址,指定工作目录。 命令如下:
mesos-agent --master=127.0.0.1:5050 --work_dir=/var/lib/mesos/slave
可以使用额外参数,如 --containerizers
指定支持的容器技术。
更多启动选项请参考:Mesos Configuration。
再打开 master UI,可以看到 Agents 数量变为 1。点击顶部的 Agents
标签,可以看到新加入的 agent 信息。
测试
安装测试框架
官方提供的测试框架例子在源码的 src/examples/java
目录下。
源码包可以通过下载 tar 包或者 Github 获得。
# 安装依赖包
$ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
$ sudo yum install -y epel-release
$ sudo yum groupinstall -y "Development Tools"
$ sudo yum install -y apache-maven python-devel 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 maven
# 切换到源码目录
$ cd mesos
# 项目准备工作
$ ./bootstrap
# 开发进行编译
$ mkdir build && cd build
$ ../configure
$ make
执行测试框架
在 build 目录下,执行测试框架,命令如下:
./src/examples/java/test-framework 127.0.0.1:5050
执行完毕后,进程会自动退出。
查看测试结果
从 Master UI 上,打开 Frameworks
标签页,有 Completed Frameworks
一栏有执行成功的记录。
点击 framework id 进入详情页,能看到框架下各个 task 执行成功的情况。
总结
通过以上过程,我们学会了:
- Mesos 架构的基本概念
- master 和 agent
- framework
- zookeeper 和 HA
- 实践
- 安装 mesos
- 启动 mesos-master
- 使用 mesos-ui
- 启动 mesos-agent
- 运行测试 framework