Docker方式搭建Mesos+Zookeeper+Chronos集群

目录

 

前言

一、搭建环境说明

二、前期准备工作

三、开始正式搭建

1、安装Zookeeper

2、安装Mesos-master

3、安装Chronos

4、安装Mesos-slave

四、测试

五、关于卸载


前言

本文介绍如何使用Docker方式快速搭建三主一从(本地环境有限,实际生产环境可以最好是三主二从)Mesos+Zookeeper+Chronos定时任务集群。

总体架构图:

 

一、搭建环境说明

使用VMware12新建4台虚拟机

序号

虚拟机版本

IP

安装

1

CentOS7.0

192.168.121.66

Mesos Master1.6.2 + Zookeeper3.5 + Chronos3.0.2

2

CentOS7.0

192.168.121.67

Mesos Master1.6.2 + Zookeeper3.5 + Chronos3.0.2

3

CentOS7.0

192.168.121.70

Mesos Master1.6.2 + Zookeeper3.5 + Chronos3.0.2

4

Ubuntu16.04

192.168.121.71

Mesos Slave1.6.2

二、前期准备工作

在4台虚拟机上执行如下命令:

1、关闭防火墙

#临时关闭防火墙
[root@localhost ~]# systemctl stop firewalld
#查看当前防火墙状态
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)#禁止开机启动防火墙
[root@localhost ~]# systemctl disable firewalld

 2、关闭 SELinux

#临时关闭SELinux
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
#查看当前SELinux状态
[root@localhost ~]# getenforce
Disabled#永久关闭SELinux (CentOS7.0)
[root@localhost ~]# vim /etc/selinux/config
改:7 SELINUX=enforcing     #前面的7,表示文档中第7行。方便你查找
为:7 SELINUX=disabled

3、安装 Docker

#CentOS7.0安装Docker
[root@localhost ~]# yum -y install docker#Ubuntu16.04安装Docker
# apt-get update
# apt-get install -y docker.io

 4、配置Docker镜像加速器

[root@localhost ~]# vi /etc/docker/daemon.json 
{"registry-mirrors": ["$(你自己的镜像加速域名)"]
}#重启docker服务
[root@localhost ~]# sudo systemctl daemon-reload
[root@localhost ~]# sudo systemctl restart docker

三、开始正式搭建

对各组件简单说明:

(1)ZooKeeper
         ZooKeeper用于集群的管理,包括统一配置管理,选举Leader等。

(2)Mesos主要由以下几部分组成:

        Master: 管理各Slave节点

        Slave: 为集群提供资源

        Framework: scheduler从Master请求资源,executor在Slave上执行任务

        Slave节点上的每个executor是一个容器

(3)Chronos:
         Chronos本质上是cron-on-mesos,这是一个用来运行基于容器定时任务的Mesos框架。

1、安装Zookeeper

(1)安装

#在192.168.121.66机器上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart=always --name=zk-master01 --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=1" \
-e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888;2181 server.2=192.168.121.67:2888:3888;2181 server.3=192.168.121.70:2888:3888;2181" \
zookeeper:3.5#在192.168.121.67机器上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart=always --name=zk-master02 --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=2" \
-e "ZOO_SERVERS=server.1=192.168.121.66:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=192.168.121.70:2888:3888;2181" \
zookeeper:3.5#在192.168.121.70机器上执行
docker run -d -p 2181:2181 -p 2888:2888 -p 3888:3888 --restart=always --name=zk-master03 --net=host \
-v /opt/zookeeper/logs:/opt/zookeeper/logs \
-v /opt/zookeeper/data:/data \
-v /opt/zookeeper/datalog:/datalog \
-e "ZOO_MY_ID=3" \
-e "ZOO_SERVERS=server.1=192.168.121.66:2888:3888;2181 server.2=192.168.121.67:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" \
zookeeper:3.5

命令说明:

1) 执行 docker run 命令会先从本地镜像中查找是否已有该镜像,如果没有会从镜像仓库中直接下载。

2)参数: -d 后台启动

                 -p 配置容器和主机端口映射,前面是宿主机端口,后面是容器端口

                 -v 配置挂载路径,前面是宿主机路径,后面是容器路径

                 -e 配置容器环境变量

3) Zookeeper3.5 和 Zookeeper3.4的 “ZOO_SERVERS”不同,多了“;2181”,详见官方文档说明

4) 具体Zookeeper的搭建过程可以参考另一篇文章:Docker方式搭建Zookeeper集群

