mesos,marathon,haproxy on centos7 最完美安装教程
前言
本教程参考
http://blog.51cto.com/11863547/1903532
http://blog.51cto.com/11863547/1903532
官方文档等...
系统:centos7
软件包:RPM
mes架构

架构图可以看出mesos主要两部分主和从 ,集群依靠zookeeper
mesos运行流程

运行流程是,Agent1向 mesos master注册,mesos master向Framework 1报告有哪些资源,Framework 1 告诉mesos master有两个任务运行(taks1,task2) ,mesos master向
Agent 1提交任务执行。后面就按照这套逻辑循环.
安装
一、环境
1、配置三台服务器,三个mesos-master节点,三个slave节点,我用测试IP
| 主机名 | IP地址 | 所安装的服务 |
| mesos-node1 | eth0:192.168.10.227 |
mesos-master,mesos-slave,marathon, zookeeper,haproxy |
| mesos-node2 | eth0:192.168.10.228 | mesos-master,mesos-slave,marathon,zookeeper,haproxy |
| mesos-node3 | eth0:192.168.10.229 | mesos-master,mesos-slave,marathon,zookeeper,haproxy |
注意以下部分在三台服务器上都要执行
3、关闭SELinux
【临时】
|
1
2
3
|
[root@mesos-node1 ~]]# setenforce 0 [root@mesos-node1 ~]]# getenforce Permissive |
【永久】
更改配置文件/etc/selinux/config 将SELINUX=enforcing修改为SELINUX=disabled重启生效,如果不想重启就将上面临时修改的也执行一次。
4、关闭防火墙
|
1
|
systemctl stop firewalld |
5、配置host解析
|
1
2
3
4
5
6
7
|
[root@mesos-node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.10.227 mesos-node1 192.168.10.228 mesos-node2 192.168.10.229 mesos-node3 [root@mesos-node1 ~]# |
二、部署docker
1、利用yum安装docker
|
1
|
yum install docker |
2、启动docker
|
1
|
systemctl start docker.service |
3、加入开机自启动服务
|
1
|
systemctl enable docker.service |
4、创建docker用户组,避免使用sudo
|
1
|
usermod -aG docker lcm |
三 、部署zookeeper
1、安装Java
|
1
|
yum install -y java |
2、查看Java版本
|
1
2
3
4
5
|
[root@mesos-node1 ~]# java -version openjdk version "1.8.0_121" #<=====OpenJDK1.8 OpenJDK Runtime Environment (build 1.8.0_121-b13) OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) [root@mesos-node1 ~]# |
3、进入源码安装目录下载zookeeper稳定版3.4.9并安装
|
1
2
3
4
|
cd /usr/local/src/ wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.9.tar.gz tar xf zookeeper-3.4.9.tar.gz mv zookeeper-3.4.9 /usr/local/ |
4、创建软连接,方便以后升级时用
|
1
|
ln -s /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper |
5、修改zookeeper配置文件,只修改一个,然后分发到其他两台上
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cd /usr/local/zookeeper/conf mv zoo_sample.cfg zoo.cfg [root@mesos-node1 ~]# grep "^[a-z]" zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 server.1=mesos-node1:2888:3888 server.2=mesos-node2:2888:3888 server.3=mesos-node3:2888:3888 [root@mesos-node1 ~]# |
6、创建dataDir和dataLogDir目录
|
1
|
mkdir -p /usr/local/zookeeper/data /usr/local/zookeeper/logs |
7、在三台服务器上创建myid文件,里面的数据要和配置文件里面的server.后面的数字一样,表示这是第几台服务器
|
1
2
3
|
echo "1" >/usr/local/zookeeper/data/myid echo "2" >/usr/local/zookeeper/data/myid echo "3" >/usr/local/zookeeper/data/myid |
8、启动zookeeper
|
1
2
|
cd /usr/local/zookeeper ./bin/zkServer.s start |
9、查看角色状态
|
1
|
./bin/zkServer.sh status |
可以看到两个follower,一个 leader
10、尝试连接zookeeper
|
1
2
3
4
5
|
./bin/zkCli.sh #<=====连接当前zookeeper ./bin/zkCli.sh -server 192.168.10.228:2181 #<======连接远程zookeeper [zk: 192.168.10.228:2181(CONNECTED) 0] ls / #<======可以用ls /查看 [zookeeper] [zk: 192.168.10.228:2181(CONNECTED) 1] |
OK,zookeeper安装成功,接下来安装mesos
三、mesos+marathon集群部署
1、安装mesosphere仓库
|
1
|
rpm -ivh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm |
2、安装mesos和marathon
|
1
|
yum -y install mesos marathon |
3、增加zookeeper配置
|
1
2
3
|
[root@mesos-node1 ~]# cat /etc/mesos/zk zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/mesos [root@mesos-node1 ~]# |
4、配置mesos-hostname
|
1
2
3
4
5
|
echo 本地IP地址 | tee /etc/mesos-master/ip echo 本地IP地址 | tee /etc/mesos-master/hostname echo 本地IP地址 | tee /etc/mesos-slave/ip echo 本地IP地址 | tee /etc/mesos-slave/hostname echo 2 > /etc/mesos-master/quorum #这个数字要大于安装的master节点的总数的0.5倍,即一半 |
5、配置mesos-master slave marathon开机自启动并启动
|
1
2
|
systemctl enable mesos-master mesos-slave marathon systemctl start mesos-master mesos-slave marathon |
注意:此处我是复制的别人的,因l懒得写了.这里的marathon是没法启动的,因为配置文件没有指定mesos的 master和 zookeeper,
方法1:
打开vi /usr/lib/systemd/system/marathon.service
修改红色部分,master后面填mesos节点,--zk参数和上面的一样 zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/meso,这里我用的单机测试,所以不一样.
自己根据环境,做调整.
[Service]
Type=simple
WorkingDirectory=/usr/share/marathon
EnvironmentFile=/etc/default/marathon
ExecStart=/usr/share/marathon/bin/marathon --master 192.168.0.233:5050 --zk zk://192.168.0.233:2181/marathon
方法2:
针对marathon1.5
vi /etc/default/marathon
MARATHON_MASTER=zk://192.168.0.233:2181/mesos
MARATHON_ZK=zk://192.168.0.233:2181/marathon
或者直连
MARATHON_MASTER=192.168.0.233:5050
这样修改后,marathon就能启动成功了。如果还是不行,查看 /var/log/message 日志.
6、在浏览器打开任意一台服务的mesos
|
1
|
http://192.168.10.227:5050/ |
7、如果出现下面的界面,安装成功

8、运行一个mesos任务来测试
|
1
2
|
MASTER=$(mesos-resolve `cat /etc/mesos/zk`) #<=====获取主服务器的IP地址 mesos-execute --master=$MASTER --name="cluster-test" --command="sleep 60" #如果没有发现任务在运行,可尝试修改--name="cluster-test",这个名字可以随意起 |
9、打开浏览器查看

至此环境已经搭建成功
二、测试,尝试管理一个docker镜像
注意,以下内容没有特别说明可在任意一台服务上完成,我选择在227
1、在docker中下载一个nginx镜像
|
1
|
docker pull nginx |
2、在所有mesos-slave上增加配置参数,并重启(这一步在三台服务上面进行操作)
|
1
2
|
echo 'docker,mesos' | tee /etc/mesos-slave/containerizers systemctl restart mesos-slave |
#配置超时(可选) echo '5mins' > /etc/mesos-slave/executor_registration_timeout
3、在浏览器中打开marathon,默认端口8080
|
1
|
http://192.168.10.227:8080 |

下面通过Mesos调度,使用marathon来创建一个nginx镜像的Docker容器,Marathon启动时会读取/etc/mesos/zk配置文件,Marathon通过Zookeeper来找到Mesos Master。
4、创建nginx配置文件nginx.json,注意红色部分,根据自己环境修改,如果不明白,删除红色部分.红色部分是指明在那台机器部署
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@mesos-node1 ~]# cat nginx.json { "id":"nginx", "cmd": null, "cpus":0.2, "mem":32.0, "instances": 1, "constraints": [["hostname", "UNIQUE",""]], "container": { "type":"DOCKER", "docker": { "image": "nginx", "network": "BRIDGE", "portMappings": [ {"containerPort": 80, "hostPort": 0,"servicePort": 0,"protocol": "tcp" } ] } } } [root@mesos-node1 ~]# |
5、利用curl的方式开启nginx容器
|
1
|
curl -X POST http://192.168.10.227:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json" |
6、查看开启的容器
|
1
2
3
|
[root@mesos-node1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5175ef6c9dde nginx "nginx -g 'daemon off" About a minute ago Up Abo |
7、在浏览器中查看


但是我们可以发现,只能227这台服务器来访问这个端口,出现nginx页面,用其他的IP地址显然是不可以的.

so,接下来我们就来配置服务发现,设置一个固定端口,实现让每个IP地址都可以访问到这个页面。
注意:marathon生成的外部端口是随机的,在marathon的ui界面查看,或docker ps命令
四、服务发现和haproxy
以下操作在三台服务上都有
1、安装haproxy
|
1
|
yum -y install haproxy |
2、设置服务发现
|
1
2
3
4
|
mkdir -p /etc/marathon/conf cp /etc/mesos/zk /etc/marathon/conf/master cp /etc/marathon/conf/master /etc/marathon/conf/zk sed -i 's|mesos|marathon|g' /etc/marathon/conf/zk |
注意:
上面是marathon1.5版本前的设置,
最新版设置方法
vi /etc/default/marathon
MARATHON_MASTER=zk://192.168.0.233:2181/mesos
MARATHON_ZK=zk://192.168.0.233:2181/marathon
3、设置文件/etc/haproxy-marathon-bridge/marathons
|
1
2
3
4
5
6
|
mkdir /etc/haproxy-marathon-bridge/ [root@mesos-node1 conf]# cat /etc/haproxy-marathon-bridge/marathons 192.168.10.227:8080 192.168.10.228:8080 192.168.10.229:8080 [root@mesos-node1 conf]# |
4、下载安装脚本 haproxy-marathon-bridge
https://github.com/maricaantonacci/haproxy-marathon-bridge
5、添加执行权限
|
1
|
chmod +x /etc/init.d/haproxy-marathon-bridge |
6、通过 haproxy-marathon-bridge脚本从Marathon生成一个HAProxy配置在localhost:8080运行:
|
1
|
./haproxy-marathon-bridge 192.168.10.227:8080 > /etc/haproxy/haproxy.cfg |
7、将haproxy加入开机自启动并启动
|
1
2
|
systemctl start haproxy systemctl enable haproxy |
8、开启haproxy的定时任务,每一分钟加入一次任务。
|
1
|
/etc/init.d/haproxy-marathon-bridge install_cronjob |
9、查看nginx.json文件,注意红色部分,上面有说明.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@mesos-node1 ~]# cat nginx.json { "id":"nginx", "cmd": null, "cpus":0.2, "mem":32.0, "instances": 1, "constraints": [["hostname", "UNIQUE",""]], "container": { "type":"DOCKER", "docker": { "image": "nginx", "network": "BRIDGE", "portMappings": [ {"containerPort": 80, "hostPort": 0,"servicePort": 3030, "protocol": #此处我设置了固定的端口,这个端口可以按照自己公司的要求来随意设定。 "tcp" } ] } } } [root@mesos-node1 ~]# |
用curl -X POST http://192.168.10.227:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json" 提交下任务
可以看到服务发现自动生成了这个访问端口,将它映射在随机生成的端口上,至此我们就可以用任意一台的IP地址来访问这个端口了。

