mesos采用master/slave模式,master负责管理slave以及各个framework,另外也负责相关的资源调度。
本文单机版的安装在ubuntu操作系统上进行,安装的mesos版本为0.28
(1)基础环境准备
sudo apt-get update
sudo apt-get install -y tar wget git
sudo apt-get install -y openjdk-7-jdk
sudo apt-get install -y autoconf libtool
sudo apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev
(2)下载安装包
wget http://www.apache.org/dist/mesos/0.28.0/mesos-0.28.0.tar.gz
tar -zxf mesos-0.28.0.tar.gz
(3)编译安装
cd mesos-0.28.0
./configure
make #可以采用make -j 4加速编译过程,4为并行数目。
make check #运行测试用例
make install
(4)启动mesos
#启动master进程,默认监听5050端口,启动后就可以通过浏览器访问“http://127.0.0.1:5050”查看集群相关信息了。
mesos-master --ip=127.0.0.1 --work_dir=/var/lib/mesos
#启动slave进程
mesos-slave --master=127.0.0.1:5050
mess源码中自带了几个测试用的framework,包括C、python、java三种语言。
#运行C语言写的test framework
./mesos-0.28.0/build/src/test-framework --master=127.0.0.1:5050
#运行java写的test framework,该test framework的源码位置mesos-0.28.0/src/examples/java/
./mesos-0.28.0/build/src/examples/java/test-framework 127.0.0.1:5050
#运行python写的test framework,源码位置:./mesos-0.28.0/src/examples/python/,
./mesos-0.28.0/build/src/examples/python/test-framework 127.0.0.1:5050
进入到./mesos-0.28.0/src/examples/python/目录,可以发现该test framework包含两个文件:
test_framework.py test_executor.py
其中test_framework.py就是framework的scheduler,test_executor.py是framework的executor
我们直接运行:python test_framework.py 127.0.0.1:5050
会报错:
Traceback (most recent call last):
File "test_framework.py", line 23, in <module>
import mesos.interface
ImportError: No module named mesos.interface
这是因为mess python找不到,通过find查找mess,发现mess的python库安装在‘/usr/local/lib/python2.7/site-packages/’
把该路径加入PYTHONPATH即可,
如下:PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH python test_framework.py 127.0.0.1:5050
不过显示任务执行失败,我们登录127.0.0.1:5050,在slave的completed framework列表中找到该次的执行,在completed executor列表中查看对应executor的错误输出stderr,显示“sh: 1: /root/mesos-0.28.0/src/examples/python/test-executor: not found”
这是因为slave找不到要执行的executor导致的,编辑test_framework.py 将里边的‘./test-executor’改为’./test_executor.py’
之后执行就没有问题了。
mesos采用master/slave模式,master负责管理协调各个slave并负责资源的调度,slave负责在容器(container)中执行相关的任务。
具体来看,master负责:
(1)记录系统中所有的任务信息
mesos将平台上所有的任务信息都记录在内存中,因此master节点应该由充足的内存。
(2)负责给不同的framework分配资源
每个framework在启动时都会以一定的角色(ROLE)运行,通过给不同的ROLE设置不同的权重,来实现资源的分配。
假如平台有三种角色(ROLE):dev、qa、prod,在启动master时,我们可以通过添加选项 - -roles=dev,qa,prod,通过选项--weights='dev=2,qa=1,prod=3'可以设置三种角色的权重。
(3)负责平台的高可用以及failover
master是整个平台的单点,为实现高可用,mesos基于zookeeper来实现多节点master,通过zookeeper来实现master的高可用和failover。
slave负责:
(1)管理运行executor的容器(包括lxc、docker等)
(2)将executor的相关信息汇报给master,充当executor和master沟通的中介。
(3)上报slave节点相关的信息,包括运行的任务、executor、可用的资源等
mesos slave在启动时会向master上报当前节点的可用CPU、内存、磁盘资源等资源,当然为了保证slave进程的正常运行,slave会为自己保留一定数量的资源。除了上报资源情况外,slave还可以上报任意的key/value数据,例如,当前节点的磁盘类型、CPU类型以及所在的rack等信息给master,以便master实现类似机架感知(rack awareness)调度等功能。
(4)支持当前slave状态的快照和恢复
slave可以将自己的当前状态以及任务和executor的状态做快照,当重启一个slave节点的时候,会从快照文件中读取相关状态,并且重新连接当前运行的executor,通过这种方式,重启slave不影响任务的执行。