基于zookeeper+mesos+marathon的docker集群管理平台
参考文档:
- mesos:http://mesos.apache.org/
- mesosphere社区版:https://github.com/mesosphere/open-docs
- mesosphere仓库:https://github.com/mesosphere/open-docs/blob/master/downloads/mesos.md
- docker-ce安装:https://docs.docker.com/engine/installation/linux/docker-ce/centos/
- 原理&安装参考1:http://www.cnblogs.com/kevingrace/p/5685313.html
- 原理&安装参考2:http://www.xuliangwei.com/xubusi/422.html
本文主要涉及基于zookeeper+mesos+marathon的docker集群管理平台的配置操作,原理可见上面参考文档。
一.环境
1. 拓扑

2. 拓扑说明
|
主机名 |
IP |
OS |
安装服务 |
|
master-node1 |
10.11.4.156 |
CentOS-7-x86_64-1511 |
zookeeper, mesos-master, marathon |
|
master-node2 |
10.11.4.157 |
CentOS-7-x86_64-1511 |
zookeeper, mesos-master, marathon |
|
master-node3 |
10.11.4.158 |
CentOS-7-x86_64-1511 |
zookeeper, mesos-master, marathon |
|
slave-node1 |
10.11.4.146 |
CentOS-7-x86_64-1511 |
mesos-slave, docker |
|
slave-node2 |
10.11.4.147 |
CentOS-7-x86_64-1511 |
mesos-slave, docker |
|
slave-node3 |
10.11.4.148 |
CentOS-7-x86_64-1511 |
mesos-slave, docker |
3. 软件版本
|
服务 |
版本 |
作用 |
|
zookeeper |
3.4.10 |
保持各master之间的通信,选举leader |
|
mesos-master |
1.3.0 |
管理接入mesos的各个framework & slave,并将slave上的资源按照相应策略分配给framework |
|
mesos-slave |
1.3.0 |
任务执行节点 |
|
marathon |
1.4.7 |
调度器,用于下发任务,可保持长应用 |
|
docker |
17.06.1.ce |
具体执行docker下发任务 |
二.环境Master节点
以master-node1为例,master-node2/node3配置根据环境微调。
1. zookeeper安装
请参考:http://www.cnblogs.com/netonline/p/7695034.html
ps:zookeeper需要java支持,这里安装的是jdk-8u131-linux-x64。
2. mesos-master&marathon安装配置
1)安装mesos-master&marathon
# 添加mesosphere repository,根据github mesosphere社区版获取最新repository
[root@master-node1 ~]# cd /usr/local/src/
[root@master-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# yum install mesos marathon -y
2)mesos-master&marathon关联zookeeper
[root@master-node1 src]# cd ~ #mesos-master选主;
#完全替换默认配置
[root@master-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos #marathon选主;
#默认marathon无相关配置目录/文件
[root@master-node1 ~]# mkdir -p /etc/marathon/conf/
[root@master-node1 ~]# vim /etc/marathon/conf/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/marathon
3)marathon连接mesos-master
#默认marathon无相关配置master文件
[root@master-node1 ~]# vim /etc/marathon/conf/master
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos
4)mesos-master配置quorum&work_dir
#quorum设置为整数,且大于master节点数的1/2
[root@master-node1 ~]# echo "2" > /etc/mesos-master/quorum #work_dir也在/etc/mesos-master/目录下,保持默认值即可
[root@master-node1 ~]# cat /etc/mesos-master/work_dir
/var/lib/mesos
5)mesos-master&marathon配置ip&hostname
#hostname直接配置的本机ip,是为了防止出现dns无法解析的问题;
#其余两个节点也配置本机地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/ip
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/hostname #marathon配置hostname;
#其余两个节点也配置本机地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/marathon/conf/hostname #修改hosts
[root@master-node1 ~]# echo "10.11.4.156 master-node1" >> /etc/hosts
6)开机启动
[root@master-node1 ~]# systemctl enable mesos-master marathon
[root@master-node1 ~]# systemctl disable mesos-slave
[root@master-node1 ~]# systemctl start mesos-master marathon
3. 设置iptables
# tcp2181,2888,3888与zookeeper相关;
# tcp5050是mesos-master的访问端口;tcp5051是mesos-slave的访问端口;
# tcp8080是marathon的访问端口。
[root@master-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5050 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT [root@master-node1 ~]# service iptables restart
三.Slave节点
以slave-node1为例,slave-node2/node3配置根据环境微调。
1. docker安装配置
[root@slave-node1 ~]# yum remove docker docker-common docker-selinux docker-engine #镜像驱动使用device-mapper
[root@slave-node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 #添加repository
[root@slave-node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@slave-node1 ~]# yum makecache fast [root@slave-node1 ~]# yum install docker-ce -y #配置mirror
[root@slave-node1 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxxx.m.daocloud.io #安装brctl,方便查看bridge
[root@slave-node1 ~]# yum install bridge-utils-1.5-9.el7.x86_64 -y #开机启动
[root@slave-node1 ~]# systemctl enable docker
[root@slave-node1 ~]# systemctl start docker
2. mesos-slave安装配置
1)安装mesos-slave
[root@slave-node1 ~]# cd /usr/local/src/
[root@slave-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# yum install mesos -y
2)mesos-slave关联zookeeper
[root@slave-node1 src]# cd ~ #完全替换默认配置
[root@slave-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos
3)配置marathon调用mesos运行docker
[root@slave-node1 src]# cd ~
[root@slave-node1 ~]# echo "docker,mesos" > /etc/mesos-slave/containerizers
4)mesos-slave配置ip&hostname
#其余两个节点也配置本机地址即可
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/ip
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/hostname #修改hosts
[root@master-node1 ~]# echo "10.11.4.146 slave-node1" >> /etc/hosts
5)开机启动
[root@slave-node1 ~]# systemctl enable mesos-slave
[root@slave-node1 ~]# systemctl disable mesos-master
[root@slave-node1 ~]# systemctl start mesos-slave
3. 设置iptables
# tcp5051是mesos-slave的访问端口。
[root@slave-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT [root@slave-node1 ~]# service iptables restart # iptabes重启后重新加载配置文件中的配置,默认配置中没有docker0网桥的nat表规则;
#重启docker将相关规则加载到iptables中,再保存规则到配置文件中;
#如果iptables中没有docker0网桥的nat表规则,在创建带有端口映射的容器时,会报错:"ExitCode": 128,iptables相关规则不能创建
[root@slave-node1 ~]# systemctl restart docker
[root@slave-node1 ~]# service iptables save
四.验证
1. mesos
登陆mesos web:http://10.11.4.156:5050
#登陆10.11.4.157/158都可以,通过zookeeper选主,登陆任一地址都会跳转到leader页面。
1)mesos-homepage
- (1). 从首页可以看到mesos-master的leader是:10.11.4.157;
- (2). mesos-agent:activated状态的agent有3个;
- (3). mesos-master管理的3个agent的资源已汇总。

