【原创】大数据基础之Mesos+Marathon+Docker部署nginx
一 安装
安装docker:https://www.cnblogs.com/barneywill/p/10343091.html
安装mesos:https://www.cnblogs.com/barneywill/p/10324348.html
安装marathon:https://www.cnblogs.com/barneywill/p/10366688.html
二 部署nginx
使用docker官方nginx image,如果想用私有docker registry,可以参考:https://www.cnblogs.com/barneywill/p/10367341.html
打开marathon页面,使用docker image创建app

1 开启mesos对docker的支持
# echo 'docker,mesos' > /ec/mesos-slave/containerizers
# service mesos-slave restart
2 创建app之后nginx正常运行,但是增加端口映射之后(即--network bridge -p 80:80),app一直卡住无法运行,查看mesos master日志如下:
# tail -f /var/log/mesos/mesos-master.log.INFO
I0216 01:01:35.815131 25339 master.cpp:9533] Sending offers [ e11dfbd1-316e-4635-9267-8d5089f5ecfa-O171, e11dfbd1-316e-4635-9267-8d5089f5ecfa-O172, e11dfbd1-316e-4635-9267-8d5089f5ecfa-O173, e11dfbd1-316e-4635-9267-8d5089f5ecfa-O174 ] to framework 46ef421b-55ad-4b9f-876c-5d454abd2e6b-0000 (marathon) at scheduler-2655dbf9-0e11-4d1a-934f-5012c504ab07@192.168.0.54:38562
I0216 01:01:35.821087 25338 master.cpp:5886] Processing DECLINE call for offers: [ e11dfbd1-316e-4635-9267-8d5089f5ecfa-O171 ] for framework 46ef421b-55ad-4b9f-876c-5d454abd2e6b-0000 (marathon) at scheduler-2655dbf9-0e11-4d1a-934f-5012c504ab07@192.168.0.54:38562
I0216 01:01:35.821200 25338 master.cpp:11531] Removing offer e11dfbd1-316e-4635-9267-8d5089f5ecfa-O171
I0216 01:01:35.821494 25335 master.cpp:5886] Processing DECLINE call for offers: [ e11dfbd1-316e-4635-9267-8d5089f5ecfa-O173 ] for framework 46ef421b-55ad-4b9f-876c-5d454abd2e6b-0000 (marathon) at scheduler-2655dbf9-0e11-4d1a-934f-5012c504ab07@192.168.0.54:38562
I0216 01:01:35.821557 25335 master.cpp:11531] Removing offer e11dfbd1-316e-4635-9267-8d5089f5ecfa-O173
I0216 01:01:35.821578 25335 master.cpp:5886] Processing DECLINE call for offers: [ e11dfbd1-316e-4635-9267-8d5089f5ecfa-O174 ] for framework 46ef421b-55ad-4b9f-876c-5d454abd2e6b-0000 (marathon) at scheduler-2655dbf9-0e11-4d1a-934f-5012c504ab07@192.168.0.54:38562
I0216 01:01:35.821614 25335 master.cpp:11531] Removing offer e11dfbd1-316e-4635-9267-8d5089f5ecfa-O174
I0216 01:01:35.823659 25334 master.cpp:5886] Processing DECLINE call for offers: [ e11dfbd1-316e-4635-9267-8d5089f5ecfa-O172 ] for framework 46ef421b-55ad-4b9f-876c-5d454abd2e6b-0000 (marathon) at scheduler-2655dbf9-0e11-4d1a-934f-5012c504ab07@192.168.0.54:38562
I0216 01:01:35.823747 25334 master.cpp:11531] Removing offer e11dfbd1-316e-4635-9267-8d5089f5ecfa-O172
可见mesos-master一直向marathon提供resource offer,但是一直被拒绝,再仔细查看日志发现
I0216 01:01:12.527853 25338 master.cpp:7503] Re-registered agent 0548c9c0-dd5f-4b3a-8aca-4668f8aacb69-S9 at slave(1)@192.168.0.1:5051 (server1.bj) with cpus:8; mem:14861; disk:35829; ports:[31000-32000]
发现mesos-slave的资源范围有问题,ports:[31000-32000],nginx是需要80端口的,所以一直被拒绝,关于resources官方文档描述如下:
--resources=VALUE
Total consumable resources per agent. Can be provided in JSON format or as a semicolon-delimited list of key:value pairs, with the role optionally specified.
As a key:value list: name(role):value;name:value...
To use JSON, pass a JSON-formatted string or use --resources=filepath to specify the resources via a file containing a JSON-formatted string. 'filepath' can be of the form file:///path/to/file or /path/to/file.
Example JSON:
[
{
"name": "cpus",
"type": "SCALAR",
"scalar": {
"value": 24
}
},
{
"name": "mem",
"type": "SCALAR",
"scalar": {
"value": 24576
}
}
]
参考:http://mesos.apache.org/documentation/latest/configuration/agent/
修改端口范围
# echo 'ports(*):[80-80000]' > /etc/mesos-slave/resources
# service mesos-slave restart
之前的错误没了,但是又出现新的错
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: E0216 01:37:17.314812 21733 slave.cpp:7311] EXIT with status 1: Failed to perform recovery: Incompatible agent info detected.
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: resources {
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: name: "ports"
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: type: RANGES
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: ranges {
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: range {
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: begin: 31000
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: end: 32000
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: }
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: }
Feb 16 01:37:17 cdp-test-server-04.bj mesos-slave[21714]: }
这个错是因为修改resources之后需要充值agent并重启,详见:https://www.cnblogs.com/barneywill/p/10386239.html
# rm -f /var/lib/mesos/meta/slaves/latest
# service mesos-slave start
3 如果需要制定在哪台机器上执行,可以设置constraints
只允许在一台机器上执行
"constraints": [
[
"hostname",
"CLUSTER",
"server2.bj"
]
],
允许在两台机器上执行,但是每台机器只能启动一个
"constraints": [
[
"hostname",
"UNIQUE"
],
[
"hostname",
"LIKE",
"server[1-2].bj"
]
],
参考:https://mesosphere.github.io/marathon/docs/constraints.html
部署完成后

