部署Mesos+zookeeper+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的请求进行服务了。

部署Mesos+zookeeper+Marathon+Docker

Column 1Column 2Column 3
master1192.168.100.11jdk、mesos、zookeeper、marathon
master2192.168.100.21jdk、mesos、zookeeper、
master3192.168.100.31jdk、mesos、zookeeper、
slave1192.168.100.41jdk、mesos、zookeeper、docker
slave2192.168.100.51jdk、mesos、zookeeper、docker

 分别给主机命名

hostnamectl set-hostname master1 (其他四台: maste2、 maste3、slave1、slave2)

 

# vim /etc/hosts    (所有主机同步)
192.168.100.11 master1
192.168.100.21 master2
192.168.100.31 master3
192.168.100.41 slave1
192.168.100.51 slave2

配置JAVA环境

# cat /etc/redhat-release   //查看Linux版本
# uname -r   //查看内核版本(需要内核3.10以上)
# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
# cd  /usr/local/
# mv jdk1.8.0_91/ java
# vim /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

 添加apache-maven源

 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

配置WANdiscoSVN网络源

# vim /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

配置Mesos环境变量

# vim /etc/profile
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
# source /etc/profile

添加依赖包

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

安装开发工具

# yum groupinstall -y "Development Tools"

构建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/
# mv mesos-0.25.0/ /root/
# cd /root/mesos-0.25.0
# mkdir build
# cd build
# ../configure

# make              //等待时间长  且不能断网 前面的环境包不能少
# make check
# make install    

安装完成后克隆四台

所有master

# wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
# tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/
# cd /home/q/zookeeper-3.4.10/
# mv conf/zoo_sample.cfg conf/zoo.cfg
# ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master

在master1中操作

# cd /home/q/zookeeper-3.4.10/conf
# vim zoo.cfg 
 dataDir=/home/q/zookeeper-3.4.10/data   //修改zookeeper数据文件存放目录
 dataLogDir=/home/q/zookeeper-3.4.10/datalog    //zookeeper日志存放目录
 server.1=192.168.100.11:2888:3888    //数字1,2,3表示这个是第几号服务器(是上面myid文件里对应的数字);中间的是master主节点的ip地址
 server.2=192.168.100.21:2888:3888         //第一个端口2888(这个端口可以自己定义)表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
 server.3=192.168.100.31:2888:3888      //第二个端口3888表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
//把配置文件传输给其他maste
# scp zoo.cfg 192.168.100.21:/home/q/zookeeper-3.4.10/conf/
# scp zoo.cfg 192.168.100.31:/home/q/zookeeper-3.4.10/conf/

在master1主机上操作(/home/q/zookeeper-3.4.10/中)

# mkdir data datalog 
# echo 1 > data/myid
# ./bin/zkServer.sh start conf/zoo.cfg    //开启zookeeper服务
# 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.100.11:2181/mesos --quorum=2
//启动mesos

在master2主机上操作(/home/q/zookeeper-3.4.10/中)

# mkdir data datalog 
# echo 2 > data/myid
# ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
# 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.100.21:2181/mesos --quorum=2

在master3主机上操作(/home/q/zookeeper-3.4.10/中)

# mkdir data datalog 
# echo 3 > data/myid
# ./bin/zkServer.sh start conf/zoo.cfg    //开启服务
# 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.100.31:2181/mesos --quorum=2

slave1、slave2 上操作

安装docker并且启动

# yum install docker -y
# systemctl start docker
# systemctl enable docker
//开启slave-mesos 
# ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
# mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.100.11:2181,192.168.100.21:2181,192.168.100.31:2181/mesos --no-hostname_lookup --ip=0.0.0.0

 在master上查看leader

然后在浏览器输入任意master的IP+端口5050

会自动跳转到被指定为leader的主机IP上去

# cd /home/q/zookeeper-3.4.10/
# ./bin/zkServer.sh status

在master1上 部署运行marathon

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

# wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz
    # tar zxvf marathon-0.15.2.tgz -C /home/q/
    # cd /home/q/marathon-0.15.2/
    # ./bin/start --hostname 192.168.100.11 --master zk://192.168.100.11:2181,192.168.100.21:2181,192.168.100.31:2181/mesos --http_address 0.0.0.0

测试

浏览器输入:http://192.168.100.11:8080/
创建一个test的任务
然后去mesos网页查看:http://192.168.100.31:5050/
可以看到任务已经分配给slave1 和slave2

查看执行事件相关信息

# cd /home/q/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors
# cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest
//标准错误和标准输出信息
stderr  stdout
//查看输出字符串
cat stdout
---------------显示以下内容---------------------------
Registered executor on 192.168.100.51
Starting task test.f99a7592-a099-11e8-a6b5-52540011572d
sh -c 'echo "hello world"'
hello world
Forked command at 3493
Command exited with status 0 (pid: 3493)

使用mesos与marathon创建docker集群(在另外一个slave上操作)

[root@slave2 ~]# cat nginx.json
 {
    "id":"/nginx",                               //应用的唯一ID
    "container":{                              //marathon启动docker格式
    "type":"DOCKER",
    "docker":{
    "image":"nginx",                       //nginx镜像
    "network":"HOST",                  //网络为HOST模式
    "parameters":[],
    "privileged":false,
    "forcePullImage":false          //是否强制更新镜像
    }
    },
    "cpus":0.1,
    "mem":32.0,
    "instances":1
}

[root@slave2 ~]# curl -X POST -H "Content-type:application/json" http://192.168.100.11:8080/v2/apps -d@nginx.json
//发送json文件给marathon
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.100.11:2181,192.168.100.21:2181,192.168.100.31:2181/mesos --no-hostname_lookup --ip=0.0.0.0

 

可以看到分配给了slave2这台机器了

在slave2上使用命令查看执行进程

[root@slave2 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
285738539d0c        nginx               "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes                            mesos-87685f39-9a56-4833-afac-a6c2801e6b7f-S2.9bdd11b2-4a0b-4337-a3c6-89e80333763b

 访问Nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值