mesos+marathon+docker
目录ZookeeperZookeeper安装配置Zookeeper安装Zookeeper配置zookeeper启动MesosMesos实现原理Mesos 安装配置Mesos 安装Mesos的配置Mesos启动Mesos验证MarathonMarathon_lb集群结构Marathon安装配置Marathon安装Marathon...
目录
Zookeeper
Zookeeper安装配置
Zookeeper安装
上传zookeeper安装包直接解压即可.
zookeeper目录:/data/zookeeper
Zookeeper配置
- 生成zoo.cfg配置文件
cd /data/zookeeper/conf
mv 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/data
touch 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.2
mkdir build && cd build
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64
../configure
make –j 6
make 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/mesos
cat mesos-master-env.sh.template > mesos-master-env.sh
cat mesos-slave-env.sh.template > mesos-slave-env.sh
cat 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验证
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 /data
tar –zxvf marathon-1.4.0.tar.gz
Marathon启动
cd /data/marathon-1.4.0
nohup ./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/containerizers
echo '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-lb
docker 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 tomcat01
tomcat01/latest,已安装tomcat和jdk1.8。
tomcat地址:/data/apache-tomcat-7.0.57
jdk1.8地址:/data/jdk1.8.0_131
构建dockerfile
vi dockerfile
FROM tomcat01
MAINTAINER wangzx3
ENV JAVA_HOME /data/jdk1.8.0_131
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib
ENV PATH $PATH:$JAVA_HOME/bin
ENV 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界面
更多推荐
所有评论(0)