是一个托管于Apache基金会的项目。旨在抽象了传统机房中全部服务器的CPU、内存存储资源,并提供了一系列的方法支持任务在多机器之间的调度和故障转移。用他们自己的话说“A distributed systems kernel”也就是说是一个分布式的内核。(就当前来说还远)。
这一次我们就从部署一个典型的Mesos集群开始,顺便提一下Mesos的几个框架类型。改日再弄一个将某某框架整合进Mesos的文档。
首先是一个典型的Mesos的逻辑图,Mesos集群主要有master和slave两个部分组成,顾名思义master提供了任务接口,并将任务发送至slave执行,master也支持备份机制,当然思路只不过是通过zookeeper这个知名的“铲屎官”来实现的。而在slaver端,在接受到了任务请求之后就会起一个excecutor执行任务,不同的任务框架对应的excecutor是不同的。同时,考虑到了安全性等因素,task并非直接执行在slave的“裸操作系统”之上,任务的执行需要启动一个相对隔离的沙盒。总而言之,就Litrin个人的理解,当下的Mesos更接近一个“基于沙盒容器技术的任务和资源调度系统”。对于资源这一块没什么说的,对于任务来说,Mesos可以通过可定制化的framework框架来执行。如图所示的,就当下来说既然Hadoop和spark这类的分布式计算如此的流行,那自然少不了对于这些个框架的支持。
说一下环境,此次我总共准备了4台Openstack虚拟机Ubuntu1404。10.239.21.100作为master, 10.239.21.202~204分别对应了slave-01~03。(之所以把IP和hostname错开分配就是为了逼疯处女座:))。由于slave和master在安装甚至于配置过程中几乎没有区别。我这次直接将master做成了image然后clone了3套slave。如果你采用物理机操作的话类似的操作要完整的重复4遍,而且要保证安装的时候使用的用户一致。
首先,准备编译环境,下载安装包
$ sudo apt-get update $ sudo apt-get install openjdk-7-jdk autoconf libtool build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev maven libapr1-dev libsvn-dev $ wget http://www.apache.org/dist/mesos/0.23.0/mesos-0.23.0.tar.gz $ tar vzxf mesos-0.23.0.tar.gz
#官方文档之前还有一步./bootstrap,实测除了会报找不到文件之外,然并卵。 $ ./configure --prefix=/usr/local/mesos $ make -j8 $ make -j8 install
文件名 | 用途 | 内容 |
masters | 所有的master节点IP地址,一行一个IP。 | 10.239.21.100 |
slaves | 同上,不过是slave节点 | 10.239.21.202 10.239.21.203 10.239.21.204 |
mesos-deploy-env.sh | 连接各个节点时需要的公共环境变量 | export SSH_OPTS=” -o ConnectTimeout=10″ #设置ssh时10秒timeout |
mesos-master-env.sh | 启动master节点时的环境变量 | IP=`ifconfig eth0 | head -2 | tail -1 | awk ‘{print $2}’ | cut -c 6-` #获取本机IPexport MESOS_ip=${IP} export MESOS_work_dir=/var/lib/mesos |
mesos-slave-env.sh | 同上,不过是slave节点 | export MESOS_master=10.239.21.100:5050 #master节点的IP和端口,5050是默认端口export MESOS_log_dir=/var/log/mesos export MESOS_work_dir=/var/lib/mesos export MESOS_containerizers=docker,mesos #卖个关子的配置 IP=`ifconfig eth0 | head -2 | tail -1 | awk ‘{print $2}’ | cut -c 6-` #在这里的环境变量将会在slave的沙河中生效 |
$ mkdir -p /var/log/mesos $ mkdir -p /var/lib/mesos
$ mkdir ~/.ssh $ cd ~/.ssh $ ssh-keygen $ cat id_rsa.pub >> authorized_keys
$ cd /usr/local/mesos/sbin $ ./mesos-start-cluster.sh Starting mesos-master on 10.239.21.100 ssh -o ConnectTimeout=2 10.239.21.100 /usr/local/mesos/sbin/mesos-daemon.sh mesos-master </dev/null >/dev/null Starting mesos-slave on 10.239.21.202 ssh -o ConnectTimeout=2 10.239.21.202 /usr/local/mesos/sbin/mesos-daemon.sh mesos-slave </dev/null >/dev/null Starting mesos-slave on 10.239.21.203 ssh -o ConnectTimeout=2 10.239.21.203 /usr/local/mesos/sbin/mesos-daemon.sh mesos-slave </dev/null >/dev/null Starting mesos-slave on 10.239.21.204 ssh -o ConnectTimeout=2 10.239.21.204 /usr/local/mesos/sbin/mesos-daemon.sh mesos-slave </dev/null >/dev/null
$ /usr/local/mesos/bin/mesos-execute --command="sleep 100" --name="test" --master=10.239.21.100:5050 I0820 09:27:48.867080 18556 sched.cpp:157] Version: 0.23.0 I0820 09:27:48.879843 18564 sched.cpp:254] New master detected at master@10.239.21.100:5050 I0820 09:27:48.881845 18564 sched.cpp:264] No credentials provided. Attempting to register without authentication I0820 09:27:48.890270 18564 sched.cpp:448] Framework registered with 20150819-122935-1679159050-5050-16243-0090 Framework registered with 20150819-122935-1679159050-5050-16243-0090 task test submitted to slave 20150818-154615-1679159050-5050-21165-S5 Received status update TASK_RUNNING for task test