11.通过haproxy的ui界面查看服务开放的状态

总结
重启电脑,需按照顺序启动, zookeeper systemctl start mesos-master mesos-slave marathon haproxy
有什么问题,留言吧。
mesos,marathon,haproxy on centos7 最完美安装教程的更多相关文章
- Centos7下完美安装并配置mysql5.6
Centos7将默认数据库mysql替换成了Mariadb,对于我们这些还想用mysql的人来说并不是一个好消息. 最近我搜罗了网上各种安装教程,各种出问题,要么安装失败,要么安装成功了却使用不了my ...
- [Docker]CentOS7下Docker安装教程
想要倒腾Kubernetes的话,第一步就是要会安装Docker,这篇文章讲一讲过程 安装步骤 检查内核版本,必须是3.10以上 uname -r 安装Docker yum -y install do ...
- 【Nginx】Nginx简介及在CentOS7.0下安装教程
是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能 ...
- 170419、Centos7下完美安装并配置mysql5.6
首先跟各位说声抱歉,原计划说每天一篇博文,最近由于实在太忙,封闭式开发一个项目,没有时间写博文,望大家见谅!!! 由于公司要搭建分布式服务,我把最近我所用到或者学习的技术或者遇到的问题跟大家分享一下! ...
- VMware虚拟机与Linux Centos7下载及安装教程
1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:https://www.centos.org/download/ DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上 ...
- 阿里云Centos7.x MySql安装教程示例
创建用户 useradd mysql; passwd mysql; 下载(比如:5.5.61) 地址 https://dev.mysql.com/downloads/mysql/5.6.html#do ...
- 【keepalived】CentOS7.0下安装教程
安装前所需环境 keepalived安装之前,需要环境:wget.gcc.pcre.openssl.zlib.popt-devel 1,wget:用于从外网上下载插件 wget安装命令:yum -y ...
- ArcGIS 10.2 二次开发,兼容Visual Studio 2012二次开发,完美安装教程
GIS 经常安装是常有的事,每次重装系统都要浪费大半天去安装这个.所以凑这一次安装,把这个软件重新安装的步骤整理了一下,希望对大家有所帮助.这次整理的内容的关键优点是,对常见的出错内容进行了归纳整理. ...
- Centos7下载和安装教程
https://blog.csdn.net/qq_42570879/article/details/82853708 阿里下载64bit镜像:http://mirrors.aliyun.com/cen ...
随机推荐
- Bugku 杂项 签到题
签到题 加微信公众号会发现
- hdu 5511 Minimum Cut-Cut——分类讨论思想+线段树合并
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5511 题意:割一些边使得无向图变成不连通的,并且恰好割了两条给定生成树上的边.满足非树边两段一定在给定生成 ...
- [hadoop](2) MapReducer:Distributed Cache
前言 本章主要内容是讲述hadoop的分布式缓存的使用,通过分布式缓存可以将一些需要共享的数据在各个集群中共享. 准备工作 数据集:ufo-60000条记录,这个数据集有一系列包含下列字段的UFO目击 ...
- [CSP-S模拟测试]:Graph(图论+贪心)
题目描述 给定一张$n$个点$m$条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通你想在这张图上进行若干次旅游,每次旅游可以任选一个点$x$作为起点,再走到一个与 $x$直接有边相连的点$ ...
- [CSP-S模拟测试96]题解
以后不能再借没改完题的理由不写题解了…… A.求和 求$\sum \sum i+j-1$ 柿子就不化了吧……这年头pj都不考这么弱智的公式化简了…… 坑点1:模数不定,可能没有2的逆元,那么只要先把乘 ...
- js+html实现玫瑰花绽放
玫瑰花示例demo: <!DOCTYPE html> <html> <head> <title>玫瑰花</title> <meta c ...
- android7.0后对于detected problems with app native libraries提示框显示
log信息: 03-27 09:08:25.887 397 400 W linker : /data/app/com.guagua.qiqi-1/lib/arm/libMedia.so ha ...
- JS对象—对象总结(创建、属性、方法)
1.创建对象Object 1.1 字面量的方式创建 1.2 new Object() 1.3 构造函数创建 1.4 工厂模式 1.5 Object.create() ES5新增方法 Object. ...
- 表单组件中state依赖props
参阅避免派生状态的博文: https://zh-hans.reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
- CET-6 分频周计划生词筛选(番外篇:百词斩)
点我阅读 番外-百词斩 2016.09.18 12:00pm transverse counterpart accessory cult gorgeous sediment assimilate st ...