概述
Apache Mesos 是一款基于多资源 (内存, 磁盘, CPU, 端口等) 调度的开源集群管理套件, 能使容错和分布式系统更加容易.
工作原理
Apache Mesos 采用了 Master/Slave 结构来简化设计, 将 Master 做得尽可能轻量级, 仅保存了各种计算框架 (Framework) 和 Mesos Slave 的状态信息, 这些状态很容易在 Mesos 出现故障的时候被重构, 除此之外 Mesos 还可以使用 Zookeeper 解决 Master 单点故障问题.
Mesos Master 充当全局资源调度器角色, 采用某种策略算法将某个 Slave 上的 空闲资源分配给某个 Framework, 而各种 Framework 则是通过自己的调度器向 Master 注册进行接入. Mesos Master 则是收集任务状态和启动各个 Framework 的 Executor. 工作原理如图所示:
Apache Mesos 基本术语
Mesos master: 负责管理各个 Framework 和 Slave, 并将 Slave 上的资源分配给各个 Framework.
Mesos Slave: 负责管理本节点上的各个 Mesos Task, 为各个 Executor 分配资源.
Framework: 计算框架, 如: Hadoop,Spark 等, 可以通过 MesosSchedulerDiver 接入.
Executor: 执行器, 在 Master Slave 上安装, 用于启动计算框架中的 Task.
实验要求
1. 必须使用 CentOS7 系统, 需要内核为 3.10 及以上
2. 虚拟机内存必须是 2GB 及以上
实验环境表
主机名 | IP 地址 | 安装软件包 |
---|---|---|
master | 192.168.126.156 | mesos-0.25.0.tar.gz;jdk-8u91-linux-x64.tar.gz |
slave | 192.168.126.160 | mesos-0.25.0.tar.gz;jdk-8u91-linux-x64.tar.gz; docker |
安装步骤
1. 配置 Java 环境
- [root@localhost ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ #解包
- [root@localhost ~]# cd /usr/local/
- [root@localhost ~]# mv jdk1.8.0_91/ java #重命名
- [root@localhost ~]# 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
- [root@localhost ~]# source /etc/profile
2. 安装相关环境
1)安装开发工具
[root@localhost ~]# yum groupinstall -y "Development Tools"
2)添加 apache-maven 源, 为 Mesos 提供项目管理和构建自动化工具的支持.
[root@localhost ~]# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
3)安装相关依赖包
[root@localhost ~]# 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
4)配置 WANdiscoSVN 网络源
[root@localhost ~]# 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
3. 配置 Mesos 环境变量
[root@localhost ~]# vim /etc/profile
在行尾添加以下内容
- export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
- export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
- [root@localhost ~]# source /etc/profile
4. 构建 Mesos
这里使用源编码方式编译安装 Mesos
- [root@localhost ~]# wget http://www.apache.org/dist/mesos/0.25.0/mesos-0.25.0.tar.gz
- [root@localhost ~]# tar zxvf mesos-0.25.0.tar.gz -C /opt/
- [root@localhost ~]# cd /opt/mesos-0.25.0/
- [root@localhost ~]# mkdir build
- [root@localhost ~]# cd build/
- [root@localhost ~]# ../configure
- [root@localhost ~]# make #等待时间较长(网络在线状态)
- [root@localhost ~]# make install
安装 Mesos 时间较长, 故实验环境安装一台 Mesos 后其余克隆即可.
配置单台 Mesos-Master 与 Mesos-Slave
1. 配置 Mesos-master
1)Mesos-master 负责维护 slave 集群的心跳, 从 slave 提取资源信息. 配置之前应先做好相应的解析工作.
- [root@localhost ~]# hostnamectl set-hostname master #更改主机名称为 master
- [root@localhost ~]# init 6 #重启虚拟机
- [root@master ~]# vim /etc/hosts
- 192.168.126.156 master
- 192.168.126.160 slave
- [root@master ~]# ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master #建立软链接
2)简配启动 Mesos-master
[root@master ~]# mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0
减配参数:
--work_dir : 运行期数据存放路径, 包含了 sandbox,slave,meta 等信息, 建议修改.
--log_dir :Mesos 日志存放路径, 建议修改.
--no-hostname_lookup : 是否从 DNS 获取主机名, 本例中关闭了此配置, 直接显示 IP.
--ip :Mesos 进程绑定的 IP.
3)配置完成后可以使用浏览器访问本地的 5050 端口进行验证, 如图 1 所示:
2. 配置 Mesos-Slave
1)Mesos-Slave 负责接收并执行来自 Mesos-master 传递的任务以及监控任务状态, 收集任务使用系统的情况, 配置之前也应先做好相应的解析工作.
- [root@localhost ~]# hostnamectl set-hostname slave #更改主机名称为 master
- [root@localhost ~]# init 6 #重启虚拟机
- [root@master ~]# vim /etc/hosts
- 192.168.126.156 master
- 192.168.126.160 slave
- [root@slave ~]# ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave #建立软链接
2)在 Mesos-Slave 端安装并启动 Docker 容器
- [root@slave ~]# yum install docker -y
- [root@slave ~]# systemctl start docker.service
- [root@slave ~]# systemctl enable docker.service
3)简配启动 Mesos-Slave
[root@slave ~]# mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.126.156:5050 --no-hostname_lookup --ip=0.0.0.0
4)关闭 Mesos-master 防火墙后使用浏览器再次对 Master 的 5050 端口进行验证, 在 Mesos web 页面左侧可以看到 Slave 的状态, 如图 1.1 所示:
5)点击菜单栏中的 Slaves 链接, 可以查看到 Slave 主机的硬件信息与注册时间, 如图 1.2 所示:
3. 单台 Mesos-master 配置 ZooKeeper
ZooKeeper 是 一个开源的分布式应用程序协调服务, 可以为分布式应用提供一致性服务软件, 提供的功能包括: 配置维护, 域名服务, 分布式同步, 组服务等.
ZooKeeper 的目的就是将复杂易出错的关键服务进行封装, 提供给用户性能高效, 功能稳定, 简单易用的系统.
1)下载 ZooKeeper 后, 只需要将配置文件模板进行改名即可使用.
- [root@master ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
- [root@master ~]# tar zxvf zookeeper-3.4.6.tar.gz -C /home/q/
- [root@master ~]# cd /home/q/zookeeper-3.4.6/
- [root@master zookeeper-3.4.6]# mv conf/zoo_sample.cfg conf/zoo.cfg
2)启动 ZooKeeper 服务
- [root@master zookeeper-3.4.6]# ./bin/zkServer.sh start conf/zoo.cfg
- JMX enabled by default
- Using config: conf/zoo.cfg
- Starting zookeeper ... STARTED
3)单机模式的 ZooKeeper 处于 standalone 状态
- [root@master zookeeper-3.4.6]# ./bin/zkServer.sh status conf/zoo.cfg
- JMX enabled by default
- Using config: conf/zoo.cfg
- Mode: standalone
4)在 ZooKeeper 服务启动以后, 就可以使用 ZooKeeper 的客户端来连接测试.
- [root@master zookeeper-3.4.6]# ./bin/zkCli.sh
- Connecting to localhost:2181
- 2018-08-15 22:16:03,625 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.6-1569965, built on 02/20/2014 09:09 GMT
- 2018-08-15 22:16:03,631 [myid:] - INFO [main:Environment@100] - Client environment:host.name=master
- .....// 省略
- [zk: localhost:2181(CONNECTED) 1] ls / #查看根节点
- [zookeeper]
4. 后台运行 Mesos-master 与 Mesos-slave
ZooKeeper 简称为 zk, 在整个 Apache Mesos 中, 主要用来存储 Mesos-master 地址, 方便 Mesos-slave 读取. 当 Mesos-slave 从 zk 中获取地址后, 可直接使用 Mesos-master 地址以及端口连接 Mesos-master.
1)nohup 命令可以忽略所有挂断 (SIGHUP) 信号, 作为后台程序运行 Mesos-master 与 Mesos-slave.
- [root@master ~]# nohup 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.126.163:2181/mesos --quorum=1 &>/dev/null &
- [1] 3272
配置参数:
--zk :ZooKeeper 地址, 用于 Leader 选举. 指定 zk 端口号
--zk_session_timeout : 根据网络环境调整 zk session 超时时间(默认 10s).
--quorum :Master replica logs 多写数量, 多 Master 场景下此值要超过 Master 数量的一半.
--credential : 提供密钥对, 介入集群时用于验证.
2)此时, Mesos-slave 使用 zk 地址和端口号连接 Mesos-master.
- [root@slave ~]# nohup mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs--master=zk://192.168.126.163:2181/mesos --no-hostname_lookup --ip=0.0.0.0 &>/dev/null &
- [1] 3996
3)使用浏览器进行验证, 如图 1.3 所示:
来源: http://blog.51cto.com/13642258/2161093