Apache Mesos官方文档只提供了源码安装方式,然而我尝试了几次,总是在某些阶段报错。而通过搜索引擎搜到的其他办法,也多少会遇到一些莫名其妙的错误。所以根据自己尝试的结果,整理了一个简单的方法。
1,添加yum仓库
rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
2,安装zookeeper
yum -y install mesosphere-zookeeper
如有现成zookeeper可以直接用,也可以自行从apache下载zookeeper。
3,安装mesos
yum -y install mesos
4,docker
yum -y install docker
如果如果不使用docker作为容器,可以不安装docker。
5,启动zookeeper
systemctl start zookeeper
通过yum安装的zookeeper自带默认配置文件,可以直接启动。
6,配置zookeeper地址
echo "zk://127.0.0.1:2181/mesos" > /etc/mesos/zk
用于master实现高可用和master与slave交互
7,配置master启动参数
//master工作路径,存储集群持久化信息的。如果不配,启动会报错。
//安装后已经自动配置为/var/lib/mesos
echo /var/lib/mesos/master > /etc/mesos-master/work_dir
//master集群保持高可用的最少实例数。通常设置为大于master实例数量的大多数且为基数,当前只有一个实例,所以配置为1。
//如果参数registry设置为in_memory,表示集群持久化信息存储在内存中,即standalone模式时,可以不配置,否则无法启动。
//安装后已经自动配置为1
echo 1 > /etc/mesos-master/quorum
//master监听地址,必须配置,否则其他机器无法连通
echo 172.18.21.192 > /etc/mesos-master/ip
8,启动mesos-master
systemctl start mesos-master
9,浏览器打开master地址http://192.168.2.151:5050,即可看到mesos web页面
10,配置slave启动参数
//slave支持的容器类型,可选mesos(基于LXC实现的资源隔离)和docker(需安装docker),默认mesos
echo docker,mesos > /etc/mesos-slave/containerizers
//slave的工作目录,用于executor保存sandboxe和故障转移检查点
//安装后已经自动配置为/var/lib/mesos
echo /var/lib/mesos > /etc/mesos-slave/work_dir
11,启动mesos-slave
systemctl start mesos-slave
12,此时可以在mesos web页面点击Agents,就可以看到mesos已经发现了slave。新版名字从slave改成了agent,但命令名字都没改,不知道为什么。
安装完成。
有几点补充:
1,如果配置了支持docker容器,必须安装dokcer,否则slave启动会报错。
2,如果zookeeper是集群,需要把zk地址配置为:
echo "zk://192.168.2.151:2181,192.168.2.152:2181,192.168.2.153:2181/mesos" > /etc/mesos/zk
3,要搭建master集群,只需把各个master节点配置相同的zookeeper地址,并把quorum设置为对应值,如有三个master节点,需要在每个机子上执行:
echo 2 > /etc/mesos-master/quorum
4,曾经遇到过master一直报slave丢失,猜测可能跟mesos版本或者操作系统网络配置有关,配置一下slave监听地址就解决了:
echo 192.168.2.151 > /etc/mesos-master/ip
5,在某些操作系统使用systemctl启动slave可能会报错,可以直接使用命令启动。参数可以执行mesos-slave --help查看,master同理:
mesos-slave --master=zk://127.0.0.1:5050/mesos --log_dir=/var/log/mesos --containerizers=docker,mesos --work_dir=/etc/mesos-slave/work_dir
6,实际上用systemctl命令启动服务,是通过/usr/bin/mesos-init-wrapper脚本读取配置文件,最终调用mesos-master或mesos-slave命令启动,详情可以查看脚本内容。
7,slave启动不了可以尝试执行rm -f /var/lib/mesos/meta/slaves/latest解决。