docker必备—marathon基础教程

开发 开发工具
目前越来越多的互联网企业开始使用docker,但是随着docker部署的增多,也发现了一些单纯使用docker的弊端。例如命令行操作比较繁琐,需要记的参数较多,在此介绍一个好用的解决这些弊端的工具——Marathon。

一、前言

目前越来越多的互联网企业开始使用 docker,在这之前,虚拟机占据着大部分的企业市场,但是随着 docker 部署的增多,也发现了一些单纯使用 docker 的弊端。例如命令行操作比较繁琐,需要记的参数较多,在此介绍一个好用的解决这些弊端的工具—— Marathon。

二、基本概念

Mesos:Mesos 采用与 Linux Kernel 相同的机制,只是运行在不同的抽象层次上。Mesos Kernel 利用资源管理和调度的 API 在整个数据中心或云环境中运行和提供引用(例如, Hadoop、 Spark、Kafaka、Elastic Search)。

ZooKeeper:ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google的Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

Marathon:Marathon 是一个 Mesos 框架,能够支持运行长服务,比如 Web 应用等。它是集群的分布式 Init.d,能够原样运行任何 Linux 二进制发布版本,如 Tomcat、Play 等等。它也是一种私有的 PaSS,实现服务的发现,为部署提供提供 REST API 服务,有授权和 SSL、配置约束,通过 HAProxy 实现服务发现和负载平衡。

docker必备—marathon基础教程

三、部署

为了部署的方便 全部使用 docker 部署。

1. master搭建

  • 三台 mesos master 服务器
  • ip地址分别是 10.100.0.21,10.100.0.22,10.100.0.23
  • 需要在master上分别部署 mesos mater , zookeeper , marathon

(1) 需要在10.100.0.21 上执行下列命令 :

marathon

  1. docker run -d -e MARATHON_HOSTNAME=10.100.0.21 -e MARATHON_HTTPS_ADDRESS=10.100.0.21 -e MARATHON_HTTP_ADDRESS=10.100.0.21 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2 
  2. 181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathon 

mesos-master

  1. HOST_IP=10.100.0.21 
  2.  docker run -d --name mesos-master1 --net="host" -p 5050:5050    -e "MESOS_HOSTNAME=${HOST_IP}"   -e "MESOS_IP=${HOST_IP}"   -e "MESOS_ZK=zk://${HOST_IP}:2181/mesos"   -e "MESOS_PORT=5050"   -e 
  3. "MESOS_LOG_DIR=/var/log/mesos"   -e "MESOS_QUORUM=1"   -e "MESOS_REGISTRY=in_memory"   -e "MESOS_WORK_DIR=/var/lib/mesos"   mesoscloud/mesos-master 

zookeeper

 

  1. docker run -d -e MYID=1 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host  mesoscloud/zookeeper 

(2) 需要在10.100.0.22 上执行下列命令

marathon

  1. docker run -d -e MARATHON_HOSTNAME=10.100.0.22 -e MARATHON_HTTPS_ADDRESS=10.100.0.22 -e MARATHON_HTTP_ADDRESS=10.100.0.22 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2 
  2. 181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathon 

mesos-master

  1.  HOST_IP=10.100.0.22 
  2.  docker run -d --name mesos-master1 --net="host" -p 5050:5050    -e "MESOS_HOSTNAME=${HOST_IP}"   -e "MESOS_IP=${HOST_IP}"   -e "MESOS_ZK=zk://${HOST_IP}:2181/mesos"   -e "MESOS_PORT=5050"   -e 
  3. "MESOS_LOG_DIR=/var/log/mesos"   -e "MESOS_QUORUM=1"   -e "MESOS_REGISTRY=in_memory"   -e "MESOS_WORK_DIR=/var/lib/mesos"   mesoscloud/mesos-master 

zookeeper

  1. docker run -d -e MYID=2 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host  mesoscloud/zookeeper 

(3) 需要在10.100.0.23 上执行下列命令

marathon

  1. docker run -d -e MARATHON_HOSTNAME=10.100.0.23 -e MARATHON_HTTPS_ADDRESS=10.100.0.23 -e MARATHON_HTTP_ADDRESS=10.100.0.23 -e MARATHON_MASTER=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2 
  2. 181/mesos -e MARATHON_ZK=zk://10.100.0.22:2181,10.100.0.23:2181,10.100.0.21:2181/marathon --name marathon --net host --restart=always mesoscloud/marathon 

mesos-master

  1. HOST_IP=10.100.0.23 
  2.  docker run -d --name mesos-master1 --net="host" -p 5050:5050    -e "MESOS_HOSTNAME=${HOST_IP}"   -e "MESOS_IP=${HOST_IP}"   -e "MESOS_ZK=zk://${HOST_IP}:2181/mesos"   -e "MESOS_PORT=5050"   -e 
  3. "MESOS_LOG_DIR=/var/log/mesos"   -e "MESOS_QUORUM=1"   -e "MESOS_REGISTRY=in_memory"   -e "MESOS_WORK_DIR=/var/lib/mesos"   mesoscloud/mesos-master 

zookeeper

  1. docker run -d -e MYID=3 -e SERVERS=10.100.0.21,10.100.0.22,10.100.0.23 --name zookeeper --restart=always --net=host  mesoscloud/zookeeper 

