部署Mesos+zookeeper+Marathon+Docker实战

Mesos是什么?

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

1)Mesos-master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework
2)Mesos-slave:负责管理本节点上的各个mesos-task,比如:为各个executor分配资源
3)Framework:计算框架,如:Hadoop,Spark等,通过MesosSchedulerDiver接入Mesos
4)Executor:执行器,安装到mesos-slave上,用于启动计算框架中的task。

Zookeeper是什么?

ZooKeeper是用来给集群服务维护配置信息,域名服务,提供分布式同步和提供组服务。所有这些类型的服务都使用某种形式的分布式应用程序。ZooKeeper是一个分布式的,开放源码的协调服务,是的Chubby一个的实现,是Hadoop和Hbase的重要组件。

?
ZooKeeper角色:

领导者(leader):领导者负责投票发起和决议,更新系统状态
跟随者(follwoer):follower用于接收客户请求并向客户端返回结果,在选主过程中参与投票
观察者:ObServer可以接受客户端连接,将写请求转发给leader节点,但ObServer不参加投票过程,只同步leader的状态,ObServer的目的是为了拓展系统,提高读取速度。
客户端:请求发起方

?
ZooKeeper同步流程:

选完leader以后,zookeeper就进入状态同步过程。
1)leader等待server连接;
2)Follower连接leader,将最大的zxid发送给leader;
3)Leader根据follower的zxid确定同步点;
4)完成同步后通知follower 已经成为uptodate状态;
5)Follower收到uptodate消息后,又可以重新接受client的请求进行服务了。

  • 配置JAVA环境

    # cat /etc/redhat-release   //查看Linux版本
    # uname -r   //查看内核版本(需要内核3.10以上)
    # tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
    # cd  /usr/local/
    # mv jdk1.8.0_91/ java
    # 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
  • 添加apache-maven源
    # wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
  • 配置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
    # source /etc/profile
  • 添加依赖包
    # 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
  • 安装开发工具
    # yum groupinstall -y "Development Tools"
  • 构建Mesos
    # wget http://archive.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
    # ../configure
    
    # make              //等待时间长  且不能断网 前面的环境包不能少
    # make check
    # make install    

    由于安装时间太长 此处直接克隆四台

?
?

部署Mesos+zookeeper+Marathon+Docker

Column 1 Column 2 Column 3
master1 192.168.200.128 jdk、mesos、zookeeper、marathon
master2 192.168.200.137 jdk、mesos、zookeeper、
master3 192.168.200.138 jdk、mesos、zookeeper、
slave1 192.168.200.139 jdk、mesos、zookeeper、docker
slave2 192.168.200.140 jdk、mesos、zookeeper、docker

?

  • 分别给主机命名

    # hostnamectl set-hostname master1 (其他四台: maste2、 maste3、slave1、slave2)
    # bash
    
    # vim /etc/hosts    (所有主机同步)
    192.168.200.128 master1
    192.168.200.137 master2
    192.168.200.138 master3
    192.168.200.139 slave1
    192.168.200.140 slave2
  • 所有master
    # wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
    # tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/
    # cd /home/q/zookeeper-3.4.10/
    # mv conf/zoo_sample.cfg conf/zoo.cfg
  • 在master1中操作
    # cd /home/q/zookeeper-3.4.10/conf
    # vim zoo.cfg
     dataDir=/home/q/zookeeper-3.4.10/data   //修改位置
     dataLogDir=/home/q/zookeeper-3.4.10/datalog
     server.1=192.168.200.128:2888:3888
     server.2=192.168.200.137:2888:3888
     server.3=192.168.200.138:2888:3888
    //把配置文件传输给其他maste
    # scp zoo.cfg 192.168.200.137:/home/q/zookeeper-3.4.10/conf/
    # scp zoo.cfg 192.168.200.138:/home/q/zookeeper-3.4.10/conf/
  • 在master1主机上操作(/home/q/zookeeper-3.4.10/中)
    # mkdir data datalog
    # echo 1 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启zookeeper服务
    # 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.200.128:2181/mesos --quorum=2
    //启动mesos
  • 在master2主机上操作(/home/q/zookeeper-3.4.10/中)
    # mkdir data datalog
    # echo 2 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
    # 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.200.137:2181/mesos --quorum=2
  • 在master3主机上操作(/home/q/zookeeper-3.4.10/中)
    # mkdir data datalog
    # echo 3 > data/myid
    # ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
    # 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.200.138:2181/mesos --quorum=2