(2)查看

#查看Zookeeper日志(192.168.121.66机器上)
[root@localhost ~]# docker logs zk-master01【这里是容器名称,也可以容器ID】
中间可能会报java.net.ConnectException: Connection refused (Connection refused)
异常,是由于三台机器不是同事启动,可以忽略#进入容器内查看Zookeeper是否正常启动(192.168.121.67机器上)
[root@localhost ~]# docker exec -it zk-master02 bash
root@localhost:/apache-zookeeper-3.5.6-bin# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader(表示启动正常,此机器上的Zookeeper是leader)

2、安装Mesos-master

(1)安装

#在192.168.121.66机器上执行
docker run -d --restart=always --name=mesos-master-01 --net=host \
-e MESOS_PORT=5050 \
-e MESOS_HOSTNAME=192.168.121.66 \
-e MESOS_IP=192.168.121.66 \
-e MESOS_ZK=zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
-e MESOS_QUORUM=2 \
-e MESOS_REGISTRY=in_memory \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-v /var/lib/mesos-master/log:/var/log/mesos \
-v /var/lib/mesos-master/tmp:/var/tmp/mesos \
mesosphere/mesos-master:1.6.2;#在192.168.121.67机器上执行
docker run -d --restart=always --name=mesos-master-02 --net=host \
-e MESOS_PORT=5050 \
-e MESOS_HOSTNAME=192.168.121.67 \
-e MESOS_IP=192.168.121.67 \
-e MESOS_ZK=zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
-e MESOS_QUORUM=2 \
-e MESOS_REGISTRY=in_memory \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-v /var/lib/mesos-master/log:/var/log/mesos \
-v /var/lib/mesos-master/tmp:/var/tmp/mesos \
mesosphere/mesos-master:1.6.2;#在192.168.121.70机器上执行
docker run -d --restart=always --name=mesos-master-03 --net=host \
-e MESOS_PORT=5050 \
-e MESOS_HOSTNAME=192.168.121.70 \
-e MESOS_IP=192.168.121.70 \
-e MESOS_ZK=zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
-e MESOS_QUORUM=2 \
-e MESOS_REGISTRY=in_memory \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_WORK_DIR=/var/tmp/mesos \
-v /var/lib/mesos-master/log:/var/log/mesos \
-v /var/lib/mesos-master/tmp:/var/tmp/mesos \
mesosphere/mesos-master:1.6.2;

 (2)查看

#查看mesos-master日志
[root@localhost ~]# docker logs mesos-master-01【这里是容器名称,也可以是容器ID】
....前面省略,看到Successfully代表启动成功
I0110 07:03:41.131363    10 registrar.cpp:383] Successfully fetched the registry (0B) in 1.167872ms
I0110 07:03:41.131428    10 registrar.cpp:487] Applied 1 operations in 17783ns; attempting to update the registry
I0110 07:03:41.133059    10 registrar.cpp:544] Successfully updated the registry in 1.609984ms
I0110 07:03:41.133093    10 registrar.cpp:416] Successfully recovered registrar
I0110 07:03:41.133174    10 master.cpp:1825] Recovered 0 agents from the registry (145B); allowing 10mins for agents to reregister

(3)访问测试

3、安装Chronos

(1)安装

#在192.168.121.66机器上执行
docker run -d --restart=always --name=chronos-01 --net=host \
-e PORT0=4400 \
-e PORT1=4401 \
mesosphere/chronos:v3.0.2 \
--hostname 192.168.121.66 \
--master zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
--zk_hosts zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181#在192.168.121.67机器上执行
docker run -d --restart=always --name=chronos-02 --net=host \
-e PORT0=4400 \
-e PORT1=4401 \
mesosphere/chronos:v3.0.2 \
--hostname 192.168.121.67 \
--master zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
--zk_hosts zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181#在192.168.121.70机器上执行
docker run -d --restart=always --name=chronos-03 --net=host \
-e PORT0=4400 \
-e PORT1=4401 \
mesosphere/chronos:v3.0.2 \
--hostname 192.168.121.70 \
--master zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \
--zk_hosts zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181

 (2)查看

