设为首页 收藏本站
查看: 1465|回复: 0

[经验分享] centos7中mesos+zookeeper+marathon安装部署全过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-3-7 14:20:15 | 显示全部楼层 |阅读模式
注意,以下安装过程均是在root下完成,如果是普通用户,用sudo提权的方式安装

一、环境
1、配置三台服务器,三个mesos-master节点,三个slave节点,我用测试IP
主机名IP地址所安装的服务
mesos-node1eth0:192.168.10.227mesos-master,mesos-slave,marathon,
zookeeper,haproxy
mesos-node2eth0:192.168.10.228mesos-master,mesos-slave,marathon,zookeeper,haproxy
mesos-node3eth0:192.168.10.229mesos-master,mesos-slave,marathon,zookeeper,haproxy


2、查看内核版本
1
2
3
4
5
6
7
[iyunv@mesos-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[iyunv@mesos-node1 ~]# uname  -r
3.10.0-327.el7.x86_64
[iyunv@mesos-node1 ~]# uname  -a
Linux mesos-node1 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[iyunv@mesos-node1 ~]#




注意以下部分在三台服务器上都要执行

3、关闭SELinux
【临时】
1
2
3
[iyunv@mesos-node1 ~]]# setenforce 0
[iyunv@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
[iyunv@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  
[iyunv@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
  [iyunv@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)
[iyunv@mesos-node1 ~]#



3、进入源码安装目录下载zookeeper稳定版3.4.9并安装
1
2
3
4
cd /usr/local/src/
wget http://mirrors.cnnic.cn/apache/z ... keeper-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
[iyunv@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
[iyunv@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 "1" >/usr/local/zookeeper/data/myid
echo "1" >/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 ... repo-7-1.noarch.rpm



2、安装mesos和marathon
1
yum -y install mesos marathon



3、增加zookeeper配置
1
2
3
[iyunv@mesos-node1 ~]#  cat /etc/mesos/zk
zk://192.168.10.227:2181,192.168.10.228:2181,192.168.10.229:2181/mesos
[iyunv@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



6、在浏览器打开任意一台服务的mesos
1
http://192.168.10.227:5050/



7、如果出现下面的界面,安装成功
QQ截图20170307141903.png
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、打开浏览器查看
   QQ截图20170307141909.png
至此环境已经搭建成功
二、测试,尝试管理一个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



3、在浏览器中打开marathon,默认端口8080
1
http://192.168.10.227:8080



QQ截图20170307141915.png
下面通过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
[iyunv@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" }
]
   }
     }
       }
[iyunv@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
[iyunv@mesos-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                            NAMES
5175ef6c9dde        nginx               "nginx -g 'daemon off"   About a minute ago   Up About a minute   443/tcp, 0.0.0.0:31894->80/tcp   mesos-e0a9ccd0-e362-  4250-8c58-08b6ded0bb17-S2.e4635e6a-d25b-4c5b-a351-0756174acf28



7、在浏览器中查看
QQ截图20170307141923.png
QQ截图20170307141927.png

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


so,接下来我们就来配置服务发现,设置一个固定端口,实现让每个IP地址都可以访问到这个页面。

四、服务发现和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



3、设置文件/etc/haproxy-marathon-bridge/marathons
1
2
3
4
5
6
mkdir /etc/haproxy-marathon-bridge/
[iyunv@mesos-node1 conf]# cat /etc/haproxy-marathon-bridge/marathons
192.168.10.227:8080
192.168.10.228:8080
192.168.10.229:8080
[iyunv@mesos-node1 conf]#




4、下载安装脚本
1
wget https://github.com/draculavlad/S ... oxy-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
[iyunv@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" }
]
   }
     }
       }
[iyunv@mesos-node1 ~]#






再查看/etc/haproxy/haproxy.cfg文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[iyunv@mesos-node1 ~]# cat /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
defaults
    mode                    tcp
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000
frontend front-nginx-3030
bind *:3030
default_backend    back-nginx-3030
backend back-nginx-3030
balance leastconn
  server nginx-1 192.168.10.227:31894 check
[iyunv@mesos-node1 ~]#




可以看到服务发现自动生成了这个访问端口,将它映射在随机生成的端口上,至此我们就可以用任意一台的IP地址来访问这个端口了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-350443-1-1.html 上篇帖子: Redis主从复制实现session共享 下篇帖子: redis和mongo配置为windows服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表