kinila 发表于 2019-1-8 07:22:01

【亲测】Marathon+Mesos+Zookeeper集群平台部署(实现多实例Docker)

Apache Mesos

  Apache Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点。


Mesos调度顺序

  Apache Mesos主从服务器调度资源的顺序为首先由Mesos主服务器查询可用资源给调度器,第二步调度器向主服务器发出加载任务,主服务器再传达给从服务器,从服务器向执行器命令加载任务执行,执行器执行任务以后,将状态反馈上报给从服务器,最终告知调度器 。


高可用性与恢复

  Apache Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行任何和从服务器信息,使用MultiPaxos进行日志复制实现一致性。
Apache Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键点信息如任务信息 状态更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务(类似Java中的钝化和唤醒)。


Marathon

  它是一个mesos框架,能够支持运行长服务,比如web应用等。是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat Play等,可以集群的多进程管理。也是一种私有的Pass,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。


架构图
http://i2.运维网.com/images/blog/201808/16/037608d65ed79ffdeb57d40fb25bf13e.png
  Apache Mesos框架是一个在Mesos上运行分布式应用的应用程序,它有两个组件:
调度器 : 与Mesos交互,订阅资源,然后在mesos从服务器中加载任务;
执行器 : 从框架的环境变量配置中获得信息,在mesos从服务器中运行任务;

系统环境




主机名
IP地址
安装软件包




master
192.168.96.46
jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz、marathon-0.15.2.tgz


master1
192.168.96.47
jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz


master2
192.168.96.48
jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz


slave
192.168.96.49
jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker


slave1
192.168.96.50
jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker



1.查看Linux版本

cat /etc/redhat-release
http://i2.运维网.com/images/blog/201808/16/35d062dea7a0b89f2f74bda7fef92d5c.png

2.查看内核版本(需要内核3.10及以上)

uname -r
http://i2.运维网.com/images/blog/201808/16/bf1a4b36db3149dda17d75100bd3ea2a.png

3.所有节点关闭防火墙及Selinux

setenforce 0
systemctl stop firewalld.service
4. 相关软件包   密码:9c0g

开始部署

配置java环境及相关环境

1.解压jdk软件包

tar zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
2.配置jdk环境变量

  vim /etc/profile


export JAVA_HOME=/usr/local/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
3.重新加载环境变量

source /etc/profile
4.检查java版本信息

java -version
http://i2.运维网.com/images/blog/201808/16/bb638de3505ad1cc9cd3a20fb11df0e2.png

5.安装开发工具

yum groupinstall -y "Development Tools"
6.添加apache-maven源

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
7.配置WANdiscoSVN网络源

  vim /etc/yum.repos.d/wandisco-svn.repo



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
8.安装相关依赖包

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
安装Mesos

1.配置Mesos环境变量

  vim /etc/profile


export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
2.重新加载系统环境

source /etc/profile
3.安装Mesos软件包

#下载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/
#移动至/root目录下
mv mesos-0.25.0/ /root/
#进入mesos安装目录
cd /root/mesos-0.25.0
#新建build目录并进入
mkdir build
cd build
#配置
../configure
#编译(编译时间较长)
make
#检查
make check
#安装
make install
以上步骤请分别部署于五台服务器上

配置master、master1、master2节点

1.分别设置各master节点主机名

#master节点:
hostnamectl set-hostname master
#master1节点:
hostnamectl set-hostname master1
#master2节点:
hostnamectl set-hostname master2

2.修改本地hosts文件(所有节点相同)

  vim /etc/hosts


192.168.96.46 master
192.168.96.47 master1
192.168.96.48 master2
192.168.96.49 slave
192.168.96.50 slave1
3.建立软链接,方便mesos-master使用

ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master
配置slave、slave2节点

1.分别设置各slave节点主机名

#slave节点:
hostnamectl set-hostname slave
#slave1节点:
hostnamectl set-hostname slave1
2.修改本地hosts文件(所有节点相同)

  vim /etc/hosts


192.168.96.46 master
192.168.96.47 master1
192.168.96.48 master2
192.168.96.49 slave
192.168.96.50 slave1
这里请重启系统,使其以上修改生效

3.建立软链接,方便mesos-slave使用

ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
4.安装docker软件

yum install docker -y
5.加入系统管理并启动docker

systemctl start docker.service
systemctl enable docker.service
6.zookeeper/bin添加到系统环境变量