?

  • slave1、slave2 上操作
  • 安装docker并且启动
    # yum install docker -y
    # systemctl start docker.service
    # systemctl enable docker.service
    //开启slave-mesos
    # ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
    # mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --no-hostname_lookup --ip=0.0.0.0
  • 在master上查看leader
  • 然后在浏览器输入任意master的IP+端口5050
  • 会自动跳转到被指定为leader的主机IP上去
    # cd /home/q/zookeeper-3.4.10/
    # ./bin/zkServer.sh status

?
?
?

  • 在master1上 部署运行marathon

Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用。marathon是一个mesos框架,能够支持运行长服务,比如web应用等,它是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat Play等等,可以集群的多进程管理。也是一种私有的Pass,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。

    # wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz
    # tar zxvf marathon-0.15.2.tgz -C /home/q/
    # cd /home/q/marathon-0.15.2/
    # ./bin/start --hostname 192.168.200.128 --master zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --http_address 0.0.0.0

  • 查看执行事件相关信息

    # cd /home/q/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.200.138
    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)

?
?

使用mesos与marathon创建docker集群

    # vim nginx.json
    {
    "id":"/nginx",                               //应用的唯一ID
    "container":{                              //marathon启动docker格式
    "type":"DOCKER",
    "docker":{
    "image":"nginx",                       //nginx镜像
    "network":"HOST",                  //网络为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.200.128:8080/v2/apps [email protected]    //发送json文件给marathon

?
?

  • 在任务发布指定的slave上使用命令 ps aux | grep docker 查看到nginx正在下载

下载完成后
输入镜像下载完成的slave 地址: 192.168.200.139
?



原文地址:http://blog.51cto.com/13630803/2160933

时间: 2024-09-29 03:06:48

部署Mesos+zookeeper+Marathon+Docker实战的相关文章

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

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

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

Marathon+Mesos+Docker实战

Marathon+Mesos+Docker实战 Apache Mesos概述 Apache Mesos是一款基于多资源调度的开源集群管理套件,使容错和分布式系统更加容易使用实现,采用Master/Slave结构简化设计,将Master尽可能轻量级,进保存了Mesos Slave的状态信息 常见集群管理工具 工具 特点 优势 Apache Mesos 需要独立部署mesos-slave进程:依赖framework的功能:可管理docker容器:成本较高 应为经过许多互联网公司的大规模实践,稳定性具

[经验交流] 在 Mesos Marathon 上部署 cAdvisor + InfluxDB + Grafana Docker监控

关于 Docker 容器的监控,google cAdvisor 是个很好的工具,但是它默认只显示实时数据,不储存历史数据.为了存储和显示历史数据.自定义展示图,可以把将cAdvisor与InfluxDB.Grafana 集成起来,国外的专家 Brian Christner 写了一篇文章”How to setup Docker Monitoring“,描述了部署方法. Brian 的方法是手动运行 docker run 命令进行部署,为了能在 Mesos Marathon 平台上自动部署,我对他的

Mesos+Marathon docker 集群管理

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

7条命令在docker中部署Mesos集群

7条命令在docker中部署Mesos集群 所有使用的Docker容器构建文件是有也.您可以在本地构建每个容器或只使用位于Docker Hub预构建的容器.下面的命令会自动下载所需的预建的容器为您服务.ZooKeeper?-?https://registry.hub.docker.com/u/garland/zookeeper/Meso Master?-?https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-maste

使用Mesos管理Docker(Mesos+Marathon+Docker)

Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享.它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序.它可以在动态共享节点池上运行许多应用程序Apache Mesos将CPU,内存,存储和其他计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统能够轻松构建并有效运行. 环境准备 操作系统:CentOS-7-x86_64 内核版本:3.10.0-693.el7.x86_64 mesos的安装要求是内核版本须

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