还有一点,注意到上边截图中的status是waiting,因为我做了一个restart操作,但是我每个app都指定只部署在一台服务器上,这时其实会一直卡在waiting的,因为marathon在restart时并不会将app先stop再start,而是不断等待mesos-master的resource offer,只有当有可用资源启动新的app之后才会把旧的app停掉,而我这里的app会占用80端口,所以是一个死循环,这时只能手工从docker上去stop container;

这样就ok了
【原创】大数据基础之Mesos+Marathon+Docker部署nginx的更多相关文章
- 【原创】大数据基础之Mesos(1)简介、安装、使用
Mesos 1.7.1 官方:http://mesos.apache.org/ 一 简介 Program against your datacenter like it’s a single pool ...
- 【原创】大数据基础之Zookeeper(2)源代码解析
核心枚举 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; } zookeeper服务器状态:刚启动LOOKING,f ...
- Mesos, Marathon, Docker 平台部署记录
Mesos, Marathon, Docker 平台部署记录 所有组件部署基于Ubuntu 14.04 x64 主机 IP 角色 master 192.168.1.3 Mesos Master, Ma ...
- 使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作
经历了之前的两篇,我们已经大体上了解了docker部署容器的过程. 使用docker部署nginx+tomcat架构 使用docker部署nginx+tomcat架构():访问mysql数据库 不过, ...
- 使用docker部署nginx+tomcat架构(2):访问mysql数据库
上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...
- Docker部署Nginx并修改配置文件
Docker部署Nginx并修改配置文件 一.拉取nginx镜像 docker pull nginx 二.在宿主机中创建挂载目录 mkdir -p /data/nginx/{conf,conf.d,h ...
- Docker部署Nginx应用(2)
Docker部署Nginx应用(2) 1.拉取Nginx镜像 [root@localhost ~]# docker pull nginx Using default tag: latest lates ...
- docker(部署常见应用):docker部署nginx
上回说到centos安装docker. 这次用实战,docker部署运行常见的应用. docker常用命令 参看:docker命令大全.这里不做赘述. docker部署nginx 1.docker h ...
- 【原创】大数据基础之Marathon(1)简介、安装、使用
marathon 1.6.322 官方:https://mesosphere.github.io/marathon/ 一 简介 Marathon is a production-grade conta ...
随机推荐
- Bootstrap开发框架界面的调整处理
我在之前介绍了很多关于Boostrap的框架方面的文章,主要是介绍各种插件的使用居多,不过有时候觉得基于Metronic的Boostrap框架的界面效果不够紧凑,希望对它进行一定的调整,那么我们应该如 ...
- Python Revisited Day 07 (文件处理)
目录 7.1 二进制数据的读与写 7.1.1 带可选压缩的Pickle 7.1.2 带可选压缩的原始二进制数据 7.2 文本文件的写入与分析 7.2.1 写入文本 7.2.2 分析文本 7.2.3 使 ...
- 解决hash冲突的三个方法
通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题.创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致.下面以创建哈希表为例,说 ...
- 软工+C(2): 分数和checklist
// 上一篇:题目设计.点评和评分 // 下一篇:超链接 教学里,建立清晰明确的评分规则并且一开始就公布,对于教师.助教.学生都是重要的. 公布时机 在课程开始的时候,就需要确定并公布评分机制,随着课 ...
- URL https://i.cnblogs.com/EditPosts.aspx?opt=1
URL url = new URL("https://i.cnblogs.com");URL url1 = new URL(url, "EditPosts.aspx?op ...
- Shell命令-文件及内容处理之head、tail
文件及内容处理 - head.tail 1. head:显示文件内容头部 head命令的功能说明 head 命令用于显示文件头部内容,默认执行 head 命令会输出文件开头的 10 行. head命令 ...
- 原生JS的Ajax技术
1.同步和异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡 ...
- codeforces487A
Fight the Monster CodeForces - 487A A monster is attacking the Cyberland! Master Yang, a braver, is ...
- python面向对象之类的组合
一.python类的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象二.组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系.三.例子模拟英雄联盟写一个游戏人物的类 要求:(1 ...
- 【LOJ6060】【2017 山东一轮集训 Day1 / SDWC2018 Day1】Set 线性基
题目大意 给出 \(n\) 个非负整数,将数划分成两个集合,记为一号集合和二号集合.\(x_1\) 为一号集合中所有数的异或和,\(x_2\) 为二号集合中所有数的异或和.在最大化 \(x_1 + x ...