1. Mesos简介

1.1 Mesos

Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理。

Mesos主要由以下几部分组成:

Master: 管理各Slave节点

Slave: 为集群提供资源

Framework: scheduler从Master请求资源,executor在Slave上执行任务

Slave节点上的每个executor是一个容器

官方文档:

http://mesos.apache.org/documentation/latest/architecture/

http://mesos.apache.org/documentation/latest/getting-started/

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

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

1.2 Marathon

Marathon 是Mesos的一个Framework,用来执行需要长时间运行的任务。如果把Mesos比喻成Kernel的话,那么Marathon就是它的守护进程Daemon。

它还具备HA,Health Checks,服务发现等功能。如果某个Docker进程崩溃,Marathon会重新启动同样的进程。

1.3 Chronos

Chronos本质上是cron-on-mesos,这是一个用来运行基于容器定时任务的Mesos框架。

1.4 ZooKeeper

ZooKeeper用于集群的管理,包括统一配置管理,选举Leader等。

2. 安装Mesos

本次测试环境的构成如下:

Mesos Master: test166

Mesos Slave:  test166,test167

Marathon:  test166

Chronos:  test166

ZooKeeper:  test166

2.1 安装准备

在所有机器上,安装Mesos源

# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

在所有机器的/etc/hosts中,指定主机名

# vi /etc/hosts
10.86.255.166 test166
10.86.255.167 test167

2.2 安装Master

2.2.1 在Master上安装Mesos,Marathon,Chronos,ZooKeeper

# yum install mesos marathon chronos mesosphere-zookeeper

如果服务器上之前装过jdk,升级到最新版本

2.2.2 ZooKeeper设定

本次配置的Master是单节点环境,ZooKeeper也是单点

# vi /etc/mesos/zk
zk://test166:2181/mesos

2.2.3 启动服务

# systemctl start zookeeper
# systemctl start mesos-master
# systemctl start marathon
# systemctl start chronos

2.3 安装Slave

2.3.1 在Slave上安装Mesos,Docker

# yum install mesos docker

2.3.2 Docker相关设定

# echo 'docker,mesos' > /etc/mesos-slave/containerizers
# echo '5mins' > /etc/mesos-slave/executor_registration_timeout

2.3.3 ZooKeeper设定

# vi /etc/mesos/zk
zk://test166:2181/mesos

2.3.4 启动服务

# systemctl start docker
# systemctl start mesos-slave

2.4 确认

Mesos的页面

http://10.86.255.166:5050/

Marathon的页面

http://10.86.255.166:8080/

Chronos的页面

http://10.86.255.166:4400/

3. 使用Mesos

在Mesos Slave页面,可以看到两个Slave

3.1 执行framework测试

3.1.1 在服务器上执行framework测试命令

# ./src/examples/python/test-framework 10.86.255.166:5050

3.1.2 在Frameworks页面,可以查看任务的执行情况

3.1.3 点击结束的任务页面,可以看到在哪个Slave上执行的

3.2 测试Marathon

用nc命令启动一个HTTP服务

3.2.1 在各节点上安装netcat

# yum install nmap-ncat

3.2.2 在Marathon页面,点击“Create Application”创建任务

command: while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done

3.2.3 点击“Create”后,创建并执行任务

3.2.4 在Applications页面,点击任务,可以看到任务的详细信息

可以看到任务分布在两个节点上,访问HTTP服务启动的端口

3.2.5 在各节点可以看到nc进程正启动着

test166:

test167:

3.3 测试Chronos

3.3.1 在Chronos页面,点击“New Job”创建任务

注意:时间是UTC时间

3.3.2 在Chronos页面,可以看到任务执行的情况

3.3.3 在Mesos页面,可以看到任务执行的情况

4. 执行Docker任务

4.1 测试通过Marathon执行Docker任务

启动Docker,抓取ubuntu镜像,date命令输出当前时间

任务Deploying的时候,从docker.io抓取镜像,抓取下来后,开始Running。

如果抓取镜像的时间过长,失败的时候,可以先用docker pull命令在节点上抓取镜像后,再执行任务。

4.1.1 创建json文件

# vi marathon-test.json
{
"container": {
"type": "DOCKER",
"docker": {
"image": "libmesos/ubuntu"
}
},
"id": "ubuntu-marathon",
"instances": 2,
"cpus": 0.5,
"mem": 256,
"uris": [],
"cmd": "while sleep 10; do date -u +%T; done"
}

4.1.2 在Marathon上创建任务

# curl -X POST -H "Content-Type: application/json" http://test166:8080/v2/apps -d@marathon-test.json

4.1.3 在Marathon页面确认容器已经启动

4.1.4 在Mesos页面确认任务正在执行中

4.1.5 从stdout信息确认输出的时间

4.1.6 在节点上确认容器已经启动

# docker ps

4.1.7 查看容器的日志,确认输出的时间

# docker logs CONTAINER_ID

4.2 测试通过Chronos执行Docker任务

启动Docker,抓取nginx镜像,启动nginx容器

