• mesos,marathon,haproxy on centos7 最完美安装教程


    前言

    本教程参考

    http://blog.51cto.com/11863547/1903532

    http://blog.51cto.com/11863547/1903532

    官方文档等...

    系统:centos7

    软件包:RPM

    mes架构

    架构图可以看出mesos主要两部分主和从 ,集群依靠zookeeper

    mesos运行流程

     

    运行流程是,Agent1向 mesos master注册,mesos master向Framework 1报告有哪些资源,Framework 1 告诉mesos master有两个任务运行(taks1,task2) ,mesos master向

    Agent 1提交任务执行。后面就按照这套逻辑循环.

    安装

    一、环境

    1、配置三台服务器,三个mesos-master节点,三个slave节点,我用测试IP

    主机名 IP地址 所安装的服务
    mesos-node1 eth0:192.168.10.227

    mesos-master,mesos-slave,marathon,

    zookeeper,haproxy

    mesos-node2 eth0:192.168.10.228 mesos-master,mesos-slave,marathon,zookeeper,haproxy
    mesos-node3 eth0:192.168.10.229 mesos-master,mesos-slave,marathon,zookeeper,haproxy

     注意以下部分在三台服务器上都要执行

    3、关闭SELinux

    【临时】

    1
    2
    3
     [root@mesos-node1 ~]]# setenforce 0 
     [root@mesos-node1 ~]]# getenforce
     Permissive

    【永久】

     更改配置文件/etc/selinux/config 将SELINUX=enforcing修改为SELINUX=disabled重启生效,如果不想重启就将上面临时修改的也执行一次。

    4、关闭防火墙

    1
     systemctl stop firewalld

    5、配置host解析

    1
    2
    3
    4
    5
    6
    7
     [root@mesos-node1 ~]# cat /etc/hosts
     127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
     192.168.10.227    mesos-node1  
     192.168.10.228    mesos-node2  
     192.168.10.229    mesos-node3  
     [root@mesos-node1 ~]#

    二、部署docker

    1、利用yum安装docker

    1
     yum install docker

    2、启动docker

    1
     systemctl start docker.service

    3、加入开机自启动服务

    1
     systemctl enable docker.service

    4、创建docker用户组,避免使用sudo

    1
    usermod -aG docker lcm

    三 、部署zookeeper

    1、安装Java

    1
    yum install -y java

    2、查看Java版本

    1
    2
    3
    4
    5
      [root@mesos-node1 ~]# java -version
     openjdk version "1.8.0_121"    #<=====OpenJDK1.8
     OpenJDK Runtime Environment (build 1.8.0_121-b13)
     OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
     [root@mesos-node1 ~]#

    3、进入源码安装目录下载zookeeper稳定版3.4.9并安装

    1
    2
    3
    4
    cd /usr/local/src/
     wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz
     tar xf zookeeper-3.4.9.tar.gz
     mv zookeeper-3.4.9 /usr/local/

    4、创建软连接,方便以后升级时用

    1
    ln -s /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper

    5、修改zookeeper配置文件,只修改一个,然后分发到其他两台上

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    cd /usr/local/zookeeper/conf
     mv zoo_sample.cfg zoo.cfg
     [root@mesos-node1 ~]# grep "^[a-z]" zoo.cfg
     tickTime=2000
     initLimit=10
     syncLimit=5
     dataDir=/usr/local/zookeeper/data
     dataLogDir=/usr/local/zookeeper/logs
     clientPort=2181
     server.1=mesos-node1:2888:3888
     server.2=mesos-node2:2888:3888
     server.3=mesos-node3:2888:3888
     [root@mesos-node1 ~]#

    6、创建dataDir和dataLogDir目录

    1
     mkdir -p /usr/local/zookeeper/data /usr/local/zookeeper/logs

    7、在三台服务器上创建myid文件,里面的数据要和配置文件里面的server.后面的数字一样,表示这是第几台服务器

    1
    2
    3
     echo "1" >/usr/local/zookeeper/data/myid
     echo "2" >/usr/local/zookeeper/data/myid
     echo "3" >/usr/local/zookeeper/data/myid

    8、启动zookeeper

    1
    2
    cd  /usr/local/zookeeper
      ./bin/zkServer.s start

    9、查看角色状态

    1
    ./bin/zkServer.sh status

    可以看到两个follower,一个 leader

    10、尝试连接zookeeper

    1
    2
    3
    4
    5
     ./bin/zkCli.sh   #<=====连接当前zookeeper
     ./bin/zkCli.sh  -server 192.168.10.228:2181  #<======连接远程zookeeper
     [zk: 192.168.10.228:2181(CONNECTED) 0] ls /      #<======可以用ls /查看
     [zookeeper]
     [zk: 192.168.10.228:2181(CONNECTED) 1]

    OK,zookeeper安装成功,接下来安装mesos

    三、mesos+marathon集群部署

    1、安装mesosphere仓库

    1
     rpm -ivh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

    2、安装mesos和marathon

    1
     yum -y install mesos marathon

    3、增加zookeeper配置

    1
    2
    3
     [root@mesos-node1 ~]#  cat /etc/mesos/zk
     zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/mesos
     [root@mesos-node1 ~]#

    4、配置mesos-hostname

    1
    2
    3
    4
    5
     echo 本地IP地址 | tee /etc/mesos-master/ip
     echo 本地IP地址 | tee /etc/mesos-master/hostname
     echo 本地IP地址 | tee /etc/mesos-slave/ip
     echo 本地IP地址 | tee /etc/mesos-slave/hostname
     echo 2 > /etc/mesos-master/quorum   #这个数字要大于安装的master节点的总数的0.5倍,即一半

    5、配置mesos-master slave marathon开机自启动并启动

    1
    2
     systemctl enable mesos-master mesos-slave marathon
     systemctl start mesos-master mesos-slave marathon

    注意:此处我是复制的别人的,因l懒得写了.这里的marathon是没法启动的,因为配置文件没有指定mesos的 master和 zookeeper,

    方法1:

    打开vi /usr/lib/systemd/system/marathon.service

    修改红色部分,master后面填mesos节点,--zk参数和上面的一样 zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/meso,这里我用的单机测试,所以不一样.

    自己根据环境,做调整.

    [Service]
    Type=simple
    WorkingDirectory=/usr/share/marathon
    EnvironmentFile=/etc/default/marathon
    ExecStart=/usr/share/marathon/bin/marathon --master 192.168.0.233:5050 --zk zk://192.168.0.233:2181/marathon

     方法2:

    针对marathon1.5

    vi /etc/default/marathon

    MARATHON_MASTER=zk://192.168.0.233:2181/mesos

    MARATHON_ZK=zk://192.168.0.233:2181/marathon

    或者直连

    MARATHON_MASTER=192.168.0.233:5050

    这样修改后,marathon就能启动成功了。如果还是不行,查看 /var/log/message 日志.

    6、在浏览器打开任意一台服务的mesos

    1
     http://192.168.10.227:5050/

    7、如果出现下面的界面,安装成功

    wKiom1i8sP3QTesGAACFtjrxen8284.png-wh_50

    8、运行一个mesos任务来测试

    1
    2
     MASTER=$(mesos-resolve `cat /etc/mesos/zk`)   #<=====获取主服务器的IP地址
     mesos-execute --master=$MASTER --name="cluster-test"  --command="sleep 60"   #如果没有发现任务在运行,可尝试修改--name="cluster-test",这个名字可以随意起

    9、打开浏览器查看

      wKioL1i8sSmzk7ZmAAChws6YOnE128.png-wh_50

    至此环境已经搭建成功

    二、测试,尝试管理一个docker镜像

    注意,以下内容没有特别说明可在任意一台服务上完成,我选择在227

    1、在docker中下载一个nginx镜像

    1
     docker pull nginx

    2、在所有mesos-slave上增加配置参数,并重启(这一步在三台服务上面进行操作)

    1
    2
     echo 'docker,mesos' tee /etc/mesos-slave/containerizers
     systemctl restart mesos-slave

    #配置超时(可选) echo '5mins' > /etc/mesos-slave/executor_registration_timeout

    3、在浏览器中打开marathon,默认端口8080

    1
     http://192.168.10.227:8080

     wKiom1i8sU_QZxZVAAB5oCAaQXM059.png-wh_50

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

    4、创建nginx配置文件nginx.json,注意红色部分,根据自己环境修改,如果不明白,删除红色部分.红色部分是指明在那台机器部署

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     [root@mesos-node1 ~]# cat nginx.json 
     {
     "id":"nginx",
     "cmd": null,
     "cpus":0.2,
     "mem":32.0,
     "instances": 1,
     "constraints": [["hostname",
     "UNIQUE",""]],
     "container": {
     "type":"DOCKER",
     "docker": {
     "image""nginx",
     "network""BRIDGE",
     "portMappings": [
     {"containerPort": 80,
     "hostPort": 0,"servicePort": 0,"protocol":
     "tcp" }
     ]
       }
         }
           }
     [root@mesos-node1 ~]#

    5、利用curl的方式开启nginx容器

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

    6、查看开启的容器

    1
    2
    3
     [root@mesos-node1 ~]# docker ps -a
     CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
     5175ef6c9dde        nginx               "nginx -g 'daemon off"   About a minute ago   Up Abo

    7、在浏览器中查看

    wKioL1i8wv_BjZ3gAAB18KOFm_w397.png-wh_50

    wKioL1i8saDTsiD7AABbYVOygxI356.png-wh_50

    但是我们可以发现,只能227这台服务器来访问这个端口,出现nginx页面,用其他的IP地址显然是不可以的.

    wKioL1i8wMexOcTQAABQPm0k8JI833.png-wh_50

    so,接下来我们就来配置服务发现,设置一个固定端口,实现让每个IP地址都可以访问到这个页面。

    注意:marathon生成的外部端口是随机的,在marathon的ui界面查看,或docker ps命令

    四、服务发现和haproxy

    以下操作在三台服务上都有

    1、安装haproxy

    1
     yum -y install haproxy

    2、设置服务发现

    1
    2
    3
    4
     mkdir -p /etc/marathon/conf
     cp /etc/mesos/zk /etc/marathon/conf/master 
     cp /etc/marathon/conf/master /etc/marathon/conf/zk
     sed -i 's|mesos|marathon|g' /etc/marathon/conf/zk

    注意:

     上面是marathon1.5版本前的设置,

    最新版设置方法

    vi /etc/default/marathon

    MARATHON_MASTER=zk://192.168.0.233:2181/mesos

    MARATHON_ZK=zk://192.168.0.233:2181/marathon

    3、设置文件/etc/haproxy-marathon-bridge/marathons

    1
    2
    3
    4
    5
    6
     mkdir /etc/haproxy-marathon-bridge/
     [root@mesos-node1 conf]# cat /etc/haproxy-marathon-bridge/marathons
     192.168.10.227:8080
     192.168.10.228:8080
     192.168.10.229:8080
     [root@mesos-node1 conf]#

    4、下载安装脚本 haproxy-marathon-bridge

    https://github.com/maricaantonacci/haproxy-marathon-bridge

    5、添加执行权限

    1
     chmod +x /etc/init.d/haproxy-marathon-bridge

    6、通过 haproxy-marathon-bridge脚本从Marathon生成一个HAProxy配置在localhost:8080运行:

    1
     ./haproxy-marathon-bridge 192.168.10.227:8080 > /etc/haproxy/haproxy.cfg

    7、将haproxy加入开机自启动并启动

    1
    2
     systemctl start haproxy
     systemctl enable haproxy

    8、开启haproxy的定时任务,每一分钟加入一次任务。

    1
     /etc/init.d/haproxy-marathon-bridge install_cronjob

    9、查看nginx.json文件,注意红色部分,上面有说明.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     [root@mesos-node1 ~]# cat nginx.json 
     {
     "id":"nginx",
     "cmd": null,
     "cpus":0.2,
     "mem":32.0,
     "instances": 1,
     "constraints": [["hostname",
     "UNIQUE",""]],
     "container": {
     "type":"DOCKER",
     "docker": {
     "image""nginx",
     "network""BRIDGE",
     "portMappings": [
     {"containerPort": 80,
     "hostPort": 0,"servicePort": 3030, "protocol":      #此处我设置了固定的端口,这个端口可以按照自己公司的要求来随意设定。
     "tcp" }
     ]
       }
         }
           }
     [root@mesos-node1 ~]#

    curl -X POST http://192.168.10.227:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json" 提交下任务

    可以看到服务发现自动生成了这个访问端口,将它映射在随机生成的端口上,至此我们就可以用任意一台的IP地址来访问这个端口了。

    wKiom1i8vwPiJlmvAABbtoDeXW0995.png-wh_50

    11.通过haproxy的ui界面查看服务开放的状态

    总结

    重启电脑,需按照顺序启动, zookeeper  systemctl start mesos-master mesos-slave marathon  haproxy

    有什么问题,留言吧。

  • 相关阅读:
    python_day25_私有变量(在变量前加两个下划线即可)_私有方法_静态方法_
    python的切片操作
    python_静态字段_普通字段_静态方法@staticmethod__静态类@classmethod_属性@property、@per.setter、@per.deleter
    python_class_类_对象_自己改编的一个选英雄的小程序
    python_类_方法_对象_实际应用
    python_day24_class_类_继承
    python_day24_class_类_方法_对象
    python_day不知道_json方法存字典中的内容到文本中
    python_dayo20_if __name__ == '__main__':的学习
    python_day20_自己定义模块和模块的调用_包(Package)以及包之间的调用
  • 原文地址:https://www.cnblogs.com/whf191/p/8453054.html
Copyright © 2020-2023  润新知