Marathon+Mesos+Zookeeper+Docker部署实战

27 篇文章 0 订阅

一、项目拓扑:

二、项目重点:

1. Apache Mesos概述:

Apache Mesos:Apache-Mesos是一款基于多资源(内存、CPU、磁盘、端口等)调度的开源集群管理套件,能使容错和分布式系统更加容易使用。官方网站http://mesos.apache.org/ ,软件能够自由下载使用;

Apache-Mesos采用Master/Slave结构来简化设计,将Master做得尽可能轻量级,仅保存各种计算框架(Framework)和Mesos Slave的状态信息,这些状态很容易在Mesos出现故障的时候被重构,除此之外Mesos还使用Zookeeper解决Master单点故障的问题;

Apache Mesos专业术语:

Mesos Master:负责管理各个Framework和Slave,并将Slave上的资源分配给各个Framework;

Mesos Slave:负责管理本节点上的各个Mesos Task,为各个Executor分配资源;

Framework:计算机框架,如:Hadoop、Spark等,可以通过MesosSchedulerDiver接入Mesos;

Executor:执行器,在Mesos Slave上安装,用于启动计算框架中的Task;

 

Apache Mesos处理流程:

1.集群中的所有slave节点会和master定期进行通信,将自己的资源信息同步到master,master由此获知到整个集群的资源状况;

2.mater会和已注册、受信任的Framework进行交互,定期将最新的资源情况发送给Framework,当Framework前端有工作需求时,将选择接收资源,否则拒绝;

3.前端用户提交了一个工作需求给Framework;

4.Framework接收slave master发过来的资源信息;

5.Framework依据资源信息向slave发起任务启动命令,开始调度工作;

2.zookeeper概述:

ZooKeeper是用来给集群服务维护配置信息,提供分布式同步和提供组服务。所有这些类型的服务都使用某种形式的分布式应用程序。ZooKeeper是一个分布式的,开放源码的协调服务,是Hadoop和Hbase的重要组件,在此zookeeper与mesos结合实现为mesos的master保证其单点故障问题;

ZooKeeper角色

领导者(leader):领导者负责投票发起和决议,更新系统状态;

跟随者(follwoer):follower用于接收客户请求并向客户端返回结果,在选主过程参与投票;

观察者:ObServer可以接受客户端连接,将写请求转发给leader节点,但ObServer不参加投票过程,只同步leader的状态,ObServer的目的是为了拓展系统,提高读取速度;

客户端:请求发起方;

 

3. Marathon概述:

是一个mesos框架,能够支持运行长服务,可以实现通过web页面或者api接口实现部署应用,比如web应用等。也是一种私有的Paas,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束; 

 

三、项目环境:

系统类型

IP地址

主机名

所需软件

Centos 7.4 1708 64bit

192.168.100.101

master

jdk-8u171-linux-x64.tar.gz  marathon-0.15.2.tgz  zookeeper-3.4.10.tar.gz

mesos

Centos 7.4 1708 64bit

192.168.100.102

master1

jdk-8u171-linux-x64.tar.gz  zookeeper-3.4.10.tar.gz

mesos

Centos 7.4 1708 64bit

192.168.100.103

master2

jdk-8u171-linux-x64.tar.gz  zookeeper-3.4.10.tar.gz

mesos

Centos 7.4 1708 64bit

192.168.100.104

slave1

jdk-8u171-linux-x64.tar.gz

mesos  

docker-engine

Centos 7.4 1708 64bit

192.168.100.105

slave2

jdk-8u171-linux-x64.tar.gz

mesos  

docker-engine

 

四、项目实施步骤:

  • 配置所有节点的域名解析(在此只显示master节点的配置);
  • 在所有节点进行安装mesos程序(在此只显示master节点的配置);
  • 在所有的master节点上进行安装zookeeper程序(在此只显示master节点的配置);
  • 配置master节点的zookeeper服务;
  • 配置master1节点的zookeeper服务;
  • 配置master2节点的zookeeper服务;
  • 在所有的slave节点上进行安装docker程序(在此只显示slave1节点的配置);
  • 在所有的master节点启动zookeeper服务;
  • 配置所有master节点的mesos服务(在此只显示master节点的配置);
  • 配置所有slave节点的mesos服务(在此只显示slave1节点的配置);
  • 访问mesos服务web页面,查看节点调度信息;
  • 在master单一节点上安装部署marathon程序;
  • 访问mesos的web页面查看marathon程序节点状态;
  • 使用marathon的web页面提交测试任务;
  • 访问mesos程序的web页面查看测试任务的提交情况;
  • 查看slave节点的任务处理情况;
  • 使用Marathon API的形式添加docker容器nginx:

 

 

  • 配置所有节点的域名解析(在此只显示master节点的配置);

