内容简介:Apache Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点。Apache Mesos主从服务器调度资源的顺序为首先由Mesos主服务器查询可用资源给调度器,第二步调度器向主服务器发出加载任务,主服务器再传达给从服务器,从服务器向执行器命令加载任务执行,执行器执行任务以后,将状态反馈上报给从服务器,最终告知调度器 。Apache Mesos主服务器使用Zookeeper
Apache Mesos
Apache Mesos能够在同样的集群机器上运行多种分布式系统类型,更加动态有效率低共享资源。提供失败侦测,任务发布,任务跟踪,任务监控,低层次资源管理和细粒度的资源共享,可以扩展伸缩到数千个节点。
Mesos调度顺序
Apache Mesos主从服务器调度资源的顺序为首先由Mesos主服务器查询可用资源给调度器,第二步调度器向主服务器发出加载任务,主服务器再传达给从服务器,从服务器向执行器命令加载任务执行,执行器执行任务以后,将状态反馈上报给从服务器,最终告知调度器 。
高可用性与恢复
Apache Mesos主服务器使用Zookeeper进行服务选举和发现。它有一个注册器记录了所有运行任何和从服务器信息,使用MultiPaxos进行日志复制实现一致性。
Apache Mesos有一个从服务器恢复机制,无论什么时候一个从服务器死机了,用户的任务还是能够继续运行,从服务器会将一些关键点信息如任务信息 状态更新持久化到本地磁盘上,重新启动时可以从磁盘上恢复运行这些任务(类似 Java 中的钝化和唤醒)。
Marathon
它是一个mesos框架,能够支持运行长服务,比如web应用等。是集群的分布式Init.d,能够原样运行任何 Linux 二进制发布版本,如Tomcat Play等,可以集群的多进程管理。也是一种私有的Pass,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。
架构图
Apache Mesos框架是一个在Mesos上运行分布式应用的应用程序,它有两个组件:
调度器 :与Mesos交互,订阅资源,然后在mesos从服务器中加载任务;
执行器 :从框架的环境变量配置中获得信息,在mesos从服务器中运行任务;
系统环境
主机名 | IP地址 | 安装软件包 |
---|---|---|
master | 192.168.96.46 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz、marathon-0.15.2.tgz |
master1 | 192.168.96.47 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz |
master2 | 192.168.96.48 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、zookeeper-3.4.10.tar.gz |
slave | 192.168.96.49 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker |
slave1 | 192.168.96.50 | jdk-8u144-linux-x64.tar.gz、mesos-0.25.0.tar.gz、docker |
1.查看Linux版本
cat /etc/redhat-release
2.查看内核版本(需要内核3.10及以上)
uname -r
3.所有节点关闭防火墙及Selinux
setenforce 0 systemctl stop firewalld.service
4. 相关软件包 密码:9c0g
开始部署
配置java环境及相关环境
1.解压jdk软件包
tar zxvf jdk-8u144-linux-x64.tar.gz -C /usr/local/
2.配置jdk环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_144 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
3.重新加载环境变量
source /etc/profile
4.检查java版本信息
java -version
5.安装开发工具
yum groupinstall -y "Development Tools"
6.添加apache-maven源
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
7.配置WANdiscoSVN网络源
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
8.安装相关依赖包
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
安装Mesos
1.配置Mesos环境变量
vim /etc/profile
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
2.重新加载系统环境
source /etc/profile
3.安装Mesos软件包
#下载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/ #移动至/root目录下 mv mesos-0.25.0/ /root/ #进入mesos安装目录 cd /root/mesos-0.25.0 #新建build目录并进入 mkdir build cd build #配置 ../configure #编译(编译时间较长) make #检查 make check #安装 make install
以上步骤请分别部署于五台服务器上
配置master、master1、master2节点
1.分别设置各master节点主机名
#master节点: hostnamectl set-hostname master #master1节点: hostnamectl set-hostname master1 #master2节点: hostnamectl set-hostname master2
2.修改本地hosts文件(所有节点相同)
vim /etc/hosts
192.168.96.46 master 192.168.96.47 master1 192.168.96.48 master2 192.168.96.49 slave 192.168.96.50 slave1
3.建立软链接,方便mesos-master使用
ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master
配置slave、slave2节点
1.分别设置各slave节点主机名
#slave节点: hostnamectl set-hostname slave #slave1节点: hostnamectl set-hostname slave1
2.修改本地hosts文件(所有节点相同)
vim /etc/hosts
192.168.96.46 master 192.168.96.47 master1 192.168.96.48 master2 192.168.96.49 slave 192.168.96.50 slave1
这里请重启系统,使其以上修改生效
3.建立软链接,方便mesos-slave使用
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave
4.安装 docker 软件
yum install docker -y
5.加入系统管理并启动docker
systemctl start docker.service systemctl enable docker.service
6.zookeeper/bin添加到系统环境变量
echo "export PATH=/home/q/zookeeper-3.4.10/bin:$PATH" >> /etc/profile
7.重新加载系统环境变量
source /etc/profile
8.启动各节点的zookeeper服务
master
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
master1
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
master2
zkServer.sh start /home/q/zookeeper-3.4.10/conf/zoo.cfg
9.查看各节点的zookeeper状态
zkServer.sh status
master:
master1:
master2:
master、master1、master2节点安装zookeeper服务
1.安装zookeeper
#解压缩 tar zxvf zookeeper-3.4.10.tar.gz #移动至/home/q目录下 mv zookeeper-3.4.10 /home/q/ #进入zookeeper目录 cd /home/q/zookeeper-3.4.10/
以下在master节点操作
1.复制配置文件模板
mv conf/zoo_sample.cfg conf/zoo.cfg
2.配置zookeeper
vim conf/zoo.cfg
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/home/q/zookeeper-3.4.10/data //修改 dataLogDir=/home/q/zookeeper-3.4.10/datalog //修改 # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 server.1=192.168.96.46:2888:3888 //添加master节点 server.2=192.168.96.47:2888:3888 //添加master1节点 server.3=192.168.96.48:2888:3888 //添加master2节点
3.发送给master1、master2节点
scp conf/zoo.cfg 192.168.96.47:/home/q/zookeeper-3.4.10/conf/ scp conf/zoo.cfg 192.168.96.48:/home/q/zookeeper-3.4.10/conf/
4.master节点
4.1.新建data、datalog目录
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
4.2.创建myid文件
echo 1 > data/myid
4.3.验证myid值
cat data/myid
5.master1节点
5.1.新建data、datalog目录
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
5.2.创建myid文件
echo 2 > data/myid
5.3.验证myid值
cat data/myid
6.master2节点
6.1.新建data、datalog目录
cd /home/q/zookeeper-3.4.10/ mkdir data mkdir datalog
6.2.创建myid文件
echo 3 > data/myid
6.3.验证myid值
cat data/myid
7.分别启动三个master节点的zookeeper服务
master:
./bin/zkServer.sh start conf/zoo.cfg
master1:
./bin/zkServer.sh start conf/zoo.cfg
master2:
./bin/zkServer.sh start conf/zoo.cfg
8.查询各节点zookeeper状态(master主机为Leader状态、其他主机为Follower状态)
8.1.master:
./bin/zkServer.sh status
8.2.master1:
./bin/zkServer.sh status
8.3.master2:
./bin/zkServer.sh status
9.只在Master中部署Marathon
Marathon是一个Mesos框架,能够支持运行长服务,比如web应用的等.
#下载 wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz #解压缩 tar zxvf marathon-0.15.2.tgz -C /home/q/ #进入maratchon目录 cd /home/q/marathon-0.15.2/
10.启动master节点的Marathon服务(IP:8080)
/home/q/marathon-0.15.2/bin/start --hostname 192.168.96.46 --master zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos
11. 访问http://192.168.96.46:8080, 如下图
11.分别启动三个master节点
master:
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.96.46:2181/mesos --quorum=2
master1:
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.96.47:2181/mesos --quorum=2
master2:
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.96.48:2181/mesos --quorum=2
12.分别启动slave、slave1的slave服务
mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.96.46:2181,192.168.96.47:2181,192.168.96.48:2181/mesos --no-hostname_lookup --ip=0.0.0.0
访问Mesos , http://192.168.96.47:5050
使用Marathon创建测试任务test1
使用Marathon创建docker容器
通过Marathon API的形式创建Docker的Nginx任务
1.使用json创建任务
> vim nginx.json
{ "id":"/nginx", //ID名称 "container":{ "type":"DOCKER", "docker":{ "image":"nginx", //nginx镜像 "network":"HOST", //网络模式为HOST "parameters":[], "privileged":false, "forcePullImage":false //不强制更新镜像 } }, "cpus":0.1, "mem":32.0, "instances":1 }
2.上传nginx.json任务到Marathon
curl -X POST -H "Content-type:application/json" http://192.168.96.46:8080/v2/apps -d@nginx.json
3.在slave1上查询,可以查看到nginx正在下载
ps aux | grep docker
root 3668 0.0 0.6 121912 12872 pts/0 Sl+ 10:20 0:00 /usr/bin/docker-current -H unix:///var/run/docker.sock pull nginx:latest docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest c82521676580 3 weeks ago 109 MB
4.查看所有镜像信息,已经在运行中了
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1140fbfdb9f6 nginx "nginx -g 'daemon ..." 5 minutes ago Up 5 minutes mesos-a0b5fe43-dfab-4b7e-8a1f-df205371dffd-S0.0b72cb40-29e6-4d6b-a266-6f61c77f6951 a07783adf66d docker.io/centos "/bin/bash" 8 hours ago Exited (0) 8 hours ago optimistic_austin 6dfc71a1c5bd nginx "nginx -g 'daemon ..." 8 hours ago Created ecstatic_euclid f5df1d3fef2a 015566d5b844 "/bin/sh -c 'yum -..." 9 hours ago Exited (1) 9 hours ago eloquent_davinci 02fb081e0119 015566d5b844 "/bin/sh -c 'yum -..." 9 hours ago Exited (1) 9 hours ago confident_brahmagupta
5.访问Mesos、Marathon管理平台查看任务,如下
6.访问测试 http://192.168.175.153/,nginx容器已经运行成功了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- docker部署rabbitmq集群
- 部署Ceph集群--jluocc
- 部署高可用Kubernetes集群
- Eureka使用及集群部署
- 使用Docker部署RabbitMQ集群
- GreenPlum 5.10.0 集群部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java 8实战
厄马(Raoul-Gabriel Urma)、弗斯科(Mario Fusco)、米克罗夫特(Alan Mycroft) / 陆明刚、劳佳 / 人民邮电出版社 / 2016-4-1 / CNY 79.00
本书全面介绍了Java 8 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了函数式的编程特性,可以让代码更简洁,同时也能自动化地利用多核硬件。全书分四个部分:基础知识、函数式数据处理、高效Java 8 编程和超越Java 8,清晰明了地向读者展现了一幅Java 与时俱进的现代化画卷。一起来看看 《Java 8实战》 这本书的介绍吧!