这样 mesos 的 master 就搭建完成。

2. slave服务器搭建

下面是 mesos 的 slave 服务器 模拟4台,ip 地址是10.100.0.24 10.100.0.25 10.100.0.26 10.100.0.28。

(1) 在10.100.0.24上运行下面的命令

  1. docker run -d     --net=host     --pid=host     --privileged=true     --name=ms1     -v /usr/bin/docker:/usr/bin/docker     -v /dev:/dev     -v /var/run/docker.sock:/var/run/docker.sock     -v 
  2. /var/log/mesos:/var/log/mesos     -v /tmp/mesos:/tmp/mesos     -e MESOS_HOSTNAME=10.100.0.24     -e MESOS_IP=10.100.0.24     -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mes 
  3. os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave 

(2) 在10.100.0.25上运行下面的命令

  1. docker run -d     --net=host     --pid=host     --privileged=true     --name=ms1     -v /usr/bin/docker:/usr/bin/docker     -v /dev:/dev     -v /var/run/docker.sock:/var/run/docker.sock     -v 
  2. /var/log/mesos:/var/log/mesos     -v /tmp/mesos:/tmp/mesos     -e MESOS_HOSTNAME=10.100.0.25     -e MESOS_IP=10.100.0.25     -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mes 
  3. os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave 

(3) 在10.100.0.26上运行下面的命令

  1. docker run -d     --net=host     --pid=host     --privileged=true     --name=ms1     -v /usr/bin/docker:/usr/bin/docker     -v /dev:/dev     -v /var/run/docker.sock:/var/run/docker.sock     -v 
  2. /var/log/mesos:/var/log/mesos     -v /tmp/mesos:/tmp/mesos     -e MESOS_HOSTNAME=10.100.0.26     -e MESOS_IP=10.100.0.26     -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mes 
  3. os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave 

(4) 在10.100.0.28上运行下面的命令

  1. docker run -d     --net=host     --pid=host     --privileged=true     --name=ms1     -v /usr/bin/docker:/usr/bin/docker     -v /dev:/dev     -v /var/run/docker.sock:/var/run/docker.sock     -v 
  2. /var/log/mesos:/var/log/mesos     -v /tmp/mesos:/tmp/mesos     -e MESOS_HOSTNAME=10.100.0.28     -e MESOS_IP=10.100.0.28     -e MESOS_MASTER=zk://10.100.0.21:2181,10.100.0.22:2181,10.100.0.23:2181/mes 
  3. os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave 

以上,搭建完成

四、查看

可以通过 http://${HOST_IP}:5050 查看 mesos 的服务器的状态:

mesos 的服务器的状态

使用 http://{HOST}:8080/ 来访问 marathon:

使用 http://{HOST}:8080/ 来访问 marathon

需要在 Docker Container 中输入对应的 images:

需要在 Docker Container 中输入对应的 images

还需要配置一下端口:

docker 很快就能启动好。目前就启动了一个实例:

如果现在需要多个,可以选择 scale Application 数值调整到5:

可以瞬间运行多个容器:

五、关于扩容

scale Application 数值调整虽然能快速扩容,但是运行服务器的端口都是随机的,如果需要手工添加就会比较麻烦,好在我们有一个新的工具来帮助我们,一个定制化的 haproxy—— marathon-lb。

我们还是使用容器的方式来部署:

  1. docker run -d --privileged -e PORTS=9090 --net=host mesosphere/marathon-lb sse -m http://10.100.0.21:8080 -m http://10.100.0.22:8080 -m http://10.100.0.23:8080  --group external 

这样我们就能通过 9090 端口访问:

http://${HOST_IP}:9090/haproxy?stats

需要在配置 Environment Variables 变量的时候,添加2个变量:

  • HAPROXY_0_PORT=80
  • HAPROXY_GROUP=external

不管 scale 多少个容器, 都会通过 haproxy 的80端口代理 ,水平扩容非常的方便。

【本文是51CTO专栏机构“岂安科技”的原创文章,转载请通过微信公众号(bigsec)联系原作者】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2010-06-11 13:53:54

UML建模

2017-07-18 10:14:23

OracleMerge into教程

2011-07-18 09:35:29

iPhone 框架

2009-07-22 13:32:43

iBATIS DAO

2011-09-13 16:39:50

Android UI设

2016-08-31 14:01:31

MySQL存储数据库

2020-04-09 14:02:33

NginxHttps前端

2010-07-23 12:23:49

Perl基础

2011-04-01 12:39:18

Android

2009-09-17 10:45:03

CCNA基础教程CCNA

2011-07-15 14:19:10

故障恢复控制台

2017-03-20 14:51:33

2010-08-09 09:20:51

Flex程序设计

2011-08-30 17:37:32

打印机共享怎么设置共享打印机局域网

2015-03-25 12:09:18

TCP网络协议TCP建立连接

2021-03-04 10:11:50

MongoDBSpring BootSpring Boot

2009-07-24 09:20:15

数组实例

2013-06-18 08:49:15

2011-04-15 09:20:56

ASP.NET MVC

2010-08-24 10:54:16

MeeGoUI设计
点赞
收藏

51CTO技术栈公众号