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

     

    访问页面:

     

  • 相关阅读:
    无法添加数据库未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral,PublicKeyToken=89845dcd8080c
    转载:自己制作Visual Studio项目模板(以原有项目为模版) VS—项目模板丢失的解决方案
    设计一个高效的缓存管理服务 C#
    Visual Studio 30个快捷键2009年05月22日
    Everything 中文绿色版
    Visual studio 打包
    远程桌面连接超出最大连接数的3种解决办法
    [Cache 学习] Cache.Insert 与 Cache.Add 区别
    三层架构之我见 —— 不同于您见过的三层架构。
    基于IIS发布你的WCF Service。
  • 原文地址:https://www.cnblogs.com/lanist/p/13356529.html
Copyright © 2011-2022 走看看