centos7安装mesos_marathon_zookeeper
本帖最后由 jrldc 于 2017-7-19 16:47 编辑环境
ip:192.168.99.117-119
系统:centos7
结构:zookeeper集群分布在以上三个服务器上
布局:
192.168.99.119 masterslavezookeeper
192.168.99.118 slave zookeeper
192.168.99.117 slave zookeeper
1、安装zookeeper集群(三个服务器上都安装)
#wget https://www.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
#tar -zxvf zookeeper-3.4.6.tar.gz-C /usr/local/
#cd/usr/local/zookeeper-3.4.6/
# mkdir/data/zookeeper
# echo "2" > /data/zookeeper/myid (设置zookeeper的id,对应配置文件中的 server.2)
# catzoo.cfg (每个服务器的配置文件都相同)
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=192.168.99.117:3181:4181
server.2=192.168.99.118:3181:4181
server.3=192.168.99.119:3181:4181
#./bin/zkServer.sh start ./conf/zoo.cfg
#./bin/zkServer.sh status ./conf/zoo.cfg (查看状态,leaderorfllower)
连接Zookeeper
# ./bin/zkCli.sh -server 192.168.99.117:2181
当启动第一个zookeeper是日志会报错,因为找不到集群中的其他服务端口,可忽略,当都启动起来后报错消失。
2、安装mesosmarathons
mesos-master安装:
rpm -Uvh http://repos.mesosphere.io/el/7/ ... o-7-1.noarch.rpmrpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mesosphereyum install mesos marathon
mesos-slave安装:
rpm -Uvh http://repos.mesosphere.io/el/7/ ... o-7-1.noarch.rpmrpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mesosphereyum install mesos
3、 mesos-master和marathon配置
1)每个master和slave节点的/etc/mesos/zk配置文件中设置zk的地址(master和slave主要通过这个进行通信)
zk://192.168.99.117:2181,192.168.99.118:2181,192.168.99.119:2181/mesos
2)/etc/mesos-master/quorum中设置quorum值
#touch /etc/mesos-master/quorum
#echo 1 > /etc/mesos-master/quorum
#(在里面添加一个数字,数字大小不小于master的数量除以2,这里测试一个master,填1就可以)
3)其他配置
#touch /etc/mesos-master/ip
#echo "192.168.99.119" > /etc/mesos-master/ip
#(添加master的ip,默认是127.0.0.1,只做显示用)
#touch /etc/mesos-master/hostname
#echo "192.168.99.119" > /etc/mesos-master/hostname
(添加master的hostname,默认为localhost,主要在mesos集群间使用,不是机器的hostname,只做显示用)
4)marathon配置
这个设置和上面配置mesos的hostname效果一样,不配置会显示默认的localhost,不影响使用
#mkdir -p /etc/marathon/conf/ && touch hostname
#echo 192.168.99.119 |tee /etc/marathon/conf/hostname
4、
master启动
# systemctl enable mesos-master
# systemctl start mesos-master
# systemctl enable marathon
# systemctl start marathon
slave启动
# systemctl enable mesos-slave
# systemctl start mesos-slave
可以通过http://:5050来访问Mesos的web界面,通过http://:8080来访问Marathon的web界面。可以是任意一个master节点的IP。
最后提醒一下需要注意的是:
1)服务器的jdk要是1.8以上版本的,不然会有报错,因为marathon是要求jdk1.8以上的;
2)各节点配一下/etc/hosts或指向一个共用的DNS,确保相互能够访问。如果不想配hosts,在启动时指定–hostname为IP即可;
3)如果想在marathon上运行Docker,则需要一些额外的配置:
//指定使用docker容器化echo 'docker,mesos' > /etc/mesos-slave/containerizers//考虑到拉取容器镜像等的操作,适当增加timeout的时间echo '5mins' > /etc/mesos-slave/executor_registration_timeout//重启mesos-slave以使上面配置生效systemctl restart mesos-slave
几个配置启动参数的目录:
/etc/mesos-master/
/etc/mesos-slave/
/etc/marathon/conf/
在这些目录分别用来配置mesos-master,mesos-slave,marathon的启动参数。以参数名为文件名,参数值为文件内容即可。
此时打开Mesos的Web管理界面,这时候你将得到下图的页面但可能在‘Tasks’表格没有任何的条目。运行第一mesos任务,可以在web界面查看到task
[*][root@docker-master ~]# MASTER=$(mesos-resolve `cat /etc/mesos/zk`)
[*][root@docker-master ~]# mesos-execute --master=$MASTER --name="cluster-test" --command="sleep 60"
5、使用marathon调用mesos管理docker容器
下载docker,并pull下来nginx镜像(两个node均操作)
[*][root@docker-slave ~]# yum install -y docker
[*][root@docker-master ~]# systemctl enable docker
[*][root@docker-master ~]# systemctl start docker
[*][root@docker-master ~]# docker pull nginx
再所有mesos-slave上增加配置参数,并重启
[*][root@docker-master ~]# echo 'docker,mesos' | tee /etc/mesos-slave/containerizers
[*][root@docker-master ~]# systemctl restart mesos-slave
[*][root@docker-slave ~]# echo 'docker,mesos' | tee /etc/mesos-slave/containerizers
[*][root@docker-slave ~]# systemctl restart mesos-slave
通过mesos调度,使用marathon来创建一个nginx镜像的docker容器,matathon默认监听8080端口,如图:
matathon通过zookeeper,marathon启动的时候会读取/etc/mesos/zk配置文件,通过Zookeeper来找到Mesos Master。marathon有自己的REST API,我们通过API的方式来创建一个nginx的docker容器。首先创建如下的配置文件nginx.json:
[*][root@docker-master ~]# cat nginx.json
[*]{
[*]"id":"nginx",
[*]"cpus":0.2,
[*]"mem":20.0,
[*] "instances": 1,
[*] "constraints": [["hostname", "UNIQUE",""]],
[*] "container": {
[*] "type":"DOCKER",
[*] "docker": {
[*] "image": "nginx",
[*] "network": "BRIDGE",
[*] "portMappings": [
[*] {"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
[*]
[*] }
[*]}
[*]}
使用curl的方式调用测试
[*][root@docker-master ~]# curl -X POST http://192.168.100.5:8080/v2/apps -d @/root/nginx.json -H "Content-type: application/json"
[*]{"id":"/nginx","cmd":null,"args":null,"user":null,"env":{},"instances":1,"cpus":0.2,"mem":20,"disk":0,"executor":"","constraints":[["hostname","UNIQUE",""]],"uris":[],"fetch":[],"storeUrls":[],"ports":[0],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"nginx","network":"BRIDGE","portMappings":[{"containerPort":80,"hostPort":0,"servicePort":0,"protocol":"tcp"}],"privileged":false,"parameters":[],"forcePullImage":false}},"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1,"maximumOverCapacity":1},"labels":{},"acceptedResourceRoles":null,"ipAddress":null,"version":"2016-03-01T07:19:44.339Z","tasksStaged":0,"tasksRunning":0,"tasksHealthy":0,"tasksUnhealthy":0,"deployments":[{"id":"502712f0-dc3a-44f8-a9cf-0dfa7407ec94"}],"tasks":[]}
查看通过API和手动创建的容器
现在你就可以通过31705来访问到nginx了。当然了,你也可以在mesos-slave上来寻找一下这个容器:
[*][root@docker-master ~]# docker ps -a
[*]CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[*]2e333092a383 nginx "nginx -g 'daemon off" About a minute ago Up About a minute 443/tcp, 0.0.0.0:31705->80/tcp mesos-46abb5e7-3775-4383-b953-c5b2b9ae5c9f-S0.00229c83-5505-400d-984f-4849e9850b71
访问31705端口,查看nginx
[*][root@docker-master ~]# curl 192.168.100.5:31705
在marathonweb界面查看
在mesos的web界面查看
C:/Users/Administrator/AppData/Local/YNote/data/qq41E380972A3128D92AECC7E981CEFD76/c6c1abc494084281bf538b3c42a49b27/0-2095150261.png
如果你想创建同样的容器,可以点击上图中德Scale Application来体验一下。同样的,你也可以通过marathon的Web界面来进行容器的创建、扩展和销毁。
页:
[1]