2)mesos-Frameworks
- (1). 在mesos框架中,marathon框架已经被识别,marathon的leader是:10.11.4.157;
- (2). 虽然mesos-master与marathon的leader相同,但两者的leader是zookeeper独立选举的,并没有直接关系,是可以不同的。

3)mesos-Agents
- (1). 在Agnets中能看到3个agent;
- (2). 同时能看到每个agent的资源;

- (3). 点击任一agent id,能看到更详细的agent信息。

4)mesos state
浏览器访问:http://10.11.4.158:5050/master/state
2. marathon
登陆marathon web:http://10.11.4.156:8080
#或者点击mesos-frameworks页面中,已经选举出的marathon leader;
#登陆10.11.4.157/158都可以,通过zookeeper选主,登陆任一地址都会跳转到leader页面。
1)marathon-homepage
- (1). 在首页中点击右上角问号,选择"About";

- (2). marathon-leader:10.11.4.157:8080;
- (3). marathon连接到mesos leader:10.11.4.157:5050。

3. marathon下发应用
1)API方式
#marathon是有api接口的,通过api的方式可调用marathon执行相关应用调度的请求
#在marathon服务所在节点创建json文件;
#以下json文件中的注释需去掉。
[root@master-node1 ~]# vim nginx.json
{
"id":"nginx1", #容器名,只在marathon生效
"cpus":0.2, #cpu用量
"mem":20.0, #mem用量
"instances": 1, #容器数量
"constraints": [["hostname", "UNIQUE",""]], #限制
"container": {
"type":"DOCKER", #应用类型
"docker": { #docker具体配置
"image": "nginx", #采用的image
"network": "BRIDGE", #网络模式
"portMappings": [
{"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
] #端口映射,”0”表示任意端口,"servicePort"服务端口
}
}
} #调用json文件
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d @/root/nginx.json -H "Content-type: application/json"
- (1). 登陆marathon,查看应用已下发成功,处于"Running"状态;容器的资源配置遵从json文件中的设置;针对应用,点击最右侧的"…"按钮,可进行相关操作;

- (2). 点击应用名或状态,查看应用具体信息,可查到此应用下发到slave节点:10.11.4.147,且映射主机的31896端口;同时可查看"stderr"与"stdout"日志等(也可到mesos任务的"Sandbox"中查看下载);

- (3). Configuration标签下,列出了生成的容器的相关配置,除json文件预设置的参数外,还有json文件中定义的"任意值"也有了明确的配置;同时可以"Edit";

- (4). 在slave节点:10.11.4.147下查看容器;
[root@slave-node2 ~]# docker ps

- (5). web访问:http://10.11.4.147:31896

- (6). 登陆mesos,"Active Tasks"有处于运行状态的任务。

2)通过marathon web页面手工创建
- (1). 点击marathon首页右上角的"Create Application",选择"JSON Mode",粘帖相关json配置,实质上这也是在调用marathon的api接口,只是入口变为web页面;

- (2). 取消"JSON Mode",可以看到粘帖的json配置已经被记录下来;也可以直接在非"JSON Mode"填写相关配置。



基于zookeeper+mesos+marathon的docker集群管理平台的更多相关文章
- Docker集群管理(一)—— 基础docker+swarm+shipyard
目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...
- docker集群管理
docker集群管理 ps:docker machine docker swarm docker compose 在Docker Machine发布之前,你可能会遇到以下问题: ...
- docker集群管理之kubernetes
一.简介 kubernetes又叫做k8s,是Google开发的一款开源的docker集群管理工具,在这里对它的“发家史”,我不做过多的阐述,有时间大家可以自己去百度一下: 下面我要讲的就是容易混淆的 ...
- 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台
背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...
- OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南
产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件 ...
- centos7上基于kubernetes的docker集群管理
kubernetes和docker的作用这里就不作介绍了,直接进入主题. 本文的目的是搭建docker集群,并使用kubernetes管理它们. 文中的软件环境除了kubernetes和docker, ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- Centos下安装Docker集群管理工具Shipyard
一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...
- Docker集群管理(三)—— docker swarm mode基础教程
docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...
随机推荐
- 404 Note Found 队-Alpha10
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- EF Core中外键关系的DeleteBehavior介绍(转自MSDN)
Delete behaviors Delete behaviors are defined in the DeleteBehavior enumerator type and can be passe ...
- POJ 3762 The Bonus Salary!(最小K覆盖)
POJ 3762 The Bonus Salary! 题目链接 题意:给定一些任务.每一个任务有一个时间,有k天.一个时间仅仅能运行一个任务,每一个任务有一个价值.问怎么安排能得到最多价值 思路:典型 ...
- nginx编译问题:make[1]: *** [/usr/local/pcre//Makefile] Error 127
解决方法: 是由于nginx高版本的需要使用pcre原文件路径. 解压pcre-7.9.tar.gz 例如解压后位置在 /home/wang/pcre-7.9位置 使用nginx配置的时候 ./con ...
- C# 参数关键字params的作用
为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,要求: (1)在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params ...
- Linux基础-4.正文处理命令及tar命令
1.使用cat命令进行文件的纵向合并 1)掌握使用cat命令的纵向合并 a)例如:使用cat命令将test1.file1.txt和file2这三个文件纵向合并为file文件的命令为: cat test ...
- 关于json时间数据格式转换与修改
使用easyui获取JSON时间数据时间数据时,通常是一长串的数字而不是我们想要的类似2018-11-01的普通时间格式. 此时我们就需要使用到关于JSON时间的格式化,而将时间转化成我们想要的格式. ...
- [转]windows下多个python版本共存,pip使用
windows下多个python版本共存,pip使用 2017年09月13日 17:21:30 阅读数:2574 一.同时装了Python3和Python2,怎么区分 了解python的人都知道pyt ...
- BigData:值得了解的十大数据发展趋势
当今,世界无时无刻不在发生着变化.对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展.目前,大数据的作用已经上 ...
- exynos4412—CMU裸板复习
本章描述了Exynos 4412 SCP的时钟管理单元(CMUs).在Exynos 4412 SCP中,CMUs控制相位锁相环(PLLs),并为CPU.总线和单个ip的功能时钟生成系统时钟.它们还与电 ...