4.2.1 创建json文件

# vi chronos-test.json
{
"container": {
"type": "DOCKER",
"image": "nginx",
"network": "BRIDGE"
},
"schedule": "R\/2015-12-20T07:30:00Z\/PT2M",
"name": "chronos-nginx",
"cpus": "0.5",
"mem": "256",
"uris": [],
"command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf"
}

network": "BRIDGE",因为Docker默认的网络模式是桥接,不指定默认也是BRIDGE

4.2.2 在Chronos上,创建任务

# curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://test166:4400/scheduler/iso8601

4.2.3 在Chronos页面确认任务已做成

本次是测试,所以在Chronos的任务页面,点击「Force Run」强制执行

4.2.4 在Mesos页面确认任务的详细信息

4.2.5 在节点上确认容器启动

# docker ps

4.2.6 确认nginx网页可以访问

5. 后记

Mesos, Marathon 使得 Docker集群的管理变得简单方便,为在生产环境部署使用Docker集群提供了可能。

Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)的更多相关文章

  1. Hive 系列(二)权限管理

    Hive 系列(二)权限管理 一.关于 Hive Beeline 问题 启动 hiveserver2 服务,启动 beeline -u jdbc:hive2:// 正常 ,启动 beeline -u ...

  2. 使用kubectl管理k8s集群(二十九)

    前言 在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理.命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用. 在下一篇,我们将讲述 ...

  3. Docker Swarm Mode 学习笔记(创建 Swarm 集群)

    Swarm 集群由管理节点与工作节点组成. 初始化集群 使用命令:docker swarm init 如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise ...

  4. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  5. docker应用-3(搭建hadoop以及hbase集群)

    要用docker搭建集群,首先需要构造集群所需的docker镜像.构建镜像的一种方式是,利用一个已有的镜像比如简单的linux系统,运行一个容器,在容器中手动的安装集群所需要的软件并进行配置,然后co ...

  6. Docker:docker部署PXC-5.7.21(mysql5.7.21)集群搭建负载均衡实现双机热部署方案

    单节点数据库弊端 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 推荐Mysql集群部署方案 PXC (Percon ...

  7. Hadoop系列之(三):使用Cloudera部署,管理Hadoop集群

    1. Cloudera介绍 Hadoop是一个开源项目,Cloudera对Hadoop进行了商业化,简化了安装过程,并对hadoop做了一些封装. 根据使用的需要,Hadoop集群要安装很多的组件,一 ...

  8. Kubernetes 系列(一):本地k8s集群搭建

    我们需要做以下工作: (1)安装VMware,运行CentOs系统,一个做master,一个做node. (2)安装K8s. (3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准 ...

  9. 在 Minecraft 中管理 Kubernetes 集群

    原文链接:在 Minecraft 中管理 Kubernetes 集群 微软 2015 年收购 Minecraft 之后不久开源了一个项目叫 Dockercraft,这个项目当时看起来非常有趣,通过 D ...

  10. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

随机推荐

  1. (三)获取iphone的IMSI

    今天的任务是 iPhone上怎样获取 imsi 信息 来判断所属运营商,资料找了很久!总体有两种方案,但是其中一种好像不行 这里我都记录下来吧: 1: 这是使用coreTelephony.framew ...

  2. Html.ActionLink , Url.Action

    也来总结一下 以后省的忘了 都是从controller中获取到action名字返回 html.actionlink 返回的是带<a> 标签的超链接 url.action 是返回正常cont ...

  3. Ubuntu 14.10 下sed命令详解

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  4. jQuery之load、unload、onunload和onbeforeunload

    1.load:jQuery load() 方法是简单但强大的 AJAX 方法.load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法:$(selector).load(URL,dat ...

  5. SVG 2D入门2 - 图形绘制

    基本形状 SVG提供了很多的基本形状,这些元素可以直接使用,这一点比canvas好多了.废话不说了,直接看例子,这个最直接:   <svg width="200" heigh ...

  6. STL中的lower_bound和upper_bound的理解

    STL迭代器表述范围的时候,习惯用[a, b),所以lower_bound表示的是第一个不小于给定元素的位置 upper_bound表示的是第一个大于给定元素的位置. 譬如,值val在容器内的时候,从 ...

  7. IOS第三方库 MARK

    综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZ ...

  8. BZOJ 2252 矩阵距离

    BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...

  9. HDU 4160

    http://acm.hdu.edu.cn/showproblem.php?pid=4160 大娃娃可以套在小娃娃外面(各边严格小),问最后最少得到几个娃娃 题目中的娃娃可以看做点,嵌套关系可以看做有 ...

  10. 第三个Sprint完结工作 用场景来规划测试工作.

    一.根据用户使用场景测试: 1.流程 典型群体 群体 张小明 年龄 7-12岁 职业 小学生 收入 压岁钱还有零花钱 能力 看一些简单的数,做一些相对简单的事 爱好 玩游戏 典型场景 张小明平时喜欢玩 ...