阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Mesos和Marathon管理Docker集群

263次阅读
没有评论

共计 5109 个字符,预计需要花费 13 分钟才能阅读完成。

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

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

使用 Mesos 和 Marathon 管理 Docker 集群

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

使用 Mesos 和 Marathon 管理 Docker 集群

Mesos 架构图如下:

使用 Mesos 和 Marathon 管理 Docker 集群

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

  1. 调度器 : 与 Mesos 交互,订阅资源,然后在 mesos 从服务器中加载任务。
  2. 执行器 : 从框架的环境变量 配置中获得信息,在 mesos 从服务器中运行任务。

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

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

使用 Mesos 和 Marathon 管理 Docker 集群

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

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

使用 Mesos 和 Marathon 管理 Docker 集群

失败恢复和高可用性

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

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

什么是 Marathon

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

使用 Mesos 和 Marathon 管理 Docker 集群

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

使用 Mesos 和 Marathon 管理 Docker 集群

安装配置

首先,我们需要设置 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 version: 1.0.0
     Server API version: 1.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 获得信息的截图:

使用 Mesos 和 Marathon 管理 Docker 集群

更多关于 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 的杀手级集群管理组合。

关于 Apache Mesos 的一些想法   http://www.linuxidc.com/Linux/2015-03/114733.htm

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm

配置 Docker 镜像下载的本地 mirror 服务   http://www.linuxidc.com/Linux/2015-07/120061.htm

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

在 Ubuntu Trusty 14.04 (LTS) (64-bit) 安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm 

Docker 安装应用 (CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm 

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm 

Docker 的详细介绍 :请点这里
Docker 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/120966.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5109字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中