注意,如下安装过程均是在root下完成,若是是普通用户,用sudo提权的方式安装java
1、环境node
一、配置三台服务器,三个mesos-master节点,三个slave节点,我用测试IPlinux
主机名 | IP地址 | 所安装的服务 |
mesos-node1 | eth0:192.168.10.227 | mesos-master,mesos-slave,marathon,nginx zookeeper,haproxygit |
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 |
二、查看内核版本github
[root@mesos-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@mesos-node1 ~]# uname -r 3.10.0-327.el7.x86_64 [root@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 [root@mesos-node1 ~]#
注意如下部分在三台服务器上都要执行redis
三、关闭SELinuxdocker
【临时】apache
[root@mesos-node1 ~]]# setenforce 0 [root@mesos-node1 ~]]# getenforce Permissive
【永久】json
更改配置文件/etc/selinux/config 将SELINUX=enforcing修改成SELINUX=disabled重启生效,若是不想重启就将上面临时修改的也执行一次。
四、关闭防火墙
systemctl stop firewalld
五、配置host解析
[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 ~]#
2、部署docker
一、利用yum安装docker
yum install docker
二、启动docker
systemctl start docker.service
三、加入开机自启动服务
systemctl enable docker.service
四、建立docker用户组,避免使用sudo
usermod -aG docker lcm
三 、部署zookeeper
一、安装Java
yum install -y java
二、查看Java版本
[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 ~]#
三、进入源码安装目录下载zookeeper稳定版3.4.9并安装
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/
四、建立软链接,方便之后升级时用
ln -s /usr/local/zookeeper-3.4.9/ /usr/local/zookeeper
五、修改zookeeper配置文件,只修改一个,而后分发到其余两台上
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 ~]#
六、建立dataDir和dataLogDir目录
mkdir -p /usr/local/zookeeper/data /usr/local/zookeeper/logs
七、在三台服务器上建立myid文件,里面的数据要和配置文件里面的server.后面的数字同样,表示这是第几台服务器
echo "1" >/usr/local/zookeeper/data/myid echo "2" >/usr/local/zookeeper/data/myid echo "3" >/usr/local/zookeeper/data/myid
八、启动zookeeper
cd /usr/local/zookeeper ./bin/zkServer.s start
九、查看角色状态
./bin/zkServer.sh status
能够看到两个follower,一个 leader
十、尝试链接zookeeper
./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
3、mesos+marathon集群部署
一、安装mesosphere仓库
rpm -ivh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm
二、安装mesos和marathon
yum -y install mesos marathon
三、增长zookeeper配置
[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 ~]#
四、配置mesos-hostname
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倍,即一半
五、配置mesos-master slave marathon开机自启动并启动
systemctl enable mesos-master mesos-slave marathon systemctl start mesos-master mesos-slave marathon
六、在浏览器打开任意一台服务的mesos
http://192.168.10.227:5050/
七、若是出现下面的界面,安装成功
八、运行一个mesos任务来测试
MASTER=$(mesos-resolve `cat /etc/mesos/zk`) #<=====获取主服务器的IP地址 mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60" #若是没有发现任务在运行,可尝试修改--name="cluster-test",这个名字能够随意起
九、打开浏览器查看
至此环境已经搭建成功
2、测试,尝试管理一个docker镜像
注意,如下内容没有特别说明可在任意一台服务上完成,我选择在227
一、在docker中下载一个nginx镜像
docker pull nginx
二、在全部mesos-slave上增长配置参数,并重启(这一步在三台服务上面进行操做)
echo 'docker,mesos' | tee /etc/mesos-slave/containerizers systemctl restart mesos-slave
三、在浏览器中打开marathon,默认端口8080
http://192.168.10.227:8080
下面经过Mesos调度,使用marathon来建立一个nginx镜像的Docker容器,Marathon启动时会读取/etc/mesos/zk配置文件,Marathon经过Zookeeper来找到Mesos Master。
四、建立nginx配置文件nginx.json
[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": { "p_w_picpath": "nginx", "network": "BRIDGE", "portMappings": [ {"containerPort": 80, "hostPort": 0,"servicePort": 0,"protocol": "tcp" } ] } } } [root@mesos-node1 ~]#
五、利用curl的方式开启nginx容器
curl -X POST http://192.168.10.227:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json"
六、查看开启的容器
[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 About a minute 443/tcp, 0.0.0.0:31894->80/tcp mesos-e0a9ccd0-e362- 4250-8c58-08b6ded0bb17-S2.e4635e6a-d25b-4c5b-a351-0756174acf28
七、在浏览器中查看
可是咱们能够发现,只能227这台服务器来访问这个端口,出现nginx页面,用其余的IP地址显然是不能够的.
so,接下来咱们就来配置服务发现,设置一个固定端口,实现让每一个IP地址均可以访问到这个页面。
4、服务发现和haproxy
如下操做在三台服务上都有
一、安装haproxy
yum -y install haproxy
二、设置服务发现
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
三、设置文件/etc/haproxy-marathon-bridge/marathons
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]#
四、下载安装脚本
wget https://github.com/draculavlad/SetUpMesosphereOnCentos7WithServiceDiscovery/blob/master/haproxy-marathon-bridge
五、添加执行权限
chmod +x /etc/init.d/haproxy-marathon-bridge
六、经过 haproxy-marathon-bridge脚本从Marathon生成一个HAProxy配置在localhost:8080运行:
./haproxy-marathon-bridge 192.168.10.227:8080 > /etc/haproxy/haproxy.cfg
七、将haproxy加入开机自启动并启动
systemctl start haproxy systemctl enable haproxy
八、开启haproxy的定时任务,每一分钟加入一次任务。
/etc/init.d/haproxy-marathon-bridge install_cronjob
九、查看nginx.json文件
[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": { "p_w_picpath": "nginx", "network": "BRIDGE", "portMappings": [ {"containerPort": 80, "hostPort": 0,"servicePort": 3030, "protocol": #此处我设置了固定的端口,这个端口能够按照本身公司的要求来随意设定。 "tcp" } ] } } } [root@mesos-node1 ~]#
再查看/etc/haproxy/haproxy.cfg文件
[root@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 [root@mesos-node1 ~]#
能够看到服务发现自动生成了这个访问端口,将它映射在随机生成的端口上,至此咱们就能够用任意一台的IP地址来访问这个端口了。
参考连接:
centos7中mesos+zookeeper+marathon安装部署全过程:
http://11863547.blog.51cto.com/11853547/1903532
基于mesos环境安装chronos:
http://11863547.blog.51cto.com/11853547/1903889
zookeeper+mesos+marathon+docker里面的一些小功能实现: