[经验交流] Apache Mesos Docker集群初探

前言

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

1. Apache Mesos概述

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

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

现在Apache Mesos原生支持Docker.

2. Mesos架构分析

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


Master: 管理slave节点

Slave: 为集群提供资源

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

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

3. 安装Mesos Cluster

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

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

通过yum安装很简单。


mesos管理界面:

(从任意一台master5050端口访问)


marathon管理界面:

(从任意一台master8080端口访问)

4.Mesos Docker集群使用初探

4.1 创建任务

可以通过marathonui界面创建任务,也可以用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描述的任务信息是:

任务IDtest-docker

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

CPU用量:0.5

实例数:3

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

容器信息:

镜像:httpd

类型:docker

privileged: true

网络:桥接

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

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, slave2slave3上:



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

4.2 高可用测试

 

1)docker容器故障切换

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

 

2docker服务故障切换

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

 

3slave节点故障切换

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


4master节点故障切换

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

posted @ 2016-04-08 16:52  hahp  阅读(654)  评论(0编辑  收藏  举报