您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Docker系列之(二):使用Mesos管理Docker集群
 
作者: ee900222  来源;. 博客园 发布于 2016-8-13
  1826  次浏览      14
 

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源

1 # rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm
c在所有机器的/etc/hosts中,指定主机名

1 # vi /etc/hosts
2 10.86.255.166 test166
3 10.86.255.167 test167

2.2 安装Master

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

  1. # yum install mesos marathon chronos mesosphere-zookeeper

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

2.2.2 ZooKeeper设定

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

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

2.2.3 启动服务

   
1   # systemctl start zookeeper
2 # systemctl start mesos-master
3 # systemctl start marathon
4 # systemctl start chronos

2.3 安装Slave

2.3.1 在Slave上安装Mesos,Docker

  1  # yum install mesos docker

2.3.2 Docker相关设定

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

2.3.3 ZooKeeper设定

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

2.3.4 启动服务

  
 1# systemctl start docker
2 # 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测试命令

  
   1 # ./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

  
     1 # 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文件

  
							
     {
"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集群提供了可能。

 

 
 
 
 
 
 
 
   
1826 次浏览       14
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件的思考
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS
更多...   
相关培训课程

云计算原理与应用
Windows Azure 云计算应用

摩托罗拉 云平台的构建与应用
通用公司GE Docker原理与实践
某研发中心 Openstack实践
知名电子公司 云平台架构与应用
某电力行业 基于云平台构建云服务
云计算与Windows Azure培训
北京 云计算原理与应用