前言

因工作需要,我对基于Apache Mesos 的 Docker 集群作了一点研究,并搭建了一套环境,以下是资料分享。

1. Apache Mesos概述

Apache Mesos是一款开源群集管理软件,能将数据中心中的CPU、内存、存储、其它资源全部虚拟化并进行管理(引用自百度)。它被一些人认为是继OpenStack之后的“下一代云计算平台”,“代表云计算的未来“。

根据网络资料,Apache Mesos具有高可靠性,经过严酷的生产环境考验。目前Twitter、Mac等公司在使用它。

现在Apache Mesos原生支持Docker.

2. Mesos架构分析

注:插图引用自 http://www.slideshare.net/

Master:
管理slave节点

Slave:
为集群提供资源

Framework:
从Master请求资源,在Slave上执行任务,常用的framework有marathon。当容器崩溃,它会重新创建;当一台slave当机或者docker服务停服,marathon会自动把上面的docker容器转移到其它slave上。

Zookeeper:
为集群提供一致性服务。

3.
安装Mesos
Cluster

按照mesos官方文档安装Mesos
+ Marothon集群,安装好后简单配置即支持docker

https://open.mesosphere.com/getting-started/install/

通过yum安装很简单。

mesos管理界面:

(从任意一台master的5050端口访问)

marathon管理界面:

(从任意一台master的8080端口访问)

.Mesos
Docker
集群使用初探

4.1
创建任务

可以通过marathon的ui界面创建任务,也可以用POST方式向marathon发送任务。

通过marathon的服务,我们可以限制任务的资源使用量,比如:CPU、内存、磁盘,也可以限制任务的实例个数。marathon负责资源分配、故障切换。

4.1.1
Marathon UI

4.1.2
HTTP POST

首先把任务信息写成json格式,保存成一个文件,比如:test-docker.json:

{

"id":
"test-docker",

"cpus":
0.5,

"mem":
64.0,

"instances":
3,

"constraints":
[["hostname", "UNIQUE"]],

"container":
{

"type":
"DOCKER",

"docker":
{

"image":
"httpd",

"privileged":
true,

"network":
"BRIDGE",

"parameters":
[

{"key":
"publish", "value": "80:80"}

]

},

"volumes":
[

{

"containerPath":
"/usr/local/apache2/htdocs",

"hostPath":
"/var/nfsshare/htdocs",

"mode":
"RO"

}

]

}

}

这个json描述的任务信息是:

任务ID:test-docker

内存用量:64M(每个实例,以下类同)

CPU用量:0.5

实例数:3

限制:每个slave只部署一个实例

容器信息:

镜像:httpd

类型:docker

privileged:
true

网络:桥接

参数:
容器的80端口映射到slave的80

volumn:容器的htdocs目录挂到slave的相关目录

用curl通过POST方式向marathon端口发送任务:

curl
-i -H 'Content-Type: application/json' -d@test-docker.json
172.31.17.71:8080/v2/apps

之后marathon界面就会出现任务信息:

status下面的蓝色表示创建成功,3of3表示任务中的3个实例都创建成功。

把任务点开,可以看到3个实例创建在slave1,
slave2和slave3上:

分别用浏览器打开三个slave的80端口,发现httpd已经运行了:

4.2
高可用测试

1)docker容器故障切换

杀死slave1上正在运行的容器,slave4上很快创建了一个相同功能的容器

2)docker服务故障切换

关闭slave1的docker服务后,上面的任务很快会切换到slave4上

3)slave节点故障切换

关机slave4,只要集群中的slave数目足够,marathon会自动在其它slave上启动一个httpd容器

4)master节点故障切换

关闭一个master,整体功能不受影响,在其他master可以正常操作。

[经验交流] Apache Mesos Docker集群初探的更多相关文章

  1. Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...

  2. 基于zookeeper+mesos+marathon的docker集群管理平台

    参考文档: mesos:http://mesos.apache.org/ mesosphere社区版:https://github.com/mesosphere/open-docs mesospher ...

  3. Apache Doris 单节点(可多节点)Docker集群制作教程

    集群制作Author:苏奕嘉脚本研发Author:种益调研测试Author:杨春东 前言 Apache Doris是当下非常火热和流行的MPP架构OLAP数据库,很多同学想自学/测试Doris的使用和 ...

  4. docker集群——初识Swarm

    为Docker构建原生的集群管理工具的计划早在2014年初就开始了,当时作为一个通信协议项目,称为Beam.之后,它被实现为一种后台程序,使用Docker API来控制异构化的分布式系统.项目重新命名 ...

  5. [经验交流] 为 mesos framework 分配资源

    前段时间我在办公网搭建了一套mesos平台,用于docker 集群相关的调研和测试,mesos + marathon + docker 架构运行正常.但是在启用了chronos后,marathon无法 ...

  6. k8s docker集群搭建

    一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器 ...

  7. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  8. RocketMQ(2)---Docker集群部署RocketMQ

    RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...

  9. docker集群管理之swarm

    一.简介 docker集群管理工具有swarm.k8s.mesos等,我所用到的是swarm和k8s,这篇文章主要介绍swarm:swarm是docker集成的原生 管理工具,只要你安装上docker ...

随机推荐

  1. WCF服务在类库中的引用

    在类库中引用了WCF服务,悲剧降临了,追踪日志看到下边一串: --------------------------------------------------------------------- ...

  2. 转-浅谈HTTP-GET 、 HTTP-POST 和SOAP

    HTTP-GET 和 HTTP-POST HTTP-GET和HTTP-POST是标准协议,他们使用HTTP(超文本传输协议)谓词(谓词是指条件表达式的求值返回真或假的过程.)对参数金星编码并将参数作为 ...

  3. NSRunLoop概述和原理

    1.什么是NSRunLoop?我们会经常看到这样的代码: - (IBAction)start:(id)sender{pageStillLoading = YES;[NSThread detachNew ...

  4. ant sshexec 无法启动tomcat

    1.如果./startup.sh启动不了,可以试试./catalina.sh run 2.这个两个都是调用的catalina里边的方法,只不过一个重定向了日志,一个没有 eval \"$_R ...

  5. jsp里边下载文件

    //Tomcat下需要这两个//out.clear();//out=pageContext.pushBody(); //weblogic下加上会报错 response.reset();// 清空输出流 ...

  6. 《Java中的自动装箱和拆箱功能.》

    //Java中的自动装箱和拆箱功能. class AutoboxingUnboxing { public static void main(String[] args) { //直接把一个基本类型变量 ...

  7. 转载--JAVA读取文件最佳实践

    1.  前言 Java应用中很常见的一个问题,如何读取jar/war包内和所在路径的配置文件,不同的人根据不同的实践总结出了不同的方案,但其他人应用却会因为环境等的差异发现各种问题,本文则从原理上解释 ...

  8. javascript之DOM篇一

    一.什么是DOM DOM是用来操作页面,如div的获取,修改样式 二.DOM节点 标签(css)=元素(js)=节点(DOM) 1.子节点 childNodes 仅算父元素下的第一层 <!DOC ...

  9. YII2.0 验证表单

    控制器代码 <?php namespace app\modules\pub\controllers; use Yii; use backend\base\BaseController; use ...

  10. unix exec族函数 关于参数的疑惑

    问题不出在这几个函数,而在于看后文解释器的时候发现一个很奇妙的问题. #include <unistd.h> int execl(const char *pathname, const c ...