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

[经验分享] 在CentOS7上配置Marathon+Mesos+Docker实战

[复制链接]

尚未签到

发表于 2019-2-21 07:49:35 | 显示全部楼层 |阅读模式
配置多台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
  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集群搭建成功。




运维网声明 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-675056-1-1.html 上篇帖子: Docker架构、镜像及容器的基本操作 下篇帖子: Marathon+Mesos+Docker部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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