前言

本教程参考

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 最完美安装教程的更多相关文章

  1. Centos7下完美安装并配置mysql5.6

    Centos7将默认数据库mysql替换成了Mariadb,对于我们这些还想用mysql的人来说并不是一个好消息. 最近我搜罗了网上各种安装教程,各种出问题,要么安装失败,要么安装成功了却使用不了my ...

  2. [Docker]CentOS7下Docker安装教程

    想要倒腾Kubernetes的话,第一步就是要会安装Docker,这篇文章讲一讲过程 安装步骤 检查内核版本,必须是3.10以上 uname -r 安装Docker yum -y install do ...

  3. 【Nginx】Nginx简介及在CentOS7.0下安装教程

    是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能 ...

  4. 170419、Centos7下完美安装并配置mysql5.6

    首先跟各位说声抱歉,原计划说每天一篇博文,最近由于实在太忙,封闭式开发一个项目,没有时间写博文,望大家见谅!!! 由于公司要搭建分布式服务,我把最近我所用到或者学习的技术或者遇到的问题跟大家分享一下! ...

  5. VMware虚拟机与Linux Centos7下载及安装教程

    1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:https://www.centos.org/download/ DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上 ...

  6. 阿里云Centos7.x MySql安装教程示例

    创建用户 useradd mysql; passwd mysql; 下载(比如:5.5.61) 地址 https://dev.mysql.com/downloads/mysql/5.6.html#do ...

  7. 【keepalived】CentOS7.0下安装教程

    安装前所需环境 keepalived安装之前,需要环境:wget.gcc.pcre.openssl.zlib.popt-devel 1,wget:用于从外网上下载插件 wget安装命令:yum -y ...

  8. ArcGIS 10.2 二次开发,兼容Visual Studio 2012二次开发,完美安装教程

    GIS 经常安装是常有的事,每次重装系统都要浪费大半天去安装这个.所以凑这一次安装,把这个软件重新安装的步骤整理了一下,希望对大家有所帮助.这次整理的内容的关键优点是,对常见的出错内容进行了归纳整理. ...

  9. Centos7下载和安装教程

    https://blog.csdn.net/qq_42570879/article/details/82853708 阿里下载64bit镜像:http://mirrors.aliyun.com/cen ...

随机推荐

  1. Cobaltstrike系列教程(一)-简介与安装

    0x001-Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS.这款神器许多大佬们都已经玩的很6,我一个菜鸡玩的略有心得,因此写一 ...

  2. win8安装maven

    1.下载并解压maven F:\maven\apache-maven-3.5.2 2. 设置环境变量 3. Path路径中添加maven的可执行文件目录(bin目录) 4.验证maven是否安装成功: ...

  3. nginx配置虚拟主机-端口号区分/域名区分

    Nginx实现虚拟机 可以实现在同一台服务运行多个网站,而且网站之间互相不干扰.同一个服务器可能有一个ip,网站需要使用80端口.网站的域名不同. 区分不同的网站有三种方式:ip区分.端口区分.域名区 ...

  4. php大文件断点续传

    该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分 ...

  5. 【HDOJ6621】K-th Closest Distance(主席树,二分)

    题意:给定一个长为n的序列,有m次强制在线的询问,每次询问位置[L,R]中abs(a[i]-p)第k小的值 n,m<=1e5,a[i]<=1e6,p<=1e6,k<=169 思 ...

  6. 关于Vue+iview的简单下拉框滚动加载

    话不多说,直接上代码,作用是下拉框内容无限滚动加载: Html: <FormItem style="position:relative" label="用户名:&q ...

  7. mysql-M-S-S模型 中继器 级联

    1.基础环境 三台虚机并且安装有mysql 并且同步好数据库 2.主服务器-创建账号并授权 mysql> create user 'mslave'@'X.X.X.X' identified by ...

  8. MySQL 中的 information_schema 数据库

    1. 概述 information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库.其中 performance_schema 用于性能分析,而 ...

  9. python字符串常见操作

    字符串常见操作 如有字符串mystr = 'hello world itcast and itcastcpp',以下是常见的操作 <1>find 检测 str 是否包含在 mystr中,如 ...

  10. Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界

    在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...