zoukankan      html  css  js  c++  java
  • 基于zookeeper+mesos+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的请求进行服务了。


    mararthon是什么?

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


    1.环境部署(因为配置有限,此操作使用了2台虚拟机)

    IP

    描述

    192.168.253.55

    Mesos-master  mesos-slave  marathon  docker

    192.168.253.55

    Zookeeper  mesos-slave  docker

    备注:Zookeeper使用伪分布式部署,也就是一台虚拟机上启动三个不同端口的Zookeeper实例

    基本框架

     

    1.1同步时间

    yum -y install ntp ntpdate

    ntpdate cn.pool.ntp.org

    hwclock --systohc

    1.2关闭防火墙


    systemctl stop firewalld

    systemctl disable firewalld

    1.3关闭selinux

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    1.4创建工作目录


    mkdir /data

    2. 官网地址


    Mesos:http://mesos.apache.org/

    Marathon:https://mesosphere.github.io/marathon/

    3.jdk安装(三个节点都要执行)

    3.1解压jdk1.8 

    tar zxf jdk-8u161-linux-x64.tar.gz -C /data/ cd /data mv jdk1.8.0_161/ jdk`

    3.2配置环境变量 

    vim /etc/profile

    export JAVA_HOME=/data/jdk
    export JRE_HOME=/data/jdk/jre
    export PATH=$PATH:/data/jdk/bin
    export CLASSPATH=./:/data/jdk/lib:/data/jdk/jre/lib

    source /etc/profile`

    3.3测试是否成功

    4. 安装zookeeper(192.168.253.56)

    4.1解压 

    tar xzf apache-zookeeper-3.6.1-bin.tar.gz -C /data

    cd /data

    mv apache-zookeeper-3.6.1-bin zookeeper

    4.2修改配置文件 

    cd /data/zookeeper/conf

    cp zoo_sample.cfg zoo.cfg

    vim zoo.cfg

    [root@localhost conf]# vim zoo.cfg

    tickTime=2000

    initLimit=10

    syncLimit=5

    maxClientCnxns=200

    dataDir=/data/zookeeper/data/zk1

    clientPort=2181

    server.1=192.168.253.56:3181:4181

    server.2=192.168.253.56:3182:4182

    server.3=192.168.253.56:3183:4183

    4.3创建三个目录存放zookeeper数据


    mkdir -p /data/zookeeper/data/{zk1,zk2,zk3}

    4.4 创建myid文件

    echo 1 >/data/zookeeper/data/zk1/myid

    echo 2 >/data/zookeeper/data/zk2/myid

    echo 3 >/data/zookeeper/data/zk3/myid

    4.5 生成三份zookeeper配置文件

    cd /data/zookeeper/conf/

    cp zoo.cfg zk1.cfg

    cp zoo.cfg zk2.cfg

    cp zoo.cfg zk3.cfg

    4.6 修改zk2,zk3对应的数据存放目录以及端口

    sed -i 's#zk1#zk2#g' zk2.cfg #修改数据存放目录

    sed -i 's#zk1#zk3#g' zk3.cfg

    sed -i 's#2181#2182#g' zk2.cfg #修改客户端端口

    sed -i 's#2181#2183#g' zk3.cfg

    4.7 zookeeper角色查看


    4.7.1 启动zookeeper

    /data/zookeeper/bin/zkServer.sh start /data/zookeeper/conf/zk1.cfg

    /data/zookeeper/bin/zkServer.sh start /data/zookeeper/conf/zk2.cfg

    /data/zookeeper/bin/zkServer.sh start /data/zookeeper/conf/zk3.cfg

     

    4.7.2 查看集群状态 

    /data/zookeeper/bin/zkServer.sh status /data/zookeeper/conf/zk1.cfg

    /data/zookeeper/bin/zkServer.sh status /data/zookeeper/conf/zk2.cfg

    /data/zookeeper/bin/zkServer.sh status /data/zookeeper/conf/zk3.cfg

     

    5. mesos集群部署

    192.168.253.55,192.168.253.56

    5.1 安装mesos 

    yum install mesos-1.9.0-2.0.1.el7.x86_64.rpm -y

    5.2 增添zookeeper配置
    cd /etc/mesos

    vim zk

    zk://192.168.253.56:2181,192.168.253.56:2182,192.168.253.56:2183/mesos

    5.3 192.168.253.55

    5.3.1 mesos-master配置

    cd /etc/mesos-master

    echo 192.168.253.55 > ip

    echo 192.168.253.55 > hostname

    echo 1 > quorum #这个数字要大于安装的master节点的总数的一半

    work_dir为默认

    5.3.2 mesos-slave配置 


    cd /etc/mesos-slave/

     

    echo 192.168.253.55 > ip

    echo 192.168.253.55 > hostname

    work_dir为默认

    5.3.3 安装marathon


    tar zxf marathon-1.5.1.tgz

    mv marathon-1.5.0-96-gf84298d/ /data/marathon

    5.3.4 启动mesos-master mesos-slave marathon 


    systemctl start mesos-master mesos-slave

    systemctl enable mesos-master mesos-slave #设为开机自启

    /data/marathon/bin/marathon --master zk://192.168.253.56:2181,192.168.253.56:2182,192.168.253.56:2183/mesos --zk zk://192.168.253.56:2181,192.168.253.56:2182,192.168.253.56:2183/marathon

    5.3.5 浏览器访问


    Mesos

     

    Marathon

     

    5.4 192.168.253.56


    5.4.1 mesos-slave配置


    cd /etc/mesos-slave/

    echo 192.168.253.56 > ip

    echo 192.168.253.56 > hostname

    work_dir为默认

    5.4.2 启动mesos-slave

    systemctl start mesos-slave

    systemctl enable mesos-slave

    6. marathon调用mesos运行docker(192.168.253.55,192.168.253.56)

    6.1 解压docker

    tar zxf docker-18.06.3-ce.tgz

    mv docker /data

    6.2 把命令拷贝到/usr/bin

    cd /data/docker

    cp ./* /usr/bin

    6.3 创建docker家目录

    mkdir /home/docker

    6.4 启动docker

    dockerd -g /home/docker &

    6.5 查看进程

    ps -ef |grep docker

    6.6 拉取nginx


    docker pull nginx

    6.7 在mesos-slave上增加配置参数,并重启


    echo 'docker,mesos' | tee /etc/mesos-slave/containerizers

    systemctl restart mesos-slave

    7. 测试


    7.1 运行mesos任务,可以在web界面上查看task:


    MASTER=$(mesos-resolve `cat /etc/mesos/zk`)

    mesos-execute --master=$MASTER --name="cluster-test" --command="sleep 60"

     

    7.2 marathon测试

    浏览器输入:http://192.168.253.55:8080/

    创建一个first的任务

    然后去mesos网页查看:http://192.168.253.55:5050/

    可以看到任务已经分配给slave1(192.168.253.55) 和slave2(192.168.253.56)

    点击

     

     

     

    7.2.1 查看执行时间相关信息


    Id根据实际情况查看

    cd /var/lib/mesos/slaves/167b7f7c-1441-4755-ab15-ee6c33486c98-S0/frameworks/c3d564b2-6b6b-4468-b467-b413f61b9180-0001/executors

     

    cd first.2e24d54e-cb1c-11ea-abb0-0242467fbcb0/runs/latest/

     

    #标准错误和标准输出信息

    stderr

    #查看输出字符串

    stdout

    7.3 marathon通过API创建一个nginx的docker容器


    下面通过Mesos调度,使用marathon来创建一个nginx镜像的Docker容器,Marathon启动时会读取/etc/mesos/zk配置文件,Marathon通过Zookeeper来找到Mesos Master。

    #在marathon服务所在节点创建json文件;

    7.3.1 写json文件


    vim nginx.json

    {
    
    "id":"nginx-first", #容器名,只在marathon生效
    
    "cpus":0.2, #cpu用量
    
    "mem":20.0, #mem用量
    
    "instances": 1, #容器数量
    
    "constraints": [["hostname", "UNIQUE",""]], #限制
    
    "container": {
    
    "type":"DOCKER", #应用类型
    
    "docker": { #docker具体配置
    
    "image": "nginx", #采用的image
    
    "network": "BRIDGE", #网络模式
    
    "portMappings": [
    
    {"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
    
    ]}#端口映射,”0”表示任意端口,"servicePort"服务端口
    
    }
    
    }

    7.3.2 curl方式调用


    curl -X POST http://192.168.253.55:8080/v2/apps -d @/root/nginx.json -H "Content-type: application/json"

    7.3.3 查看容器是否存在(此处有一个容器就证明成功,我这里执行了两遍curl,所以出现两个容器)

    192.168.253.55

     

    192.168.253.56

     

    访问页面:

     

  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/lanist/p/13356529.html
Copyright © 2011-2022 走看看