#查看Chronos启动日志(启动可能会比较慢)
[root@localhost ~]# docker logs chronos-01 【这里是容器名称,也可以是容器ID】
...前面省略
2020-01-10 07:18:22.264:INFO:oejsh.ContextHandler:HttpService STARTING: Started o.e.j.s.ServletContextHandler@180a25b8{/,null,AVAILABLE}
2020-01-10 07:18:22.278:INFO:oejs.ServerConnector:HttpService STARTING: Started ServerConnector@132df861{HTTP/1.1,[http/1.1]}{0.0.0.0:4400}
2020-01-10 07:18:22.278:INFO:oejs.Server:HttpService STARTING: Started @22572ms
07:18:22.281 [main] INFO org.apache.mesos.chronos.scheduler.Main$ - All services up and running.
07:18:33.628 [main-SendThread(192.168.121.67:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x200002d4b2e0005 after 0ms
07:18:46.967 [main-SendThread(192.168.121.67:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x200002d4b2e0005 after 0ms

(3)访问测试

在Mesos Framework中可以看到Active Frameworks的列表里面有Chronos

也可以直接通过ip + 端口号也可以访问到Chronos

4、安装Mesos-slave

(1)安装

#在192.168.121.71机器上执行
docker run -d --restart=always --name=mesos-slave-01 --pid=host --net=host --privileged \-e MESOS_PORT=5051 \-e MESOS_MASTER=zk://192.168.121.66:2181,192.168.121.67:2181,192.168.121.70:2181/mesos \-e MESOS_SWITCH_USER=0 \-e MESOS_CONTAINERIZERS=docker,mesos \-e MESOS_LOG_DIR=/var/log/mesos \-e MESOS_WORK_DIR=/var/tmp/mesos \-e MESOS_HOSTNAME=192.168.121.71 \-e MESOS_IP=192.168.121.71 \-v /var/lib/mesos-slave/log:/var/log/mesos \-v /var/lib/mesos-slave/tmp:/var/tmp/mesos \-v /var/run/docker.sock:/var/run/docker.sock \-v /cgroup:/cgroup \-v /sys:/sys \-v /run:/run \-v /usr/local/bin/docker:/bin/docker \mesosphere/mesos-slave:1.6.2;说明:添加 “--pid=host” 参数是为了清理僵尸进程

(2)查看

#查看mesos-slave启动日志
# docker logs mesos-slave-01【这里是容器名称,也可以是容器ID】
...前面省略
I0110 07:25:00.915324     7 slave.cpp:1492] Registered with master master@192.168.121.66:5050; given agent ID 6be11dad-35b2-41b2-a15e-1220339e62ff-S0
I0110 07:25:00.918725     6 task_status_update_manager.cpp:188] Resuming sending task status updates
I0110 07:25:01.044843     7 slave.cpp:1561] Forwarding agent update {"operations":{},"resource_version_uuid":{"value":"abcO1x4pTSqBhhTRD5aI1Q=="},"slave_id":{"value":"6be11dad-35b2-41b2-a15e-1220339e62ff-S0"},"update_oversubscribed_resources":true}

(3)访问测试

在Mesos首页可以看到Resources中的资源数量

在Mesos的Agents中也可以看到新添加的从机(Agent其实就是Slave)

到此全部的安装工作就已经完成了。

下面开始进行测试。

四、测试

在Chronos页面点击ADD JOB,添加一个任务

时间是UTC格式,这里简单输出一个hello,也可以写一个定时任务(eg: while true; do echo hello mesos; sleep 10;done;)。

等到指定时间后自动执行任务。

运行success后可以在mesos主页Completed Tasks列表中看到完成的任务。

五、关于卸载

以下是关于卸载的操作(仅限本地测试环境,实际开发中慎用):

#强制删除所有运行中的镜像(慎用)
docker rm -f $(docker ps -qa)#删除所有挂载目录(根据自己设置的目录调整)
#三台Master机器上
rm -rf /opt/zookeeper
rm -rf /var/lib/mesos-master
#Slave机器上
rm -rf /var/lib/mesos-slave

总结:本次只是记录了如何使用Docker搭建Mesos + Zookeeper + Chronos 集群,并没有具体解释其中的工作机制和内部原理,另外,因为没有使用到Marathon相关的服务,所以这里也没有安装Marathon。使用Docker方式使搭建Mesos变得方便,使用Mesos又使管理Docker集群变得简单。

 

参考地址:

Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker):https://www.cnblogs.com/ee900222/p/docker_2.html

Mesos+Marathon+zk+docker构建PaaS平台:https://blog.51cto.com/linuxzkq/2131961

Docker Hub:https://hub.docker.com/_/zookeeper 、https://hub.docker.com/r/mesosphere/mesos-master


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部