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. php中的include()的使用技巧

    php中的include()的使用技巧 include() 语句包括并运行指定文件. 以下文档也适用于 require().这两种结构除了在如何处理失败之外完全一样.include() 产生一个警告而 ...

  2. Mvc5 Html.EditorFor

    如果对缺省的样子不满意, 可以有模板,寻寻觅觅,摸索出 在Views\Shared\EditorTemplates下创建String.cshtml 必须的是EditorTemplates文件夹 @{ ...

  3. Ubuntu 14.10 下安装中文输入法

    系统默认带的是IBUS,这个不怎么好用,我们需要安装一个新的框架FCITX 1 打开软件中心,输入fcitx,安装flexible input method framework 2 下载需要的输入法, ...

  4. (转)HTML 5离线存储之Web SQL

    原文:http://developer.51cto.com/art/201106/267357.htm HTML 5离线存储之Web SQL 2011-06-07 15:14 kkun kkun的博客 ...

  5. PP

  6. 什么php?

    PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的语法借鉴吸收了C语言.Java和Perl等流行计算机语言的特点,易于一般程序员学习.PHP的主要目标是允许网络开 ...

  7. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  8. python的循环语句等

    names = ['Michael', 'Bob', 'Tracy'] for name in names: print name sum = 0 for x in [1, 2, 3, 4, 5, 6 ...

  9. HTML的表单

    HTML表单 <!-- <form></form>标签对用来创建一个表单,即定义表单的开始和结束位置,<form>表单具有下面等属性 1.action属性用来 ...

  10. BUY LOW, BUY LOWER_最长下降子序列

    Description The advice to "buy low" is half the formula to success in the bovine stock mar ...