echo "export PATH=/home/q/zookeeper-3.4.10/bin:$PATH" >> /etc/profile
7.重新加载系统环境变量

source /etc/profile
8.启动各节点的zookeeper服务

master

zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
http://i2.运维网.com/images/blog/201808/16/ae3bf1463147a1b535a5052d5228f6b5.png

master1

zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
http://i2.运维网.com/images/blog/201808/16/cd5f6da729d2f0a843a6e15e0c316df2.png

master2

zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
http://i2.运维网.com/images/blog/201808/16/5631367183b499ad3edeb927bf30d748.png

9.查看各节点的zookeeper状态

zkServer.sh status
master:
http://i2.运维网.com/images/blog/201808/16/5d540eb68d19a03e4373faf47c0c316d.png

master1:
http://i2.运维网.com/images/blog/201808/16/ddb973a35cc101a2ccaf3153ea9613f3.png

master2:
http://i2.运维网.com/images/blog/201808/16/dd52494c616aca792abed0bcb4216a11.png

master、master1、master2节点安装zookeeper服务

1.安装zookeeper

#解压缩
tar zxvf zookeeper-3.4.10.tar.gz
#移动至/home/q目录下
mv zookeeper-3.4.10 /home/q/
#进入zookeeper目录
cd /home/q/zookeeper-3.4.10/
以下在master节点操作

1.复制配置文件模板

mv conf/zoo_sample.cfg conf/zoo.cfg
2.配置zookeeper

  vim conf/zoo.cfg


# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/q/zookeeper-3.4.10/data         //修改
dataLogDir=/home/q/zookeeper-3.4.10/datalog   //修改
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.96.46:2888:3888            //添加master节点
server.2=192.168.96.47:2888:3888            //添加master1节点
server.3=192.168.96.48:2888:3888            //添加master2节点
http://i2.运维网.com/images/blog/201808/16/732e4a04a796ce5ea1d67a8ffcbf4f87.png

3.发送给master1、master2节点

scp conf/zoo.cfg 192.168.96.47:/home/q/zookeeper-3.4.10/conf/
scp conf/zoo.cfg 192.168.96.48:/home/q/zookeeper-3.4.10/conf/
4.master节点

4.1.新建data、datalog目录

cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
4.2.创建myid文件

echo 1 > data/myid
4.3.验证myid值

cat data/myid
http://i2.运维网.com/images/blog/201808/16/1ff7578b4e7491c982da36c08cb4ccee.png

5.master1节点

5.1.新建data、datalog目录

cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
5.2.创建myid文件

echo 2 > data/myid
5.3.验证myid值

cat data/myid
http://i2.运维网.com/images/blog/201808/16/e436b7304ae495c68cc8a83e7ffad926.png

6.master2节点

6.1.新建data、datalog目录

cd /home/q/zookeeper-3.4.10/
mkdir data
mkdir datalog
6.2.创建myid文件

echo 3 > data/myid
6.3.验证myid值

cat data/myid
http://i2.运维网.com/images/blog/201808/16/4f99cd846355a11de3717019aa370269.png

7.分别启动三个master节点的zookeeper服务

master:

./bin/zkServer.sh start conf/zoo.cfg
master1:

./bin/zkServer.sh start conf/zoo.cfg
master2:

./bin/zkServer.sh start conf/zoo.cfg
8.查询各节点zookeeper状态(master主机为Leader状态、其他主机为Follower状态)

8.1.master:

./bin/zkServer.sh status
http://i2.运维网.com/images/blog/201808/16/94bd477c69f2cfa5fe1df546e50a24dd.png

8.2.master1:

./bin/zkServer.sh status
http://i2.运维网.com/images/blog/201808/16/1994100c9000255251bae197a16b6f35.png

8.3.master2:

./bin/zkServer.sh status
http://i2.运维网.com/images/blog/201808/16/208435c1335ad1b04ef317c7913b748d.png

9.只在Master中部署Marathon
  Marathon是一个Mesos框架,能够支持运行长服务,比如web应用的等.

#下载
wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz
#解压缩
tar zxvf marathon-0.15.2.tgz -C /home/q/
#进入maratchon目录
cd /home/q/marathon-0.15.2/
10.启动master节点的Marathon服务(IP:8080)

