标签:12c gdi version usr 实战 net ted etc des
配置多台Mesos-master环境生产环境中ZooKeeper是以宕机个数过半来让整个集群宕机的。所以Mesos-master一般选择奇数个节点来组成集群,随着部署的Master节点增多可靠性也就增强,但多Mesos-master集群环境只有一个Mesos-master会处于Leader状态对外提供服务,集群中的其他服务器则会成为此Leader的Follower,处于就绪状态。当Leadre发生故障的时候,ZooKeeper就会快速在Follower中投票选举出下一个服务器作为Leader继续对外提供服务。
1.设置四台服务器的名称分别是:master1、master2、master3、slave 。
[root@localhost ~]# hostnamectl set-hostname master1
[root@localhost ~]# hostnamectl set-hostname master2
[root@localhost ~]# hostnamectl set-hostname master3
[root@localhost ~]# vim /etc/hosts #所有主机同步
192.168.126.162 master1
192.168.126.164 master2
192.168.126.161 master3
192.168.126.165 slave1
192.168.126.166 slave2
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# vim /etc/hosts
192.168.126.162 master1
192.168.126.164 master2
192.168.126.161 master3
192.168.126.165 slave1
192.168.126.166 slave2
2.安装ZooKeeper
分别在所有的Mesos-master节点上安装ZooKeeper。
[root@master1 ~]# tar zxvf zookeeper-3.4.6.tar.gz -C /home/q/
[root@master1 ~]# cd /home/q/zookeeper-3.4.6/
[root@master1 ~]# mv conf/zoo_sample.cfg conf/zoo.cfg
3.配置ZooKeeper
修改ZooKeeper配置文件,以server.A=B:C:D: 格式定义各个节点相关信息,其中:A 是一个数字,表示第几号服务器;B是这个服务器的IP地址;C为与集群中的Leader服务器交换信息的端口;D是在Leader挂掉时专门进行Leader选举时所用的端口。
dataDir=/home/q/zookeeper-3.4.6/data #修改位置
dataLogDir=/home/q/zookeeper-3.4.6/datalog
server.1=192.168.126.162:2888:3888 #2888,信息交互端口
server.2=192.168.126.164:2888:3888 #3888,选举端口
server.3=192.168.126.161:2888:3888
修改完的配置文件拷贝给其他Mesos-master主机:
[root@master1 zookeeper-3.4.6]# scp conf/zoo.cfg 192.168.126.164:/home/q/zookeeper-3.4.6/conf/zoo.cfg
[root@master1 zookeeper-3.4.6]# scp conf/zoo.cfg 192.168.126.161:/home/q/zookeeper-3.4.6/conf/zoo.cfg
每个节点还需要在配置文件zoo.cfg中定义的dataDir路径下创建一个myid文件,myid文件存有上面提到的A的值。
Master1:
[root@master1 zookeeper-3.4.6]# mkdir data datalog
[root@master1 zookeeper-3.4.6]# echo 1 > data/myid
[root@master1 zookeeper-3.4.6]# cat data/myid
1
Master2:
[root@master2 zookeeper-3.4.6]# mkdir data datalog
[root@master2 zookeeper-3.4.6]# echo 2 > data/myid
[root@master2 zookeeper-3.4.6]# cat data/myid
2
Master3:
[root@master3 zookeeper-3.4.6]# mkdir data datalog
[root@master3 zookeeper-3.4.6]# echo 3 > data/myid
[root@master3 zookeeper-3.4.6]# cat data/myid
3
分别在各Master节点上启动ZooKeeper服务
[root@master1 zookeeper-3.4.6]# ./bin/zkServer.sh start conf/zoo.cfg
JMX enabled by default
Using config: conf/zoo.cfg
Starting zookeeper ... STARTED
查看状态,看到Master2被选举为Leader,其他主机为Follower状态。
[root@master1 zookeeper-3.4.6]# ./bin/zkServer.sh status
JMX enabled by default
Using config: /home/q/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@master2 zookeeper-3.4.6]# ./bin/zkServer.sh status
JMX enabled by default
Using config: /home/q/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
[root@master3 zookeeper-3.4.6]# ./bin/zkServer.sh status
JMX enabled by default
Using config: /home/q/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
3.分别启动Mesos-master
[root@master1 zookeeper-3.4.6]# mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.126.162:2181/mesos --quorum=2
[root@master2 zookeeper-3.4.6]# mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.126.164:2181/mesos --quorum=2
[root@master3 zookeeper-3.4.6]# mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.126.161:2181/mesos --quorum=2
4.启动Mesos-slave
[root@slave ~]# mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.126.162:2181,192.168.164.164:2181,192.168.126.161:2181/mesos --no-hostname_lookup --ip=0.0.0.0
使用浏览器指定任意Mesos-master地址的5050端口进行验证,如图所示。指定的是非Leader状态下的 Mesos-master1地址,页面会自行跳转至处于Leader状态的Mesos-master2地址。
Marathon是一个Mesos框架,能够支持运行长服务。
1.安装marathon到三台Mesos-master主机上并启动Marathon
[root@master1 ~]# tar zxvf marathon-0.15.2.tgz -C /home/q/
[root@master1 ~]# cd /home/q/marathon-0.15.2/
[root@master1 marathon-0.15.2]# ./bin/start --hostname 192.168.126.162 --master zk://192.168.126.162:2181,192.168.126.164:2181,192.168.175.161:2181/mesos --http_address 0.0.0.0
访问Marathon(默认使用8080端口),如图所示:
2.使用Marathon创建测试任务
在首页点击Create按钮,创建一个测试任务echo "hello world",如图所示:
创建成功后在页面可以看到该任务,如图所示:
此时,Marathon会自动注册到Mesos中,可以在Mesos Web的Framework页面中看到该注册信息。如图所示:
使用命令行方式从Mesos-slave主机的data/slave目录中可以查看到这个简单任务的相关信息。
[root@slave latest]# pwd #查看路径
/home/q/mesos/data/slaves/7b2ad136-917c-4680-b582-71821ab25e9d-S0/frameworks/44c6a533-b607-40b4-9faf-bed151b1a958-0000/executors/tets.7e359839-a1ee-11e8-8161-52540083dae9/runs/latest
[root@slave latest]# ls
stderr stdout #标准错误和标准输出信息
[root@slave latest]# cat stdout
Registered executor on 192.168.126.165
Starting task tets.7e359839-a1ee-11e8-8161-52540083dae9
sh -c ‘echo "hello world"‘
hello world
Forked command at 6112
Command exited with status 0 (pid: 6112)
3.使用Marathon API的形式添加新任务
[root@slave1 ~]# vim demo.json
{
"id":"basic-0",
"cmd":"while [true]; do echo ‘hello Marathon‘; sleep 5; done",
"cpus":0.1,
"mem":10.0,
"instances":1
}
查看Marathon网站有新添加任务
[root@slave1 ~]# curl -X POST -H "Content-type:application/json" http://192.168.126.162:8080/v2/apps -d@demo.json
启动第二个Mesos-slave节点slave2。在Mesos Web的Slave选项卡中可以看到加入的slave节点相关信息,如图所示:
[root@slave2 ~]# mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.126.162:2181,192.168.126.164:2181,192.168.126.161:2181/mesos --no-hostname_lookup --ip=0.0.0.0
在Mesos Web首页看到两个slave主机都已经激活,如图所示:
在Marathon中点击Scale Application扩充16个任务,已经启动的16个任务会发送16个echo消息,由Maarathon随机分发给了slave1与slave2主机,如图所示:
4.使用Mesos与Marathon创建Docker群集
使用Marathon API的形式创建Docker的Nginx请求任务。
[root@slave1 ~]# vim nginx.json
{
"id":"/nginx",
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",
"network":"HOST",
"parameters":[],
"privileged":false,
"forcePullImage":false
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}
[root@slave1 ~]# curl -X POST -H "Content-type:application/json" http://192.168.126.162:8080/v2/apps -d@nginx.json
{"id":"/nginx","cmd":null,"args":null,"user":null,"env":{},"instances":1,"cpus":0.1,"mem":32,"disk":0,"executor":"","constraints":[],"uris":[],"fetch":[],"storeUrls":[],"ports":[0],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"nginx","network":"HOST","privileged":false,"parameters":[],"forcePullImage":false}},"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1,"maximumOverCapacity":1},"labels":{},"acceptedResourceRoles":null,"ipAddress":null,"version":"2018-08-17T13:17:51.854Z","tasksStaged":0,"tasksRunning":0,"tasksHealthy":0,"tasksUnhealthy":0,"deployments":[{"id":"89c43c68-c68e-49f8-8e86-c2ffdf5ba65b"}],"tasks":[]}[root@slave1 ~]#
创建好后在Marathon页面中查看,如图所示:
可以在创建的Nginx任务下看到该任务发送给了192.168.126.165主机(slave1),如图所示:
用命令行的方式可以查看到现在的slave1主机已经开始下载Docker镜像。
[root@slave1 ~]# ps aux | grep docker
.....//省略
root 12436 0.0 0.2 264156 3912 ? Sl 21:18 0:00 /usr/bin/docker-containerd-shim-current 7a7592e98a239f380d13393c42f20e1bc9a10359ae1306537eaaa3297b2b1b1f /var/run/docker/libcontainerd/7a7592e98a239f380d13393c42f20e1bc9a10359ae1306537eaaa3297b2b1b1f /usr/libexec/docker/docker-runc-current
root 12533 0.0 0.0 112720 968 pts/2 R+ 21:23 0:00 grep --color=auto docker
使用命令行的方式查看Nginx镜像的状态。
[root@slave1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a7592e98a23 nginx "nginx -g ‘daemon ..." 9 minutes ago Up 9 minutes mesos-0d58bbf5-30b5-4353-8ea4-7f3ac3cd5ffd-S0.8b3424a2-48b2-460f-abaa-e93c8f963b03
访问运行着的Nginx访问,结果如图所示:
此时,利用Apache Mesos所管理的Docker的Nginx集群搭建成功。
在CentOS7上配置Marathon+Mesos+Docker实战
标签:12c gdi version usr 实战 net ted etc des
原文地址:http://blog.51cto.com/13642258/2161388