Marathon+Mesos+Docker实战

Marathon+Mesos+Docker实战

  • Apache Mesos概述

Apache Mesos是一款基于多资源调度的开源集群管理套件,使容错和分布式系统更加容易使用实现,采用Master/Slave结构简化设计,将Master尽可能轻量级,进保存了Mesos Slave的状态信息

常见集群管理工具

工具 特点 优势
Apache Mesos 需要独立部署mesos-slave进程;依赖framework的功能;可管理docker容器;成本较高 应为经过许多互联网公司的大规模实践,稳定性具有保障
Docker Swarm Docker 官方群集工具,需要Docker deamon 启用tcp端口学习;Swarm的命令兼容Docker;学习成本非常低 公有云环境Machine 和 Swarm 搭配使用效率更高
Google Kubernetes 完全DOcker化的管理工具,功能迭代非常快;群集管理能力比mesos稍差 功能模块集成度高

Apache Mesos工作原理

请看下图:

Apache Mesos配置实战

实验环境:

实验环境 IP地址 内核版本3.10以上
master 192.168.179.151 3.10.0-693.el7.x86_64
master1 192.168.179.158 3.10.0-693.el7.x86_64
master2 192.168.179.159 3.10.0-693.el7.x86_64
slave 192.168.179.155 3.10.0-693.el7.x86_64
slave1 192.168.179.157 3.10.0-693.el7.x86_64

安装Apache Mesos

1:配置Java环境

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

mv jdk1.8.0_91/ java

#在/etc/profile配置环境变量
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

2:安装相关环境

(1)安装开发开发工具

//安装开发工具
yum groupinstall -y "Development Tools" 

#有时候安装开发工具的时候会出现没有相关的软件包这时候要根据报错提示先安装相关依赖包

(2)添加Apache-maven源

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

(3)安装相关依赖包

//添加依赖包
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

(4)配置WANdiscoSVN网络源

//配置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

(3)配置Mesos环境变量

vim /etc/profile

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

source /etc/profile

(4)构建Mesos

这里使用源代码方式编译安装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

../configure

make              //等待时间长(在线状态)
make check
make install    

配置多台mesos-master

#修改主机名
 hostnamectl set-hostname master

#在hosts文件里面写入三台master 两台slave的主机IP地址

vim /etc/hosts
192.168.179.151 master
192.168.179.158 master1
192.168.179.159 master2
192.168.179.155 slave
192.168.179.157 slave1
#可以直接用scp 远程复制其他四台服务器,另外两台可以在master上复制虚拟机

#建立软连接
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave

#安装docker
yum install docker -y
systemctl start docker.servicev #运行
systemctl enable docker.service #开机自启动

(1)安装Zookeeper

在三个Mesos-master节点上安装Zookeeper

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

cd zookeeper-3.4.6/

mv conf/zoo_sample.cfg conf/zoo.cfg

cd /home/q/zookeeper-3.4.6/conf

vim zoo.cfg  #修改zoo.cfg配置文件
   dataDir=/home/q/zookeeper-3.4.6/data   //修改位置
   dataLogDir=/home/q/zookeeper-3.4.6/datalog
   server.1=192.168.179.151:2888:3888
   server.2=192.168.179.158:2888:3888
   server.3=192.168.179.159:2888:3888

//在master主机上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog
echo 1 > data/myid
cat data/myid

#按照zoo.cfg配置文件的swerver1、2、3修改每台master的myid
//在master1主机上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog
echo 2 > data/myid
cat data/myid 

//在master2主机上操作(/opt/home/zookeeper-3.4.6/中)
mkdir data datalog
echo 3 > data/myid
cat data/myid

#启动
//在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

查看zookeeper状态
在zookeeper-3.4.6 低下用./bin/zkServer.sh status

启动master服务
先启动leader服务器上的zookeeper,这是采用双选举机制先zookeeper选举出个leader然后mesos第一台启动默认就是leader

//master2
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.151:2181/mesos --quorum=2 &>/dev/null &

//master
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.158:2181/mesos --quorum=2 &>/dev/null &

//master1
mesos-master --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.179.159:2181/mesos --quorum=2 &>/dev/null &

启动mesos-slave

slave

mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

slave1
mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

slave2

mesos-slave --containerizers="mesos,docker" --work_dir=/opt/home/mesos/data --log_dir=/opt/home/mesos/logs --master=zk://192.168.179.151:2181,192.168.179.158:2181,192.168.179.159:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &

部署Marathon

#用wget下载Marathon安装包
wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

#解压到/opt/hone目录底下
tar zxvf marathon-0.15.2.tgz -C /opt/home

#开启服务指定zk地址池
#在/opt/home/marathon-0.15.2/解压目录下开启

master
./bin/start --hostname 192.168.179.158 --master zk://192.168.175.132:2181,192.168.179.159:2181,192.168.179.151:2181/mesos --http_address 0.0.0.0 &>/dev/null &

master1
./bin/start --hostname 192.168.179.15 --master zk://192.168.175.132:2181,192.168.179.158:2181,192.168.179.151:2181/mesos --http_address 0.0.0.0 &>/dev/null &

