`
m635674608
  • 浏览: 5028035 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

请您先登录,才能继续操作

使用Mesos和Marathon管理Docker集群

 
阅读更多

分 布式系统是难于理解、设计、构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现。SLA(服务水平协议)是衡量停机和/或性能下降的标准,大多 数现代应用程序有一个期望的弹性SLA水平,通常按"9"的数量增加(如,每月99.9或99.99%可用性)。每个额外的9变得越来越难实现。

   分布式系统通常是以静态分区,比如Akka/Play、 Spark/Hadoop、Storm和 Redis各自分区分组划分。静态分区带来的缺点是增加复杂性,随着机器数量增加,软件管理越来越复杂,失败管理维护越来越难。而且资源消耗非常不经济, 下图是静态分区下资源利用率:

   Apache Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细 粒度的资源共享,可以扩展伸缩到数千个节点。Mesos已经被Twitter用来管理它们的数据中心。

mesos架构

Mesos架构图如下:

mesos架构

  Mesos框架是一个在Mesos上运行分布式应用的应用程序,它有两个组件:

  1. 调度器 : 与Mesos交互,订阅资源,然后在mesos从服务器中加载任务。

  2. 执行器 : 从框架的环境变量 配置中获得信息,在mesos从服务器中运行任务。

  下面看看其是如何实现资源调用?Mesos通过"resources offers" 分配资源,资源其实是当前可用资源的一个快照,调度器将使用这些资源在mesos从服务器上运行任务。

Mesos主从服务器调度资源的顺序图如下:

  首先由Mesos主服务器查询可用资源给调度器,第二步调度器向主服务器发出加载任务,主服务器再传达给从服务器,从服务器向执行器命令加载任务执行,执行器执行任务以后,将状态反馈上报给从服务器,最终告知调度器 。

  从服务器下管理多个执行器,每个执行器是一个容器,以前可以使用Linux容器LXC,现在使用Docker容器。

 

失败恢复和高可用性

  Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行任何和从服务器信息,使用MultiPaxos进行日志复制实现一致性。

Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键点信息如任务信息 状态更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务(类似Java中的钝化和唤醒)

 

什么是Marathon

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

   这样,我们可以如同一台Linux主机一样管理数千台服务器,它们的对应原理如下图,使用Marathon类似Linux主机内的init Systemd等外壳管理,而Mesos则不只包含一个Linux核,可以调度数千台服务器的Linux核,实际是一个数据中心的内核:

 

安装配置

首先,我们需要设置Mesos集群环境,下面我们以在Ubuntu 14.04 vagrant 节点上设置Mesos master/slave 和 Zookeeper。安装依赖:

$ apt-get install curl python-setuptools python-pip python-dev python-protobuf

安装zookeeper:

$ apt-get install zookeeperd

安装后,Zookeeper有一个配置,每个Zookeeper需要知道它在quorum中的位置。

echo 1 | sudo dd of=/var/lib/zookeeper/myid

下面设置Docker:

$ echo "deb http://get.docker.io/ubuntu docker main" > /etc/apt/sources.list.d/docker.list

$ apt-get update && apt-get install lxc-docker

$ docker version

 Client version: 1.0.0
     Client API version: 1.12
     Go version (client): go1.2.1
     Git commit (client): 63fe64c
     Server version1.0.0
     Server API version1.12
     Go version (server): go1.2.1
     Git commit (server): 63fe64c

 

从Docker Hub拉取一个ubuntu image

$ docker pull libmesos/ubuntu

 

配置Mesos:

curl -fL http://downloads.mesosphere.io/master/ubuntu/14.04/mesos_0.19.0~ubuntu14.04%2B1_amd64.deb -o /tmp/mesos.deb
$ dpkg -i /tmp/mesos.deb
$ mkdir -p /etc/mesos-master
echo in_memory | sudo dd of=/etc/mesos-master/registry
## Mesos Python egg for use in authoring frameworks
curl -fL http://downloads.mesosphere.io/master/ubuntu/14.04/mesos-0.19.0_rc2-py2.7-linux-x86_64.egg -o /tmp/mesos.egg
$ easy_install /tmp/mesos.egg
 

下载Marathon:

$ tar xvzf marathon-0.6.0.tgz

Mesos通过Deimos 管理Docker,通过pip安装Deimos:

$ pip install deimos

配置mesos 使用Deimos

$ mkdir -p /etc/mesos-slave
$ echo /usr/local/bin/deimos | sudo dd of=/etc/mesos-slave/containerizer_path
echo external | sudo dd of=/etc/mesos-slave/isolation

 

启动所有服务 :

$ initctl reload-configuration

$ service docker start

$ service zookeeper start

$ service mesos-master start

$ service mesos-slave start

##### Starting Marathon #####

$ cd marathon-0.6.0

$ ./bin/start --master zk://localhost:2181/mesos --zk_hosts localhost:2181

 

Marathon 在端口8080已经启动侦听,我们可以通过浏览器访问:

curl localhost:8080/help # gives us some details about the API's

 

启动容器

我们通过Marathon启动一个容器的REST API提交如下:

curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
localhost:8080/v2/apps -d '{
"container": {"image": "docker:///libmesos/ubuntu", "options": ["--privileged"]},
"cpus": 0.5,
"cmd": "sleep 500",
"id": "docker-tester",
"instances": 1,
"mem": 300
}'

我们通过在curl命令后选项"options"提交定制的Docker,我们能检查syslog ,因为mesos缺省日志是放在syslog中。

Jun 27 07:24:58 vagrant-ubuntu-trusty-64 deimos[19227]: deimos.containerizer.docker.launch() exit 0 // docker run --sig-proxy --rm --cidfile /tmp/deimos/mesos/00d459fb-22ca-4af7-9a97-ef8a510905f2/cid -w /tmp/mesos-sandbox -v /tmp/deimos/mesos/00d459fb-22ca-4af7-9a97-ef8a510905f2/fs:/tmp/mesos-sandbox --privileged -p 31498:31498 -c 512 -m 300m -e PORT=31498 -e PORT0=31498 -e PORTS=31498 libmesos/ubuntu sh -c 'sleep 500'

我们也能通过Marathon Rest API检查我们启动任务的状态:

curl -X GET -H "Content-Type: application/json" localhost:8080/v2/apps

下面是Marathon UI获得信息的截图:

 

更多关于Docker任务的信息可以通过Mesos GUI在Mesos主服务器的端口5050 ,现在我们测试一下任务的伸缩性,比如我们需要加入更多节点服务器,有两种办法,使用GUI或通过发出put请求。

curl -X PUT -H "Content-Type: application/json" localhost:8080/v2/apps/docker-tester \
"container": {"image": "docker:///libmesos/ubuntu", "options": ["--privileged"]},
"cpus": 0.5,
"cmd": "sleep 500",
"id": "docker-tester",
"instances": 2, # increasing the instance count to 2
"mem": 300
}'

Marathon能确保所有docker进程启动运行,如果某个进程崩溃,Marathon会重新启动同样的进程,以确保每个配置运行一个实例,还有其他开源Mesos调度器如Apache Aurora, Airbnb's Chronos. 但是marathon比较直接简单提供好的REST API用来管理容器,虽然Mesos, Marathon 和Docker还很年轻,但是提供了基于Docker的杀手级集群管理组合。

 

分享到:
评论

相关推荐

    single-docker-mesos:快速部署mesos+marathon+docker单节点集群,便于开发和调试

    基于Docker快速搭建单节点Mesos/Marathon集群,增加支持marathon管理运行docker功能 GitHub地址: ##一. 简介 是集群资源管理系统,是运行在Mesos之上的集群计算架构。将Mesos和Marathon打包到镜像中,开发者便可以在...

    Marathon+Mesos+Zookeeper+Docker实战

    Mesos采用Master/Slave架构,Master负责资源调度和管理Framework,Slave负责执行计算任务。Apache Mesos通过维护轻量级的Master和高可用的Zookeeper集成,解决单点故障问题。MesosMaster和MesosSlave是其核心组件,...

    single-mesos-docker:基于Docker快速搭建单节点MesosMarathon集群

    kiwenlau/single-mesos-docker基于Docker快速搭建单节点Mesos/Marathon集群GitHub地址:博客地址:一. 简介二. 搭建Mesos/Marathon集群三. 测试Mesos/Marathon集群四. 存在的问题五. 其他六. 参考##一. 简介是集群...

    第六章:项目:Marathon+Mesos+Zookeeper+Docker实战1

    最后,Docker在这个实战项目中可能作为容器化技术使用,允许Mesos更高效地管理和调度任务。Docker容器封装了应用及其依赖环境,使得任务可以在任何支持Docker的环境中无缝迁移和执行,增强了Mesos的灵活性和可移植性...

    ci-mesos:通过Docker,Mesos和Marathon增强了Jenkins

    Ci-mesos Jenkins Docker映像 打开詹金斯Dockerfile 从詹金斯检查:每周 显示Mesos本机库设置 检查Jenkins配置 检查主num执行者= 0 ...在Jenkins上配置Mesos集群 Mesos本机库路径= / usr / lib / libmesos.so M

    MesosClusterSpyke:用于创建 Mesos + Marathon + Chronos + Docker 集群的 Vagrantfiles

    Vagrantfile 和一些用于创建 Mesos + Marathon + Chronos + Docker 集群的 shell 脚本 如果只是尝试 Mesos 集群,那会很痛苦。 这组文件可以让你轻松生成 Mesos 的集群环境。 如果你愿意,你可以参考。 入门 1. ...

    docker-mesos-marathon-screencast:Mesos 上的 Docker 集群中使用的脚本和 Marathon 截屏视频

    docker-mesos-marathon-screencast 的截屏视频中使用的脚本。入门如果您想为自己复制演示。 脚本包含在此 repo 中。 你会需要: 安装 使用您的主launch.sh的 IP 地址更新launch.sh 用你的主人的 IP 地址更新.mesos....

    ansible-mesos:适用于AWS中Mesos,Marathon,Docker和HAProxy的Ansible剧本

    该剧本使用Ansible 2在具有EC2节点的AWS集群上以高可用性模式部署具有Marathon和HAProxy的Mesos。 设置 本节将在您的计算机上安装Ansible。 安装Ansible 确保已安装Ansible 2。 最简单的方法是从其Git存储库的...

    Mesos集群运维vagrant-mesos.zip

    这意味着,你可以使用 vagrant up,打造自己的 Mesos Marathon Chronos Docker PaaS 平台。Marathon 作为 分布式 init.d, Chronos 作为分布式 cron。要求:vagrant 1.6.5 : ...

    领科云基于Mesos和Docker的企业移动应用实践分享

    - **Marathon**:作为应用程序的调度器,负责应用程序的部署和管理。 - **Spark Controller (Docker)**:通过Docker容器部署Spark框架,实现大数据处理任务的自动化管理和执行。 ##### 4. 智能硬件的Docker化 - **...

    Centos7上Mesos和Marathon的安装和配置

    Mesos提供了集群资源管理的功能,而Marathon则是在Mesos之上构建的一个高级调度器,用于运行长期运行的应用和服务。本文将详细介绍如何在CentOS 7上安装和配置这两个工具。 #### 二、环境准备 首先,我们需要准备...

    去哪儿网利用Mesos和Docker构建dev/beta环境

    去哪儿网使用Mesos和Docker构建开发(DEV)和测试(BETA)环境,这一过程涉及多个方面的知识点。下面是对这些知识点的详细梳理。...同时,通过这一实践,去哪儿网还积累了宝贵的容器化运维和管理经验。

    storm-marathon:Apache Storm 0.9.3-rc1 Docker 集群使用 Marathon 部署在 Apache Mesos 上

    该项目包含 Marathon 配方,用于在 Apache Mesos 上使用 Marathon 启动 Storm-Docker 容器。 我们正在使用 Debian Wheezy 的基础 Docker 镜像。 使用 Marathon,我们可以通过 Marathon REST Api 或通过 Marathon ...

    mesos集群在centos部署文档.pdf

    这个过程涉及了 Docker 的安装、Zookeeper 集群的搭建、Mesos 的部署以及 Marathon 的使用,还有 HAProxy 作为负载均衡器的角色。在实际操作中,确保每个步骤都按照最佳实践进行,以保证集群的稳定性和可靠性。同时...

    Monitoring Mesos, Docker, Containers with Zabbix

    假设我们有一个基于Mesos的集群,其中包含多个Docker容器和若干个应用程序框架(如Marathon和Chronos)。为了确保系统的稳定运行,我们可以采取以下监控策略: - **硬件监控**:通过Zabbix监控每个节点的CPU、内存...

    mesos运行测试结果分析

    Marathon不仅可以简化服务部署和管理流程,还能通过自动扩展和故障恢复机制,确保系统的高可用性和稳定性。 #### 五、总结 综上所述,通过本次测试我们深入了解了Mesos在不同环境下的表现,并对其资源管理和任务...

    DCOS之marathon技术文档

    整体来看,Marathon技术文档提供了一个全面的学习指南,帮助用户了解和掌握如何在DCOS环境下通过Marathon进行高效的Docker编排和应用管理。随着软件定义的网络(SDN)、存储以及数据中心操作系统(DCOS)技术的发展,...

Global site tag (gtag.js) - Google Analytics