资讯专栏INFORMATION COLUMN

docker 必备 — marathon 基础教程

罗志环 / 2471人阅读

摘要:基本概念采用与相同的机制,只是运行在不同的抽象层次上。它是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护名字服务分布式同步组服务等。它是集群的分布式,能够原样运行任何二进制发布版本,如等等。部署为了部署的方便全部使用部署。

筋斗云    岂安运维工程师

爱游泳、爱旅行、爱计算机。

前言

目前越来越多的互联网企业开始使用 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 部署。

master搭建

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

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

marathon

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
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

HOST_IP=10.100.0.21
 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
"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

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

需要在10.100.0.22 上执行下列命令

marathon

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
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

 HOST_IP=10.100.0.22
 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
"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

 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

需要在10.100.0.23 上执行下列命令

marathon

 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
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

HOST_IP=10.100.0.23
 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
"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

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 就搭建完成。

slave服务器搭建

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

在10.100.0.24上运行下面的命令

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
/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
os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave

在10.100.0.25上运行下面的命令

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
/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
os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave

在10.100.0.26上运行下面的命令

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
/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
os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave

在10.100.0.28上运行下面的命令

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
/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
os     -e MESOS_CONTAINERIZERS=docker,mesos     mesoscloud/mesos-slave

以上,搭建完成

查看

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

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

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

还需要配置一下端口:

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

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

可以瞬间运行多个容器:

关于扩容

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

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

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端口代理 ,水平扩容非常的方便。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27191.html

相关文章

  • docker 必备marathon 基础教程

    摘要:基本概念采用与相同的机制,只是运行在不同的抽象层次上。它是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护名字服务分布式同步组服务等。它是集群的分布式,能够原样运行任何二进制发布版本,如等等。部署为了部署的方便全部使用部署。 筋斗云 岂安运维工程师爱游泳、爱旅行、爱计算机。 前言 目前越来越多的互联网企业开始使用 docker,在这之前,虚拟机占据着大部分的企业市场...

    learning 评论0 收藏0
  • 飞驰在Mesos的涡轮引擎上

    摘要:方案二和也运行在中。新增删除节点变更配置均需要手工介入。公司已有的大多都是容器形式部署在各个服务器上。目前我们在每个节点上部署了传统的。在接下来的阶段团队也会对此做进一步的探索。 回想起第一次接触Mesos, 当时有很多困惑: 这到底是用来做啥的?跟YARN比有什么优势?有哪些大公司在使用么?。 然而现在技术日新月异地发展, Mesos这个生态圈也开始被越来越多的团队熟悉关注, 像k8...

    xorpay 评论0 收藏0
  • 使用 Docker, 7 个命令部署一个 Mesos 集群

    本文原文是 Deploy a Mesos Cluster with 7 Commands Using Docker 这个教程将给你展示怎样使用 Docker 容器提供一个单节点的 Mesos 集群(未来的一篇文章将展示怎样很容易的扩展这个到多个节点或者是见底部更新)。这意味着你可以使用 7 个命令启动整个集群!不需要安装任何东西除了一个正在运行的 Docker 服务器。 将启动 4 个容器:...

    dadong 评论0 收藏0
  • 智能运维 | 如何做好持续集成——Jenkins on Mesos 实践

    摘要:而持续集成的意义就在于减少风险,和重复的过程,最终提高工作效率。第二级调度由被称作的组件组成。能和不同类型的通信,每种由相应的应用集群管理。这是的任务启动过程。数人云运维平台持续集成实践这是数人云运维平台的持续集成实践。 今天小数给大家带来的又是十足的干货:当运维遇到云计算,当Docker遇到Mesos和Jenkins,会擦出怎样的火花呢?且看来自数人云运维工程师金烨的演讲实录分享——...

    lsxiao 评论0 收藏0
  • 容器圈 | 基于 DCOS 的微软 Azure 容器服务正式发布

    摘要:近日,微软对外发布了容器服务公共预览版。同时,和微软在容器服务方面进行了广泛技术合作。重点的和两项开源技术将微软的与其他云容器服务提供商区分开来。是目前最成熟的容器编排引擎,微软正是看中了这点才选择了与合作。 小数点分享:开源技术 Docker 的轻量化、敏捷性以及可移植性的优点,使其在全球IT领域广受瞩目,并将在 2016 年迎来全面爆发。微软对于 Mesos 的支持,我们期待未来...

    sushi 评论0 收藏0

发表评论

0条评论

罗志环

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<