Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos可以在一样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,能够扩展伸缩到数千个节点。Mesos已经被Twitter用来管理它们的数据中心。
Mesos中的基本术语解释:java
1)Mesos-master:主要负责管理各个framework和slave,并将slave上的资源分配给各个framework
2)Mesos-slave:负责管理本节点上的各个mesos-task,好比:为各个executor分配资源
3)Framework:计算框架,如:Hadoop,Spark等,经过MesosSchedulerDiver接入Mesos
4)Executor:执行器,安装到mesos-slave上,用于启动计算框架中的task。python
ZooKeeper是用来给集群服务维护配置信息,域名服务,提供分布式同步和提供组服务。全部这些类型的服务都使用某种形式的分布式应用程序。ZooKeeper是一个分布式的,开放源码的协调服务,是的Chubby一个的实现,是Hadoop和Hbase的重要组件。linux
ZooKeeper角色:nginx
领导者(leader):领导者负责投票发起和决议,更新系统状态
跟随者(follwoer):follower用于接收客户请求并向客户端返回结果,在选主过程当中参与投票
观察者:ObServer能够接受客户端链接,将写请求转发给leader节点,但ObServer不参加投票过程,只同步leader的状态,ObServer的目的是为了拓展系统,提升读取速度。
客户端:请求发起方web
ZooKeeper同步流程:docker
选完leader之后,zookeeper就进入状态同步过程。
1)leader等待server链接;
2)Follower链接leader,将最大的zxid发送给leader;
3)Leader根据follower的zxid肯定同步点;
4)完成同步后通知follower 已经成为uptodate状态;
5)Follower收到uptodate消息后,又能够从新接受client的请求进行服务了。apache
配置JAVA环境json
# cat /etc/redhat-release //查看Linux版本 # uname -r //查看内核版本(须要内核3.10以上) # tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ # cd /usr/local/ # mv jdk1.8.0_91/ java # vim /etc/profile export JAVA_HOME=/usr/local/java export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
添加apache-maven源vim
# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
配置WANdiscoSVN网络源centos
# vim /etc/yum.repos.d/wandisco-svn.repo [WANdiscoSVN] name=WANdisco SVN Repo 1.9 enabled=1 baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/ gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
配置Mesos环境变量
# vim /etc/profile export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so # source /etc/profile
添加依赖包
# yum install -y apache-maven python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel
安装开发工具
# yum groupinstall -y "Development Tools"
构建Mesos
# wget http://archive.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz # tar zxvf mesos-0.25.0.tar.gz -C /opt/ # mv mesos-0.25.0/ /root/ # cd /root/mesos-0.25.0 # mkdir build # cd build # ../configure # make //等待时间长 且不能断网 前面的环境包不能少 # make check # make install
因为安装时间太长 此处直接克隆四台
Column 1 | Column 2 | Column 3 |
---|---|---|
master1 | 192.168.200.128 | jdk、mesos、zookeeper、marathon |
master2 | 192.168.200.137 | jdk、mesos、zookeeper、 |
master3 | 192.168.200.138 | jdk、mesos、zookeeper、 |
slave1 | 192.168.200.139 | jdk、mesos、zookeeper、docker |
slave2 | 192.168.200.140 | jdk、mesos、zookeeper、docker |
分别给主机命名
# hostnamectl set-hostname master1 (其余四台: maste二、 maste三、slave一、slave2) # bash # vim /etc/hosts (全部主机同步) 192.168.200.128 master1 192.168.200.137 master2 192.168.200.138 master3 192.168.200.139 slave1 192.168.200.140 slave2
全部master
# wget https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz # tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/ # cd /home/q/zookeeper-3.4.10/ # mv conf/zoo_sample.cfg conf/zoo.cfg # ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master //给启动脚本添加环境变量
在master1中操做
# cd /home/q/zookeeper-3.4.10/conf # vim zoo.cfg dataDir=/home/q/zookeeper-3.4.10/data //修改zookeeper数据文件存放目录 dataLogDir=/home/q/zookeeper-3.4.10/datalog //zookeeper日志存放目录 server.1=192.168.200.128:2888:3888 //数字1,2,3表示这个是第几号服务器(是上面myid文件里对应的数字);中间的是master主节点的ip地址 server.2=192.168.200.137:2888:3888 //第一个端口2888(这个端口能够本身定义)表示的是这个服务器与集群中的 Leader 服务器交换信息的端口 server.3=192.168.200.138:2888:3888 //第二个端口3888表示的是万一集群中的 Leader 服务器挂了,须要一个端口来从新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通讯的端口。 //把配置文件传输给其余maste # scp zoo.cfg 192.168.200.137:/home/q/zookeeper-3.4.10/conf/ # scp zoo.cfg 192.168.200.138:/home/q/zookeeper-3.4.10/conf/
在master1主机上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 1 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //开启zookeeper服务 # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.128:2181/mesos --quorum=2 //启动mesos
在master2主机上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 2 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //开启服务 # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.137:2181/mesos --quorum=2
在master3主机上操做(/home/q/zookeeper-3.4.10/中)
# mkdir data datalog # echo 3 > data/myid # ./bin/zkServer.sh start conf/zoo.cfg //开启服务 # mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.200.138:2181/mesos --quorum=2
安装docker而且启动
# yum install docker -y # systemctl start docker.service # systemctl enable docker.service //开启slave-mesos # ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave # mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --no-hostname_lookup --ip=0.0.0.0
会自动跳转到被指定为leader的主机IP上去
# cd /home/q/zookeeper-3.4.10/ # ./bin/zkServer.sh status
Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来建立和管理应用。marathon是一个mesos框架,可以支持运行长服务,好比web应用等,它是集群的分布式Init.d,可以原样运行任何Linux二进制发布版本,如Tomcat Play等等,能够集群的多进程管理。也是一种私有的Pass,实现服务的发现,为部署提供提供REST API服务,有受权和SSL、配置约束,经过HAProxy实现服务发现和负载平衡。
# wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz # tar zxvf marathon-0.15.2.tgz -C /home/q/ # cd /home/q/marathon-0.15.2/ # ./bin/start --hostname 192.168.200.128 --master zk://192.168.200.128:2181,192.168.200.137:2181,192.168.200.138:2181/mesos --http_address 0.0.0.0
测试
浏览器输入:http://192.168.200.128:8080/
建立一个test的任务
而后去mesos网页查看:http://192.168.200.128:5050/
能够看到任务已经分配给slave1 和slave2
查看执行事件相关信息
# cd /home/q/mesos/data/slaves/7cc2e8e7-ad03-46a6-a38d-ae1b92c78319-S0/frameworks/d82f2603-f357-4025-9574-7c511c0f435e-0000/executors # cd test.f99a7592-a099-11e8-a6b5-52540011572d/runs/latest //标准错误和标准输出信息 stderr stdout //查看输出字符串 cat stdout ---------------显示如下内容--------------------------- Registered executor on 192.168.200.138 Starting task test.f99a7592-a099-11e8-a6b5-52540011572d sh -c 'echo "hello world"' hello world Forked command at 3493 Command exited with status 0 (pid: 3493)
# vim nginx.json { "id":"/nginx", //应用的惟一ID "container":{ //marathon启动docker格式 "type":"DOCKER", "docker":{ "image":"nginx", //nginx镜像 "network":"HOST", //网络为HOST模式 "parameters":[], "privileged":false, "forcePullImage":false //是否强制更新镜像 } }, "cpus":0.1, "mem":32.0, "instances":1 } # curl -X POST -H "Content-type:application/json" http://192.168.200.128:8080/v2/apps -d@nginx.json //发送json文件给marathon
下载完成后
输入镜像下载完成的slave 地址: 192.168.200.139