【Docker篇四】Mesos+Zookeeper+Marathon+Docker实战实验

Apache Mesos概述

不同的分布式运算框架(spark,hadoop,ES,MPI,Cassandra,etc.)中的不同任务往往需要的资源(内存,CPU,网络IO等)不同,它们运行在同一个集群中,会相互干扰,为此,应该提供一种资源隔离机制避免任务之间由资源争用导致效率下降,考虑到资源利用率,运维成本,数据共享等因素,公司一般希望将所有这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样,便诞生了资源统一管理与调度平台,典型的代表就是mesos.

Apache Mesos工作原理

Apache Mesos采用了master/slave结构来简化设计,将master尽可能做的轻量级,仅保存了各种计算框架(Farmemork)和mesos slave的状态信息,这些状态容易在出现故障的时候被重构,除此之外,mesos还可以使用zookeeper解决master单点故障问题。

Mesos Master充当全局资源调度器角色,采用某种策略算法将某个slave上的空闲资源分配给某个Farmework,而各种Farmework则是通过自己的调度器向master注册进行接入Mesos Slave则是收集任务状态和启动各个Farmework和Executor。原理图如下:

实验环境

安装Apache Mesos

在每一台服务器上安装Apache Mesos服务,由于mesos安装等待时间较长,本文在实验环境下选择使用一台安装好mesos的虚拟机进行克隆,然后进行后续操作。

1、配置Java环境

  • 由于软件需求,mesos运行环境需要在Linux内核版本为3.10以上才可使用。

cat /etc/redhat-release //查看Linux版本
uname -r/a //查看内核版本

  • 解压jdk软件包

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
cd /usr/local
mv jdk1.8.0_91/ java

  • 配置jdk环境变量

vim /etc/profile

export JAVA_HOME=/usr/local/java    //末尾追加
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

source /etc/profile

2、安装相关环境包

  • 安装开发工具

yum groupinstall -y "Development Tools"

  • 添加apache-maven源,为Mesos提供项目管理和构建自动化工具的支持。

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

  • 安装相关依赖包

yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel

  • 配置WANdiscoSVN网络源

vim /etc/yum.repos.d/wandisco-svn.repo

