Apache Mesos(3)-Mesos的安装和配置
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
前面的文章对Mesos的架构和基本概念做了简单的介绍,下面我们来看看怎样安装和配置一个Mesos cluster。虽然目前有很多的配置管理工具或者现成的docker镜像可用,但是使用公共可获取的安装包或者从源代码配置、编译你自己的安装包进行Mesos的安装,对于理解怎样部署Mesos是非常重要的。
Mesos集群的组件
- 必须-一个或多个Mesos masters。(如果master的数量大于1,则必须是奇数个。)
- 必须-一个或多个Mesos slaves。(通常来说,集群中节点的数目越多越好。)
- 可选-一个由一台或者多台机器组成的ZooKeeper集群。只有部署高可用的Mesos集群时才需要。(如果ZooKeeper节点的数量大于1,则必须是奇数个。)
- 可选-在每个Mesos slave节点上安装有Docker引擎。
Mesos开发环境的配置
如果你需要安装配置开发环境,将Mesos各种组件全部安装到一台机器,一个比较简单的方法就是使用现成的Playa Mesos项目。假如你已经有了一个可以运行的Vagrant软件,则使Mesos开发环境运行起来是非常简单的:
$ git clone https://github.com/mesosphere/playa-mesos
$ cd playa-mesos
$ vagrant up --provision
更多信息可以参考Playa Mesos project。
安装Mesos和ZooKeeper
由于Mesos安装的方式和支持的操作系统非常多,我们这里只考虑两种安装Mesos和ZooKeeper的安装方式:
- 使用操作系统的包管理器
- 从源代码编译,然后安装编译后的二进制可执行文件
使用包管理器安装Mesos
RHEL/CENTOS 7
首先下载rpm安装包,用来添加Mesosphere的源:
$ sudo rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm
在添加了安装源后,需要在master和slave上安装Mesos的包。
在master上,同时需要安装Mesosphere’s ZooKeeper的包:
$ sudo yum -y install mesos mesosphere-zookeeper
在slave上,运行如下命令安装Mesos:
$ sudo yum -y install mesos
UBUNTU 14.04 (TRUSTY)
与在CentOS上安装类似,先添加安装源,之后在各个节点上安装Mesos的包。首先添加Mesosphere的key和源:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
$ echo "deb http://repos.mesosphere.io/ubuntu trusty main" |sudo tee /etc/apt/sources.list.d/mesosphere.list
$ sudo apt-get update
在master上,同时安装ZooKeeper:
$ sudo apt-get install mesos=0.22.2-0.2.62.ubuntu1404 zookeeperd
在slave上,运行如下命令安装Mesos:
$ sudo apt-get install mesos=0.22.2-0.2.62.ubuntu1404
从源代码编译、安装Mesos
当你需要更改Mesos编译配置或者需要其它功能时,就需要使用编译安装的方法。关于编译安装,Mesos的官方网站上有详细的介绍,这里不再赘述。
在Mesos的官方网站上,有如何进行编译安装的详细信息,请参考http://mesos.apache.org/gettingstarted/.
Mesos完整的编译配置选项列表,可以在Mesos项目的文档部分查询到:http://mesos.apache.org/documentation/latest/configuration/。
配置Mesos和ZooKeeper
ZooKeeper的配置
假设我们安装了3个ZooKeeper节点,如果是通过包管理器进行的安装,配置文件应该在/etc/zoo-keeper/conf/zoo.cfg。该配置文件中已经有了基本的配置这注释,我们只需要将完成的ZooKeeper服务器和端口号加入到配置文件中。
server.1=mesos-master-1.example.com:2888:3888
server.2=mesos-master-2.example.com:2888:3888
server.3=mesos-master-3.example.com:2888:3888
上面的配置给每个服务器指定了一个唯一的ID,如:server.1,server.2等。另外,在每台机器上,需要在/var/lib/zookeeper下创建一个文件myid文件,这个文件里的唯一的内容应为1到255的整数,代表着某一个ZooKeeper节点的唯一ID。使用如下命令: echo 1| sudo tee /var/lib/zookeeper/myid在server.1上创建此文件,在其它服务器运行只需把1改为对应的ID号。
需要注意的是,在某个节点上,在myid文件中配置的ID号必须与在zoo.cfg文件中指定的ID号一致。
- 启动服务
以上是必须的几乎最少的配置,不过也足够使集群启动并且给客户提供服务。
如果是使用的包管理器安装的服务,可以使用如下命令启动服务:service zookeeper start。
当服务启动完成后,我们可以使用Netcat来检查ZooKeeper服务的健康状态:
$ echo ruok | nc 127.0.0.1 2181
imok
如果上面的命令返回imok,说明ZooKeeper启动正常,可以为Mesos集群提供服务了。
关于ZooKeeper的更多信息,可以参阅ZooKeeper管理员指南。
Mesos的配置
根据Mesos安装方式的不同,配置Mesos也有多种方式:
- 基于文件-当使用包管理器安装时,配置文件一般都在/etc/mesos、/etc/mesos-master及/etc/mesos-slave这几个位置。
- 基于环境变量-不管是包管理器安装还是编译安装,都可以使用基于环境变量的配置。在mesos-master或mesos-slave启动时,会读取这些环境变量的值。例如: MESOS_zk=”zk://…”。
- 基于命令行参数-配置值可以以参数的形式传递给mesos-master或mesos-slave可执行程序或service脚本。例如: mesos-master –zk=zk://…。
master的配置
为了使master正常工作,有三个必须配置的变量:ZooKeeper URL(zk),quorum,和work_dir。
ZooKeeper URL以如下方式指定:
zk://mesos-master-1.example.com:2181,mesos-master-2.example.com:2181,mesos-master-3.example.com:2181/mesos
- quorum(法定人数):需要大于master数目的1/2。
- work_dir(工作目录):此目录用于Mesos master的工作目录,没有默认设置,/var/lib/mesos是一个较好的选择。
如果把上面的配置都作为环境变量,可以使用类似于如下的命令:
$ export MESOS_zk=zk://mesos-master-1.example.com:2181,mesos-master-2.example.com:2181,mesos-master-3.example.com:2181/mesos
$ export MESOS_quorum=2
$ export MESOS_work_dir=/var/lib/mesos
$ export MESOS_log_dir=/var/log/mesos
slave的配置
为了使slave正常工作,有两个必须配置的变量:master和work_dir。
- master:它的值配置为ZooKeeper URL(zk),用于Mesos slave探测哪个是leading master并且连接到那。配置的方式同上。
- work_dir(工作目录):此目录作为Mesos frameworks的工作目录和sandboxes(沙箱),没有默认值,使用/var/lib/mesos是一个不错的选择。
如果把上面的配置都作为环境变量,可以使用类似于如下的命令:
$ export MESOS_master=zk://mesos-master-1.example.com:2181,mesos-master-2.example.com:2181,mesos-master-3.example.com:2181/mesos
$ export MESOS_work_dir=/var/lib/mesos
$ export MESOS_log_dir=/var/log/mesos
以上的配置基本上是可以使Mesos集群工作的最小配置。
关于Apache Mesos cluster的完整配置选项,请参考Mesos的官方文档http://mesos.apache.org/documentation/latest/configuration/。
启动服务
上面的配置都完成之后,可以使用如下命令启动master和slave:
$ sudo service mesos-master start
$ sudo service mesos-slave start
如果使用命令行启动的话,需要如下命令:
$ sudo mesos-master --zk=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/mesos --port=5050 --log_dir=/var/log/mesos --quorum=2 --work_dir=/var/lib/mesos
$ sudo mesos-slave --master=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/mesos --log_dir=/var/log/mesos --work_dir=/var/lib/mesos
安装和配置Docker
在Mesos slave上,可以使用Mesos原生的containerizer(使用Linux cgroups),也可以选择使用Docker。关于Docker的安装和配置,这里不做过多赘述,请参考Docker的官方文档,这里主要列出怎样配置Mesos slave使用Docker。
当完成Docker的安装和配置后,需要修改Mesos slave上的containerizers列表,并增大executor注册的超时时间,以便使Docker有足够的时间来拉取镜像。如果使用基于文件的配置,使用如下命令:
$ echo "docker,mesos" | sudo tee /etc/mesos-slave/containerizers
$ echo "5mins" | sudo tee /etc/mesos-slave/executor_registration_timeout
到目前为止,我们对Mesos有了一个基本的认识,后面我们更加深入得了解一下Mesos。