mesos+marathon+docker
目录
Zookeeper
Zookeeper安装配置
Zookeeper安装
Zookeeper配置
zookeeper启动
Mesos
Mesos实现原理
Mesos 安装配置
Mesos 安装
Mesos的配置
Mesos启动
Mesos验证
Marathon
Marathon_lb
集群结构
Marathon安装配置
Marathon安装
Marathon启动
Marathon配置
Marathon 验证
Marathon_lb安装配置
Docker
准备docker-tomcat镜像
构建dockerfile
基于dockerfile构建新的镜像
基于Marathon发布Task
Zookeeper
Zookeeper安装配置
Zookeeper安装
上传zookeeper安装包直接解压即可.
zookeeper目录:/data/zookeeper
Zookeeper配置
- 生成zoo.cfg配置文件
cd /data/zookeeper/confmv zoo_sample.cfg zoo.cfg
- 修改zoo.cfg如下
参数说明
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
- 创建zookeeper日志目录
mkdir –p /home/ycm/zookeeper/log
- 创建myid文件指定集群中该serverid
cd /home/ycm/zookeeper/datatouch myid
参照以上信息分别编辑3台服务器myid文件内容为1,2,3。
zookeeper启动
cd /data/zookeeper/bin./zkServer.sh start
./zkServer.sh status //查看当前服务角色
Mesos
Mesos实现原理
分布式资源管理框架
(1) Mesos-master:Mesos master,主要负责管理各个framework和slave,并将slave上的资源分配给各个framework
(2) Mesos-slave:Mesos slave,负责管理本节点上的各个mesos-task,比如:为各个executor分配资源
(3) Framework:计算框架,如:Hadoop,Spark等,通过MesosSchedulerDiver接入Mesos
(4) Executor:执行器,安装到mesos-slave上,用于启动计算框架中的task。
当用户试图添加一种新的计算框架到Mesos中时,需要实现一个Framework scheduler和executor以接入Mesos。
Mesos实现了一个两层的调度系统:Mesos slave将它的可用资源汇报给master,然后master通过可插拔的分配模块(Allocation module)向Framework的schedule发出资源邀约,这个schedule可以接受整个、部分或者拒绝这个资源邀约。如下图所示:
- Agent 1 reports to the master that it has 4 CPUs and 4 GB of memory free. The master then invokes the allocation policy module, which tells it that framework 1 should be offered all available resources.
- The master sends a resource offer describing what is available on agent 1 to framework 1.
- The framework’s scheduler replies to the master with information about two tasks to run on the agent, using <2 CPUs, 1 GB RAM> for the first task, and <1 CPUs, 2 GB RAM> for the second task.
- Finally, the master sends the tasks to the agent, which allocates appropriate resources to the framework’s executor, which in turn launches the two tasks (depicted with dotted-line borders in the figure). Because 1 CPU and 1 GB of RAM are still unallocated, the allocation module may now offer them to framework 2.
Allocation Module:资源分配模块,采用DRF(主导资源公平算法 Dominant Resource Fairness)算法。
假设我们有一个资源邀约,包含<9CPU,18GB RAM>。Framework1 运行任务需<1CPU,4GB RAM>,Framework2 运行任务需要<3CPU,1GB RAM>。
Framework1 的每个任务会消耗CPU总数的1/9、内存总数的2/9,因此Framework1 的主导资源是内存。同样,Framework2 的每个任务会CPU总数的1/3、内存总数的1/18,因此Framework2 的主导资源是CPU。
DRF分配模块跟踪分配给每个Framework的资源和每个框架的主导份额。每次,DRF以所有Framework中运行的任务中最低的主导份额作为资源邀约发送给Framework。如果有足够的可用资源来运行它的任务,Framework将接受这个邀约。
Mesos默认提供了几种方法来对资源分配进行调整,而不需要替换或者重写整个分配模块。这些方法包括角色,权重和资源保留 。
角色:--roles="web,mysql,hadoop"权重:--weights="web=10,mysql=20,hadoop=30"资源保留:--resources="cpus(mysql):8; mem(mysql):16384; disk(mysql):65536"
Mesos 安装配置
Mesos 安装
- 安装development tools
yum groupinstall -y "Development Tools"
- 安装mesos依赖
sudo yum install -y apache-maven python-devel java-1.8.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel
- 安装mesos
mesos安装包目录:/data/mesos-1.2
cd /data/mesos-1.2mkdir build && cd buildexport JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64../configuremake –j 6make install –j 6
Mesos的配置
设置mesos集群节点分布情况
创建masters和slaves文件,用于标记集群master和slave节点分布。
cd /usr/local/etc/mesos
- 修改masters文件
touch masters
- 修改slaves文件
touch slaves
- 修改3台主机mesos环境信息
cd /usr/local/etc/mesoscat mesos-master-env.sh.template > mesos-master-env.shcat mesos-slave-env.sh.template > mesos-slave-env.shcat mesos-deploy-env.sh.template > mesos-deploy-env.sh
- 修改mesos-master-env.sh
- 修改mesos-slave-env.sh
Mesos启动
cd /usr/local/sbin./mesos-start-cluster.sh
或分别启动(3台机器分别执行,替换红色字体主机地址)
cd /usr/local/sbin
- 启动master
nohup mesos-master --zk=zk://172.20.4.238:2181,172.20.4.239:2181,172.20.4.244:2181/mesos --port=5050 --hostname=172.20.4.238 --quorum=2 --registry=replicated_log --work_dir=/usr/local/etc/mesos/master &
- 启动slave
先执行rm -f /usr/local/etc/mesos/slave/meta/slaves/latest(对应mesos-slave work_dir,This ensures agent doesn't recover old live executors.)nohup mesos-agent --containerizers=docker,mesos --resources="ports(*):[8000-9000, 31000-32000]" --master=zk://172.20.4.238:2181,172.20.4.239:2181,172.20.4.244:2181/mesos --work_dir=/usr/local/etc/mesos/slave &
Mesos验证
http://172.20.4.238:5050
agent
Marathon
Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用。
Marathon_lb
Marathon-lb是通过监测Marathon应用程序状态来管理HAProxy的工具。
Marathon-lb通过调用自身的marathon_lb.py 脚本,连接到Marathon API以检索所有正在运行的应用程序,根据检索的信息生成HAProxy配置并重新加载HAProxy。 每当应用程序状态有任何变化时,Marathon-lb就会使用最新的IP和端口号更新haproxy配置文件,并重新加载haproxy。 默认情况下,Marathon-lb会绑定到每个应用的服务端口,并将传入的请求发送到应用实例。
Marahon-lb安装以后,针对应用程序部署过程中,需要配置一个特殊标签HAPROXY_GROUP=external,这个标签通知 marathon-lb是否需要暴露这个应用。
集群结构
服务器 |
组件 |
172.20.4.238 |
mesos-master,mesos-slave,zookeeper,marathon,marathon_lb |
172.20.4.239 |
mesos-master,mesos-slave,zookeeper,marathon |
172.20.4.244 |
mesos-master,mesos-slave,zookeeper,marathon |
注意事项:
关闭防火墙或开启对应端口;
关闭selinux
开放最大文件数 ulimit –n 65535
服务默认端口 |
|
应用 |
端口 |
zookeeper |
2181 |
mesos-master |
5050 |
mesos-salve |
5051 |
marathon |
8080 |
Marathon安装配置
Marathon安装
cd /datatar –zxvf marathon-1.4.0.tar.gz
Marathon启动
cd /data/marathon-1.4.0nohup ./bin/start --master zk://172.20.4.238:2181,172.20.4.239:2181,172.20.4.244:2181/mesos --zk zk://172.20.4.238:2181,172.20.4.239:2181,172.20.4.244:2181/marathon &
Marathon配置
- 修改mesos-slave配置
echo 'docker,mesos' > /etc/mesos-slave/containerizersecho '5mins' > /etc/mesos-slave/executor_registration_timeout
Mesos的一个基础的组件称为containerizer。可以使用 –containerizers配置选项在Mesos slave上配置,目前包括两个containerizer:mesos和docker。mesos配置使用cgroups隔离和监视负载;docker配置调用Docker容器运行时,允许您在Mesos集群上启动已经编译好的镜像。
- 重启mesos-slave
先执行rm -f /usr/local/etc/mesos/slave/meta/slaves/latest(对应mesos-slave work_dir,This ensures agent doesn't recover old live executors.)
nohup mesos-agent --containerizers=docker,mesos --resources="ports(*):[8000-9000, 31000-32000]" --master=zk://172.20.4.238:2181,172.20.4.239:2181,172.20.4.244:2181/mesos --work_dir=/usr/local/etc/mesos/slave &
Marathon 验证
访问http://172.20.4.238:8080 (具体哪台marathon被选举为leader可以通过mesos控制台查看)
Marathon_lb安装配置
docker pull docker.io/mesosphere/marathon-lbdocker run -d --privileged -e PORTS=9090 --net=host docker.io/mesosphere/marathon-lb sse -m http://172.20.4.238:8080 -m http://172.20.4.239:8080 -m http://172.20.4.244:8080 --group externa
Docker
准备docker-tomcat镜像
基础镜像:centos7-X86_X64
docker run –ti –v /data/share:/mnt centos7-X86_X64 //创建容器,挂载共享盘,上传本地tomcat和jdk。docker commit –m “tomcat” container_id tomcat01tomcat01/latest,已安装tomcat和jdk1.8。tomcat地址:/data/apache-tomcat-7.0.57jdk1.8地址:/data/jdk1.8.0_131
构建dockerfile
vi dockerfileFROM tomcat01MAINTAINER wangzx3ENV JAVA_HOME /data/jdk1.8.0_131ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib ENV PATH $PATH:$JAVA_HOME/binENV CATALINA_HOME /data/apache-tomcat-7.0.57#CMD ["/usr/sbin/init"]#RUN systemctl stop firewalld.service#CMD ["/data/apache-tomcat-7.0.57/bin/catalina.sh","run"]CMD /data/apache-tomcat-7.0.57/bin/catalina.sh run
基于dockerfile构建新的镜像
cd /data/docker //dockerfile所在目录docker build –t tomcatnew .docker images //确认新的镜像tomcatnew创建结果。
注意:如果发布本地镜像,要确保镜像在所有mesos-slave节点上都存在。
基于Marathon发布Task
create application
create application创建
访问http://ssss5:31766 ,出现tomcat界面
mesos+marathon+docker相关推荐
- 云计算学习总结(1)——PaaS云平台部署之在Centos7搭建Mesos+Zookeeper+Marathon+Docker单机集群
----------------------------------------------------------------------------------- ========Mesos+Do ...
- 云计算学习总结(1)——PaaS云平台部署之在Centos7搭建Mesos+Zookeeper+Marathon+Docker单机集群...
----------------------------------------------------------------------------------- ========Mesos+Do ...
- Mesos + Marathon + Chronos + Docker环境安装
背景信息 组网: OS:CentOS7 bigdata01:Mesos(master),Marathon,Chronos,ZooKeeper bigdata02:docker mesos(slave) ...
- docker+mesos+marathon
鉴于原作者要求必须将原地址粘贴下 http://www.chuck-blog.com/chuck/368.html 前言 针对"互联网+"时代的业务增长.变化速度及大规模计算 ...
- 基于Docker搭建单机版Mesos/Marathon
摘要: 本文介绍了基于Docker搭建单机版Mesos/Marathon的方法,Mesos/Marathon的所有组件均运行于单个容器中. GitHub地址: kiwenlau/single-meso ...
- Mesos+Marathon搭建部署
实验环境 主机名 IP地址 运行服务 安装组件 mesos1 172.16.138.201 zookeeper mesos-master marathon mesos marathon mesosph ...
- Python项目容器化实践 - 编排方案: Mesos+Marathon
在生产环境中不用 Docker Compose 如果想在生产中使用容器,应该选择 21云盒子來部署 为什么呐?其实也蛮好理解的: Docker Compose 是单机版的开发套件,类似于容器环境下的 ...
- kubernetes 对比 mesos + marathon
1. 应用定义 k8s: 可以使用 Pod,部署和服务的组合来部署应用程序.一个 pod 是一组 位于同一节点的容器,是部署的原子单位.部署可以在多个节点上具有副本. 服务是容器工作负载的" ...
- 保姆级丨Mesos Marathon部署
0x00 前言 Mesos是以与Linux内核同样的原则而创建的,不同点仅仅是在于抽象的层面.Mesos内核运行在每一个机器上,同时通过 API 为各种应用提供跨数据中心和云的资源管理调度能力.这些应 ...
最新文章
- html5 list css,使用HTML5的classList属性操做CSS类
- day38 css的4种引入方式
- [USACO17JAN]Promotion Counting 题解
- 面试重点:设计模式(三)——工厂方法
- 使用线性回归识别sklearn中的手写数字digit
- [php]php设计模式 Facade(外观模式)
- 刹车时到底要不要踩离合器?
- 如何才能成为一个高效工作的软件工程师?
- 190510每日一句
- c++中类的默认构造函数,析构函数,拷贝构造函数
- linux 双mipii摄像头,Toybrick-开源社区-TB-RK3399ProD-imx258摄像头 mipi 错误
- 驱动单片机硬件调试器的一些开源库总结(包含stlink调试器)
- cuteftp下载文件变成macintosh格式
- 用C语言输入半径求球体的体积
- Quartus II 无法正常编译bug解决
- 总结:xshell的一些使用技巧
- xctf攻防世界 MISC高手进阶区 MISCall
- CSS选择器(随笔)
- 链接元宇宙,开启新纪元
- Java字符串模板替换(模板渲染)
热门文章
- CAS单点登录原理解析及相关配置
- 总有你挂不完的环保吊牌GRS/RCS/SCS/OBP/OCS/GOTS/……
- USB驱动程序(较详细)三
- 2020-08-15 java 8 LocalDateTime 20 例(有更新)
- mileiq使用蓝牙提高驱动器质量
- 【ROS-Gazebo】将sdf文件转为urdf的方法
- 柏楚电子晶晨股份正式在科创板上市 柏楚电子开盘价高达217元
- 如何用数组存储信息JAVA_从零自学Java-7.使用数组存储信息
- 容颜易老,情比金坚--感怀于人生的短暂
- WIN10 能够正常上网,但是桌面右下角却显示小地球,导致笔记本无法开移动热点