[root@master ~]# cat <<END >>/etc/hosts

192.168.100.101 master

192.168.100.102 master1

192.168.100.103 master2

192.168.100.104 slave1

192.168.100.105 slave2

END

 

  • 在所有节点进行安装mesos程序(在此只显示master节点的配置

[root@master ~]# ls jdk-8u171-linux-x64.tar.gz

jdk-8u171-linux-x64.tar.gz

[root@master ~]# tar zxvf jdk-8u171-linux-x64.tar.gz

[root@master ~]# mv jdk1.8.0_171/ /usr/local/java

[root@master ~]# ls /usr/local/java

bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt

COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt

[root@master ~]# vi /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

[root@master ~]# source /etc/profile

[root@master ~]# java -version

java version "1.8.0_171"

Java(TM) SE Runtime Environment (build 1.8.0_171-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

 

[root@master ~]# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

[root@master ~]# vi /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

:wq

 

[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@master ~]# 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

[root@master ~]# rpm -ivh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

[root@master ~]# yum -y install mesos

[root@master ~]# vi /etc/profile

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

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

:wq

[root@master ~]# source /etc/profile

 

  • 在所有的master节点上进行安装zookeeper程序(在此只显示master节点的配置);

[root@master ~]# ls zookeeper-3.4.10.tar.gz

zookeeper-3.4.10.tar.gz

[root@master ~]# tar zxvf zookeeper-3.4.10.tar.gz

[root@master ~]# mv zookeeper-3.4.10 /usr/local/zookeeper

[root@master ~]# ls /usr/local/zookeeper

bin        dist-maven       lib                   README.txt            zookeeper-3.4.10.jar.asc

build.xml  docs             LICENSE.txt           recipes               zookeeper-3.4.10.jar.md5

conf       ivysettings.xml  NOTICE.txt            src                   zookeeper-3.4.10.jar.sha1

contrib    ivy.xml          README_packaging.txt  zookeeper-3.4.10.jar

[root@master ~]# vi /etc/profile

export ZOOKEEPER_HOME=/usr/local/zookeeper

export PATH=$PATH:$ZOOKEEPER_HOME/bin

[root@master ~]# source /etc/profile

 

  • 配置master节点的zookeeper服务;

[root@master ~]# mkdir /usr/local/zookeeper/data     

[root@master ~]# mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

[root@master ~]# vi /usr/local/zookeeper/conf/zoo.cfg

     12 dataDir=/usr/local/zookeeper/data

     29 server.1=master:2888:3888

     30 server.2=master1:2888:3888

     31 server.3=master2:2888:3888

:wq

[root@master ~]# echo 1 >/usr/local/zookeeper/data/myid

 

  • 配置master1节点的zookper服务;

[root@master1 ~]# mkdir /usr/local/zookeeper/data     

[root@master1 ~]# mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

[root@master1 ~]# vi /usr/local/zookeeper/conf/zoo.cfg

     12 dataDir=/usr/local/zookeeper/data

     29 server.1=master:2888:3888

     30 server.2=master1:2888:3888

     31 server.3=master2:2888:3888

:wq

[root@master1 ~]# echo 2 >/usr/local/zookeeper/data/myid

 

  • 配置master2节点的zookeeper服务;

[root@master2 ~]# mkdir /usr/local/zookeeper/data     

[root@master2 ~]# mv /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

[root@master2 ~]# vi /usr/local/zookeeper/conf/zoo.cfg

     12 dataDir=/usr/local/zookeeper/data

     29 server.1=master:2888:3888

     30 server.2=master1:2888:3888

     31 server.3=master2:2888:3888

:wq

[root@master2 ~]# echo 3 >/usr/local/zookeeper/data/myid

 

  • 在所有的slave节点上进行安装docker程序(在此只显示slave1节点的配置);

[root@slave1 ~]# cat <<END >>/etc/yum.repos.d/centos.repo

[local2]

name=docker

baseurl=ftp://192.168.100.100/docker

enable=1

gpgcheck=0

END

[root@slave1 ~]# yum clean all

[root@slave1 ~]# yum -y install docker-engine ##网络卡顿多安装几次

[root@slave1 ~]# systemctl start docker

[root@slave1 ~]# systemctl enable docker

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

 

  • 在所有的master节点启动zookeeper服务;
  • 配置所有master节点的mesos服务(在此只显示master1节点的配置
  • [root@master1 ~]# cat <<END >/etc/mesos/zk
  • zk://192.168.100.101:2181,192.168.100.102:2181,192.168.100.103:2181/mesos
  • END ##在mesos配置文件中指定zookeeper的节点
  • [root@master1 ~]# cat <<END >/etc/mesos-master/quorum
  • 2
  • END
  • ##指定节点数量
  • [root@master1 ~]# cat <<END >/etc/mesos-master/ip
  • 192.168.100.102
  • END
  • ##指定master节点的ip地址
  • [root@master1 ~]# cat <<END >/etc/mesos-master/hostname
  • 192.168.100.102
  • END
  • ##指定master节点的ip地址,避免使用dns解析
  • [root@master1 ~]# systemctl start mesos-master
  • [root@master1 ~]# systemctl enable mesos-master
  • [root@master ~]# netstat -utpln |grep mesos
  • tcp        0      0 192.168.100.102:5050    0.0.0.0:*               LISTEN      1613/mesos-master
  •  
  •  
  • 配置所有slave节点的mesos服务(在此只显示slave1节点的配置);
  • [root@slave1 ~]# cat <<END >/etc/mesos/zk
  • zk://192.168.100.101:2181,192.168.100.102:2181,192.168.100.103:2181/mesos
  • END
  • ##指定mesos集群的master节点的位置
  • [root@slave1 ~]# echo "192.168.100.104" >/etc/mesos-slave/ip
  • [root@slave1 ~]# echo "192.168.100.104" >/etc/mesos-slave/hostname
  • [root@slave1 ~]# echo "docker,mesos" >/etc/mesos-slave/containerizers
  • ##注意:允许mesos在docker节点上进行创建容器
  •  
  • [root@slave1 ~]# systemctl start mesos-slave
  • [root@slave1 ~]# systemctl enable mesos-slave
  • [root@slave1 ~]# netstat -utpln |grep mesos
  • tcp        0      0 192.168.100.104:5051    0.0.0.0:*               LISTEN      1835/mesos-slave
  • 访问mesos服务web页面,查看节点调度信息;

 

 

 

 

 

 

  • 在master单一节点上安装部署marathon程序;

[root@master ~]# ls marathon-0.15.2.tgz

marathon-0.15.2.tgz

[root@master ~]# tar zxvf marathon-0.15.2.tgz

[root@master ~]# mv marathon-0.15.2 /usr/local/marathon

[root@master ~]# ls /usr/local/marathon

bin  Dockerfile  docs  examples  LICENSE  README.md  target

[root@master ~]# /usr/local/marathon/bin/start --hostname 192.168.100.101 --master zk://192.168.100.101:2181,192.168.100.102:2181,192.168.100.103:2181/mesos --http_address 0.0.0.0 &>/dev/null &

[1] 2687

[root@master ~]# jobs -l

[1]+  2687 运行中               /usr/local/marathon/bin/start --hostname 192.168.100.101 --master zk://192.168.100.101:2181,192.168.100.102:2181,192.168.100.103:2181/mesos --http_address 0.0.0.0 &>/dev/null &

[root@master ~]# netstat -utpln |grep 8080

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2687/java

 

  • 访问mesos的web页面查看marathon程序节点状态;

 

查看正在运行的应用:

 

查看名称为nginx-test的应用:

 

删除名称为nginx-test的应用:

 

 

  • 使用marathon的web页面提交测试任务;

 

 

 

  • 访问mesos程序的web页面查看测试任务的提交情况;

 

 

  • 查看slave节点的任务处理情况;

 

  • 使用Marathon API的形式添加docker容器nginx:

[root@slave1 ~]# vi nginx.json

{

  "id":"nginx",

  "cpus":0.1,

  "mem":10,

  "instances": 1,

  "constraints":[["hostname", "UNIQUE",""]],

  "container": {

    "type":"DOCKER",

    "docker": {

     "image": "nginx",

     "network": "HOST",

     "portMappings": [

        {"containerPort": 80,"hostPort": 0,"servicePort": 0, "protocol":"tcp" }

      ]

    }

  }

}

 

[root@slave1 ~]# curl -X POST -H "Content-type:application/json" http://192.168.100.101:8080/v2/apps -d@nginx.json

 

  • 访问marathon页面和mesos页面发现nginx任务正在处理,访问正在处理的slave节点的进程,发现nginx镜像正在下载;

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值