首页 > 代码库 > Mesos&Marathon实现容器部署
Mesos&Marathon实现容器部署
mesos&marathon架构说明
Mesos实现了两级调度架构,它可以管理多种类型的应用程序。第一级调度是Master的守护进程,管理Mesos集群中所有节点上运行的Slave守护进程。集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如Hadoop和MPI作业。第二级调度由被称作Framework的“组件”组成。Framework包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器。Mesos能和不同类型的Framework通信,每种Framework由相应的应用集群管理。上图中只展示了Hadoop和MPI两种类型,其它类型的应用程序也有相应的Framework。
Mesos Master协调全部的Slave,并确定每个节点的可用资源, 聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework(作为Master的客户端)发出资源邀约。Framework可以根据应用程序的需求,选择接受或拒绝来自master的资源邀约。一旦接受邀约,Master即协调Framework和Slave,调度参与节点上任务,并在容器中执行,以使多种类型的任务,比如Hadoop和Cassandra,可以在同一个节点上同时运行.
mesos的体系结构和工作流
Slave是运行在物理或虚拟服务器上的Mesos守护进程,是Mesos集群的一部分。
Framework由调度器(Scheduler)应用程序和任务执行器(Executor)组成,被注册到Mesos以使用Mesos集群中的资源。
Slave 1向Master汇报其空闲资源:4个CPU、4GB内存。然后,Master触发分配策略模块,得到的反馈是Framework 1要请求全部可用资源。
Master向Framework 1发送资源邀约,描述了Slave 1上的可用资源。
Framework的调度器(Scheduler)响应Master,需要在Slave上运行两个任务,第一个任务分配<2 CPUs, 1 GB RAM>资源,第二个任务分配<1 CPUs, 2 GB RAM>资源。
最后,Master向Slave下发任务,分配适当的资源给Framework的任务执行器(Executor),接下来由执行器启动这两个任 务(如图中虚线框所示)。 此时,还有1个CPU和1GB的RAM尚未分配,因此分配模块可以将这些资源供给Framework 2。
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&marathon安装说明如下:
服务器角色说明
master ——>192.168.229.128 ——> zookeeper,mesos-master,mesos-slave,marathon,docker slave1 ——>192.168.229.132 ——> zookeeper,mesos-master,mesos-slave,marathon,docker slave2 ——>192.168.229.133 ——> zookeeper,mesos-master,mesos-slave,marathon,docker
修改hostname和绑定hosts
echo "master" > /etc/hostname #192.168.229.128 echo "slave1" > /etc/hostname #192.168.229.132 echo "slave2" > /etc/hostname #192.168.229.133 cat /etc/hosts #三台机器都需要绑定 192.168.229.128 master 192.168.229.132 slave1 192.168.229.133 slave2 重启系统,使之生效
版本说明
mesos-1.0.1 marathon-1.1.1 zookeeper-3.4.6 docker-1.11.2
mesos安装
tar -zxvf mesos-1.0.1.tar.gz cd mesos-1.0.1 mkdir build cd build ../configure make -j8 make check make install 编译过程中出现的问题: 1.找到libmesos.so文件所在目录,这里是拷贝到/usr/local/lib目录下 2.在/etc/ld.so.conf中加入include /usr/local/lib 3.执行/sbin/ldconfig –v 更行配置文件 find / -name libmesos-1.0.1.so vim /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf #添加 include /usr/local/mesos-1.0.1/build/src/.libs/ /sbin/ldconfig -v
marathon安装
tar -zxvf marathon-1.1.1.tgz cd marathon-1.1.1/bin 启动marathon,出现报错内容如下: mesos-master marathon[3611]: Exception in thread "main" java.lang.UnsupportedClassVersionError: mesosphere/marathon/Main : Unsupported major.minor version 52.0 解决方法:It worked. Marathon needs jdk8.
zookeeper安装
zk的安装和启动不做说明,主要配置文件如下(zoo.cfg):
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/data clientPort=2181 server.1=192.168.229.128:3888:4888 server.2=192.168.229.132:3888:4888 server.3=192.168.229.133:3888:4888
安装到此完成;
mesos master启动
192.168.229.128上: mkdir -p /data1/mesos1/ && touch /data1/mesos1/log cd /usr/local/mesos-1.0.1/build/bin &&./mesos-master.sh --ip=192.168.229.128 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas 192.168.229.132上: mkdir -p /data1/mesos1/ && touch /data1/mesos1/log cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.132 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas 192.168.229.133上: mkdir -p /data1/mesos1/ && touch /data1/mesos1/log cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.133 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas
mesos slave启动
192.168.229.128上: mkdir -p /data1/mesos_slave1/ cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --containerizers=mesos,docker --hostname=master --ip=192.168.229.128 --work_dir=/data1/mesos_slave1/ 192.168.229.132上: mkdir -p /data1/mesos_slave1/ cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --containerizers=mesos,docker --hostname=slave1 --ip=192.168.229.132 --work_dir=/data1/mesos_slave1/ 192.168.229.133上: mkdir -p /data1/mesos_slave1/ cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --containerizers=mesos,docker --hostname=slave2 --ip=192.168.229.133 --work_dir=/data1/mesos_slave1/
marathon启动
192.168.229.128上: cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon 192.168.229.132上: cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon 192.168.229.133上: cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon
使用说明
1.打开http://192.168.229.132:5050/#/ 查看
这里可以看到我们定义cluster为我们定义的paas,master server地址:192.168.229.128:5050 ,无论我们进入master,slave1,slave2 这三台任意一台中master server的地址都为192.168.229.128,这里是通过zk选举的master,如果128 挂掉后,master server会被其他服务器取代
2.查看slave资源情况
3.查看Frameworks页面,可以看到现在frameworks使用的是marathon slave1主机,同mesos master一样,这里无论marathon任何一个down掉,其他的marthon都会顶上,也是使用zk来做选举,点击slave1,即可跳转到marathon管理界面
4.访问marathon管理界面
5.创建一个docker应用,创建5个instances(前提:已将docker image存放在3台机器上,可以直接run)
点击Create Application 完成应用的创建,然后查看状态已为Runing
查看5个详细实例
点击slave1:31289,跳转到对应的应用中
到此应用部署成功,当然这些实例也可以做伸缩,具体的操作,请查阅相关文档。
本文出自 “天天向上goto” 博客,请务必保留此出处http://ttxsgoto.blog.51cto.com/4943095/1854661
Mesos&Marathon实现容器部署