master2
./bin/start --hostname 192.168.179.151 --master zk://192.168.175.132:2181,192.168.179.159:2181,192.168.179.158:2181/mesos --http_address 0.0.0.0 &>/dev/null &

打开网页测试Marathon的端口号是8080

建立test任务

查看master分配任务

执行过后在下面这个目录下

 /opt/home/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors
//标准错误和标准输出信息
cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest
//显示
stderr  stdout
//查看输出字符串
cat stdout

显示以下内容

Registered executor on 192.168.175.152
Starting task test.f99a7592-a099-11e8-a6b5-52540011572d
sh -c ‘echo "hello world"‘
hello world
Forked command at 3493
Command exited with status 0 (pid: 3493)

以下是slave操作

//在slave1中操作

cd /root
vim demo.json
{
"id":"basic-0",
"cmd":"while [true]; do echo ‘hello Marathon‘; sleep 5; done",
"cpus":0.1,
"mem":10.0,
"instances":1
}
//查看Marathon网站有新添加任务
curl -X POST -H "Content-type:application/json" http://192.168.175.132:8080/v2/apps [email protected]

------------再启动一台slave2-------------------------

hostnamectl set-hostname slave2

vim /etc/hosts    (所有主机同步)
192.168.175.132 master
192.168.175.150 master1
192.168.175.151 master2
192.168.175.152 slave
192.168.175.153 slave2

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

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

//启动完成会看到两台slave上线,任务在两台slave中随机发布

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.175.132:2181,192.168.175.150:2181,192.168.175.151:2181/mesos --no-hostname_lookup --ip=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
}

curl -X POST -H "Content-type:application/json" http://192.168.175.132: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

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

测试
http://192.168.175.153/

原文地址:http://blog.51cto.com/13645280/2162202

时间: 2024-07-29 15:45:55

Marathon+Mesos+Docker实战的相关文章

Marathon+Mesos+Docker部署

Marathon 马拉松是一个生产级的容器编排平台,用于中间层的数据中心操作系统(DC/OS)和Apache Mesos.为部署提供提供REST API服务,有授权和SSL.配置约束,通过HAProxy实现服务发现和负载平衡. Apache Mesos Apache Mesos 是一款基于多资源(内存.CPU.磁盘.端口等)调度的开源群集管理套件,能时容错和分布式关系系统更加容易使用.Apache Mesos 采用了Master/Slave 结构来简化设计,将Master 做的尽可能轻量级别仅保

部署Mesos+zookeeper+Marathon+Docker实战

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

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

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

mesos+marathon管理docker集群

服务器架构 主机名 IP 安装服务 mesos-master 192.168.56.7 docker.mesos-master.mesos-slave.marathon.zookeeper mesos-slave 192.168.56.8 docker.mesos-slave.zookeeper 系统环境 # uname -r 3.10.0-229.el7.x86_64 # cat  /etc/redhat-release CentOS Linuxrelease 7.1.1503 (Core)

使用Mesos和Marathon管理Docker集群

分布式系统是难于理解.设计.构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现.SLA(服务水平协议)是衡量停机和/或性能下降的标准,大多数现代应用程序有一个期望的弹性SLA水平,通常按"9"的数量增加(如,每月99.9或99.99%可用性).每个额外的9变得越来越难实现. 分布式系统通常是以静态分区,比如Akka/Play. Spark/Hadoop.Storm和 Redis各自分区分组划分.静态分区带来的缺点是增加复杂性,随着机器数量增加,软

zookeeper+mesos+docker+swarm

zookeeper 集群安装 1.下载 wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.8.tar.gz 2.解压 mkdir /usr/local/zookeeper && tar zxvf zookeeper-3.4.8.tar.gz && mv zookeeper-3.4.8/* /usr/local/zookeeper ** rm -rf zookeeper-3.4.8 3.创建配

docker 实战---安装一个基础镜像 (一)

泡了几天官网,对docker有了一点了解.准备着手搭建一个公司的开发测试环境,包括java.python. 环境介绍 首先说明一下我的环境 2台物理服务器(后面简称主机) 主机A的配置如下: [[email protected] ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:p

Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)

一.Docker是什么? 首先Docker是软件工业上的集装箱技术 回顾,在没有集装箱出现以前,传统运输行业中,会存在这些问题: 在运输过程中,货物损坏 装卸.运输货物,效率低下 运输手续繁多及运输环节多 劳动强度大,及船舶周转慢 在集装箱出现后,完全改变了这种状况,是由于集装箱: 规则标准化,大大减少了包装费用 大大提升了货物装卸效率.及运输效率 不同种运输工具之间转换更容易 所以,集装箱出现是传统行业中的一次重大变革 传统软件行业中存在的问题 软件更新发布低效 业务无法敏捷 环境一致性,难于

Mesos + Docker Tutorial: How to Build Your Own Fra

Introduction to Mesos + Docker Apache Mesos is a cluster manager that simplifies the complexity of running tasks on a shared pool of servers. Docker is a lightweight container for deploying packaged services, similar in concept to a virtual machine,