[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
  • 配置Mesos环境变量

vim /etc/profile

export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so

3、构建Mesos

wget http://www.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz

tar zxvf mesos-0.25.0.tar.gz -C /opt/
mv mesos-0.25.0/ /root/
cd /root/mesos-0.25.0
mkdir build
cd /build 创建build为编译安装目录
../configure 执行安装程序

make 等待时间较长(需要服务器保持在线状态)
make check
make install

  • 此处安装好mesos软件后即可克隆主机。

配置单台Mesos-master与Mesos-Slave

Mesos-Master负责维护slave群集的心跳,从slave提取资源信息。配置之前需要做好相应的解析工作。

1、配置Mesos-master

  • 修改主机名称

hostnamectl set-hostname master

vim /etc/hosts

192.168.144.114 master    //此时只做单台master与slave,若遇多台则解析内容需要增加
192.168.144.119 slave1

bash 刷新生效主机名,或者重启服务器

  • 创建master启动命令软连接

ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master

  • 启动mesos-master

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0

--work_dir 指定工作目录
--log_dir  指定日志生成位置
--no-hostname_lookup 不指定域名解析
--ip=0.0.0.0 任意网段均可访问
  • 本地验证访问mesos开启状态,浏览器打开http://192.168.144.114:5050/

2、配置Mesos-slave

  • 修改主机名称

hostnamectl set-hostname slave1
vim /etc/hosts

192.168.144.114 master    //此时只做单台master与slave,若遇多台则解析内容需要增加
192.168.144.119 slave1
  • 创建slave启动命令软连接

ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave

  • 安装docker,由于slave需要接受master的调度执行容器运行,因此需要安装docker

yum install docker -y
systemctl start docker.service
systemctl enable docker.service

  • 启动slave

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.175.132:5050 --no-hostname_lookup --ip=0.0.0.0

--containerizers="mesos,docker"  添加容器参数,使docker的容器可以被配置去执行任务或者执行器。
  • 启动slave后,再次访问mesos-matser,可以看到已有一台slave上线,且可看到详细信息。

配置多台Mesos-Master+Slave+zookeeper+marathon

1、配置多台Mesos-master

  • 配置多台master方式与单台方式相同,唯一区别在于修改域名解析文件/etc/hosts
  • 三台mesos-master配置完全相同,只是最后启动时需要指定本身IP这点不同

vim /etc/hosts

192.168.144.114 master
192.168.144.117 master1
192.168.144.118 master2
192.168.144.119 slave1
192.168.144.120 slave2
  • 使用hostnamectl将主机名修改成master、master1和master2
  • mesos-master配置完成暂时不要启动,当后面配置完、启动zookeeper后再启动

2、配置多台Mesos-slave

  • 配置方式如同单台slave配置方式,只有/etc/hosts文件需要添加,并且也需要安装docker,并且启动服务。

vim /etc/hosts

192.168.144.114 master
192.168.144.117 master1
192.168.144.118 master2
192.168.144.119 slave1
192.168.144.120 slave2

3、在所有master上安装zookeeper

  • 每一台master上的zookeeper配置文件都相同,配置文件修改也相同,需要指定有哪一些master安装了zookeeper

tar zxvf zookeeper-3.4.13.tar.gz -C /home/q/

cd zookeeper-3.4.13/

mv conf/zoo_sample.cfg conf/zoo.cfg 注意sample.cfg与zoo.cfg只能存在一个,只能识别一个cfg

  • 在其中一台master上操作

cd /home/q/zookeeper-3.4.13/conf

vim zoo.cfg

dataDir=/home/q/zookeeper-3.4.6/data            //修改数据存放目录
dataLogDir=/home/q/zookeeper-3.4.6/datalog      //日志文件位置
server.1=192.168.144.114:2888:3888              //server后面跟上区分每一台master标识
server.2=192.168.144.117:2888:3888
server.3=192.168.144.118:2888:3888
  • 将修改好的配置文件传输给其他master,切记先将原有sample配置文件重命名或者删除

scp zoo.cfg 192.168.144.117:/home/q/zookeeper-3.4.13/conf/
scp zoo.cfg 192.168.144.118:/home/q/zookeeper-3.4.13/conf/

  • 为每台master设置标识
//在master主机上操作(/home/q/zookeeper-3.4.13/中)
mkdir data datalog
echo 1 > data/myid
cat data/myid

//在master1主机上操作(/home/q/zookeeper-3.4.13/中)
mkdir data datalog
echo 2 > data/myid
cat data/myid 

//在master2主机上操作(/home/q/zookeeper-3.4.13/中)
mkdir data datalog
echo 3 > data/myid
cat data/myid
  • 启动所有master上的zookeeper
cd /home/q/zookeeper-3.4.13/
//在master主机上启动服务
./bin/zkServer.sh start conf/zoo.cfg 

//在master1主机上启动服务
./bin/zkServer.sh start conf/zoo.cfg

//在master2主机上启动服务
./bin/zkServer.sh start conf/zoo.cfg

//查看leader
./bin/zkServer.sh status
  • 启动所有master和slave上的mesos服务
//master
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.144.114:2181/mesos --quorum=2   //想要在后台运行后面加上&>/dev/null &即可

//master1
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.144.117:2181/mesos --quorum=2

//master2
mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.144.118:2181/mesos --quorum=2

-----------------------
//在slave1上
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.144.114:2181,192.168.144.117:2181,192.168.144.118:2181/mesos --no-hostname_lookup --ip=0.0.0.0

//在slave2上
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.144.114:2181,192.168.144.117:2181,192.168.144.118:2181/mesos --no-hostname_lookup --ip=0.0.0.0

4、在所有master上安装marathon

  • 下载marathon软件压缩包

wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

tar zxvf marathon-0.15.2.tgz -C /home/q/

  • marathon软件包不需要安装,解压后即可使用,所有master上安装好marathon后,每台启动方式如下
  • 每台mastermarathon启动hostname后面跟上自己ip以及zookeeper区域所有服务器ip
./bin/start --hostname 192.168.144.114 --master zk://192.168.144.114:2181,192.168.144.117:2181,192.168.144.118:2181/mesos --http_address 0.0.0.0

./bin/start --hostname 192.168.144.117 --master zk://192.168.144.114:2181,192.168.144.117:2181,192.168.144.118:2181/mesos --http_address 0.0.0.0

./bin/start --hostname 192.168.144.118 --master zk://192.168.144.114:2181,192.168.144.117:2181,192.168.144.118:2181/mesos --http_address 0.0.0.0

查看任务执行情况。

使用mesos与marathon创建docker集群

vim nginx.json

{
"id":"/nginx",
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",
"network":"HOST",
"parameters":[],
"privileged":false,
"forcePullImage":false
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}
  • 在其中一台master上新建终端执行

curl -X POST -H "Content-type:application/json" http://192.168.144.114:8080/v2/apps [email protected]

  • 在任务发布指定的slave上使用命令 ps aux | grep docker 查看到nginx正在下载
root       3668  0.0  0.6 121912 12872 pts/0    Sl+  10:20   0:00 /usr/bin/docker-current -H unix:///var/run/docker.sock pull nginx:latest
  • 此时也可去master上的marathon网站去查看任务是已下发执行。

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx     latest              c82521676580        3 weeks ago         109 MB

docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
9940ac858a3b        nginx               "nginx -g ‘daemon ..."   3 minutes ago       Up 3 minutes                            mesos-0d21cffd-8a12-450d-b6ff-4d4befcdaad0-S1.89e29728-37cb-4ea3-9518-2d9741ba7618

测试其中一台slave

http://192.168.144.119访问到Nginx首页即实验完成

原文地址:http://blog.51cto.com/13659253/2162145

时间: 2024-09-28 16:35:20

【Docker篇四】Mesos+Zookeeper+Marathon+Docker实战实验的相关文章

部署Mesos+zookeeper+Marathon+Docker实战

Mesos是什么? Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核.Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源.提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点.Mesos已经被Twitter用来管理它们的数据中心.?Mesos中的基本术语解释: 1)Mesos-master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework

Mesos+Zookeeper+Marathon+Docker分布式集群管理最佳实践

参考赵班长的unixhot以及马亮blog 笔者QQ:572891887 Linux架构交流群:471443208 1.1Mesos简介 Mesos是Apache下的开源分布式资源管理框架,它被称为分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开发,后在Twitter得到广泛使用. Mesos-Master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework. Mesos-Slave:负责管理本节点上的各个mesos-task

docker云方案——搭建Mesos+Zookeeper+Marathon的Docker管理平台

服务器架构 机器信息: 这里部属的机器为3个Master控制节点,3个slave运行节点,其中: zookeeper.Mesos-master.marathon运行在Master端:Mesos-slave和docker运行在Slave端:需要修改zk的内容来保证slave能够被发现和管理 构建环境 配置mesos-master(3台master节点都要操作) # 关闭selinux [[email protected] ~]# sed -i '/SELINUX/s/enforcing/disab

docker第四天:制作docker镜像——手工制作docker镜像

制作Docker镜像的方式一般有两种:手工制作和通过Dockerfile制作,此次讲解的是手工制作docker镜像. 一.手动制作镜像: 用centos镜像启动容器: [[email protected]_0_12_centos ~]# docker run -it centos bash 2. 在容器中安装网络管理工具: [[email protected] /]# yum -y install net-tools iproute 3. 将修改后的容器保存为镜像: 先按ctrl+p+q后台运行

Docker云Paas平台部署:Docker+Mesos+Marathon

针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发展,又给大规模集群管理带来了新的想象空间. 如何将二者进行有效地结合? 本人将以实验的角度来部署mesos + marathon的docker集群 一.谈谈mesos Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核.Mesos最初是由加州大学伯克利分校的AMPLab开

Mesos+Marathon docker 集群管理

前面我们了解了docker常见的操作和部署方法,在企业中,如果要大规模使用docker就不能通过纯手工的方式去维护和部署了.目前比较流行的有两种解决方案,一种是使用 Mesos+Marathon+docker的方式对集群中的容器进行管理,另一种方式是使用Kubernetes,就目前Kubernetes有引领行业的趋势,但是对于小型的集群管理,mesos符合传统主从架构,更加简单. Mesos介绍 Mesos容器管理的理念个人觉得类似于OpenStack, 通过master将整个集群的资源搜集起来

[徐培成系列实战课程]-docker篇-前序

[徐培成系列实战课程]docker篇如何利用docker快速构建Spark独立模式的集群1.介绍利用docker容器技术快速构建跨节点的独立模型的Spark大数据集群.Spark是时下非常热门的大数据计算引擎,现在apche官方网站已经更新至2.3.1的版本,而且热度居高不下.很多企业越来越多的倾向于使用spark进行海量数据处理,主要是源于其高效快速的架构设计. docker也是非常热门的虚拟化技术,而且发展趋势也是越来越强大,源于其超轻量级的部署和低资源消耗著称,对于大数据从业人群,两者组合

mesos+mrathon+zookeeper的docker管理集群亲手搭建实例(详细)

1:规划(5master+3slave) master: 10.64.5.184 ---master1 10.64.5.185 ---master2 10.64.5.186 ---master3 10.64.5.187 ---master4 10.64.5.188 ---master5 slave: 10.64.5.170 ---slave1 10.64.5.172 ---slave2 10.64.5.167 ---slave3 2:配置master节点     (1)关闭防火墙 master1

深入浅出Docker(四):Docker的集成测试部署之道

1. 背景 敏捷开发已经流行了很长时间,如今有越来越多的企业开始践行敏捷开发所提倡的以人为中心.迭代.循序渐进的开发理念.在这样的场景下引入Docker技术,首要目的就是使用Docker提供的虚拟化方式,给开发团队建立一套可以复用的开发环境,让开发环境可以通过Image的形式分享给项目的所有开发成员,以简化开发环境的搭建.但是,在没有Docker技术之前就已经有类如Vagrant的开发环境分发技术,软件开发者一样可以创建类似需求的环境配置流程.所以在开发环境方面,Docker技术的优势并不能很好