/home/q/marathon-0.15.2/bin/start --hostname 192.168.96.46 --master zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos
11. 访问http://192.168.96.46:8080, 如下图
http://i2.运维网.com/images/blog/201808/16/682e890477ec4ba93a57a8773e9b20bc.png

11.分别启动三个master节点

master:

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.96.46:2181/mesos --quorum=2
master1:

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.96.47:2181/mesos --quorum=2
master2:

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.96.48:2181/mesos --quorum=2
12.分别启动slave、slave1的slave服务

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos --no-hostname_lookup --ip=0.0.0.0
http://i2.运维网.com/images/blog/201808/16/005818f9ecec9e1dff59f5d472af90dd.png

访问Mesos ,http://192.168.96.47:5050
http://i2.运维网.com/images/blog/201808/16/538606987d3ce29268210a07526b9e8d.png
http://i2.运维网.com/images/blog/201808/16/961b80ad91b5c315bcd8babbe3e8d9c0.png

使用Marathon创建测试任务test1
http://i2.运维网.com/images/blog/201808/16/704eda9dbe1038a6a6fa13bfa7656425.png
http://i2.运维网.com/images/blog/201808/16/63665089d9d234663744fec351cfc943.png
http://i2.运维网.com/images/blog/201808/16/8b3f34af1112761f69c5649cd4516318.png
http://i2.运维网.com/images/blog/201808/16/cadf1ba47b88f92a2a43d8a3108f980f.png

使用Marathon创建docker容器
  通过Marathon API的形式创建Docker的Nginx任务

1.使用json创建任务

  > vim nginx.json


{
"id":"/nginx",                              //ID名称
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",                         //nginx镜像
"network":"HOST",                     //网络模式为HOST
"parameters":[],
"privileged":false,
"forcePullImage":false                  //不强制更新镜像
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}
http://i2.运维网.com/images/blog/201808/16/29c34809e055abfa94488f8bf5e09fad.png

2.上传nginx.json任务到Marathon

curl -X POST -H "Content-type:application/json" http://192.168.96.46:8080/v2/apps -d@nginx.json
http://i2.运维网.com/images/blog/201808/16/38358113efcd57d2fb99423805c2c6f6.png

3.在slave1上查询,可以查看到nginx正在下载

  ps aux | grep docker


root       36680.00.6 121912 12872 pts/0    Sl+10:20   0:00 /usr/bin/docker-current -H unix:///var/run/docker.sock pull nginx:latest
docker images
REPOSITORY          TAG               IMAGE ID            CREATED             SIZE
docker.io/nginx   latest            c82521676580      3 weeks ago         109 MB
4.查看所有镜像信息,已经在运行中了

  docker ps -a


CONTAINER ID      IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
1140fbfdb9f6      nginx               "nginx -g 'daemon ..."   5 minutes ago       Up 5 minutes                                 mesos-a0b5fe43-dfab-4b7e-8a1f-df205371dffd-S0.0b72cb40-29e6-4d6b-a266-6f61c77f6951
a07783adf66d      docker.io/centos    "/bin/bash"            8 hours ago         Exited (0) 8 hours ago                     optimistic_austin
6dfc71a1c5bd      nginx               "nginx -g 'daemon ..."   8 hours ago         Created                                    ecstatic_euclid
f5df1d3fef2a      015566d5b844      "/bin/sh -c 'yum -..."   9 hours ago         Exited (1) 9 hours ago                     eloquent_davinci
02fb081e0119      015566d5b844      "/bin/sh -c 'yum -..."   9 hours ago         Exited (1) 9 hours ago                     confident_brahmagupta
http://i2.运维网.com/images/blog/201808/16/c72adb65e17dde335e1187b6079ed5c3.png

5.访问Mesos、Marathon管理平台查看任务,如下
http://i2.运维网.com/images/blog/201808/16/b5788a26bbbb2dab53d5c2045b68b286.png
http://i2.运维网.com/images/blog/201808/16/c5c4b59b40e35d23ee79f236635bf3d9.png
http://i2.运维网.com/images/blog/201808/16/374e8a5613df060728ec25727c550da0.png

6.访问测试 http://192.168.175.153/,nginx容器已经运行成功了
http://i2.运维网.com/images/blog/201808/16/78b4afc5a872c256c9645858e9ea00e5.png



页: [1]
查看完整版本: 【亲测】Marathon+Mesos+Zookeeper集群平台部署(实现多实例Docker)