目录

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/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可以接受整个、部分或者拒绝这个资源邀约。如下图所示:

  1. 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.
  2. The master sends a resource offer describing what is available on agent 1 to framework 1.
  3. 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.
  4. 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验证

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 /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界面

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