Centos6上构建Mesos平台

分类:CentOS教程 阅读:37921 次

最近公有云比较火,公司也在尝试使用多个公有云,IDC也仍然在使用,这样给运维工作带来了很多麻烦。我想对IDC、公有云资源进行统一管理,发现Mesos比较适合干这事。先整一个搞清楚它能做什么。

我准备了三个节点来构建一个MINI平台,OS是Centos6.6, 规划架构如下:

node1:mesos-master,marathon,zookeeper
node2:mesos-slave,docker
node3:haproxy

第一步,在node1和node2上安装mesos

1.安装mesos支持环境

计划安装mesos-0.22.1, mesos 0.21.0以后的版本需求C++11,GCC版本必须大于4.8,需要安装devtoolset-2.

#下载devtoolset-2 repo文件

$ sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
#导入 CERN GPG key.
$ sudo rpm --import http://linuxsoft.cern.ch/cern/centos/7/os/x86_64/RPM-GPG-KEY-cern


# 下载 Apache Maven repo file.
$ sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo


# 'Mesos > 0.21.0' 要求 'subversion > 1.8' devel 包,新增WANdisco SVN repo文件“/etc/yum.repos.d/wandisco-svn.repo”,并写入如下内容。

[WANdiscoSVN]
name=WANdisco SVN Repo 1.8
enabled=1
baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$basearch/
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco


# 安装开发工具包.

$ sudo yum groupinstall -y "Development Tools"

如果安装过程中出现以下错误,说明出现在包冲突,这个有点麻烦。
#Error: Package: rpm-build-4.8.0-37.el6.x86_64 (c6-media)
# Requires: rpm = 4.8.0-37.el6
# Installed: rpm-4.8.0-38.el6_6.x86_64 (@Updates/$releasever)
# rpm = 4.8.0-38.el6_6
# Available: rpm-4.8.0-37.el6.x86_64 (c6-media)
# rpm = 4.8.0-37.el6

直接下载需要的RPM包,并安装就行了:)
$ wget ftp://rpmfind.net/linux/centos/6.6/updates/x86_64/Packages/rpm-build-4.8.0-38.el6_6.x86_64.rpm
$ sudo yum localinstall -y rpm-build-4.8.0-38.el6_6.x86_64.rpm


# 安装 'devtoolset-2-toolchain' ,这个包里面包括了GCC 4.8.2和相关的一些软件包。

$ sudo yum install -y devtoolset-2-toolchain

你可能会遇到如下错误提示,同样是包冲突的问题。

####Error: Package: policycoreutils-python-2.0.83-19.47.el6.x86_64 (c6-media)
# Requires: policycoreutils = 2.0.83-19.47.el6
# Installed: policycoreutils-2.0.83-19.47.el6_6.1.x86_64 (@Updates/$releasever)
# policycoreutils = 2.0.83-19.47.el6_6.1
# Available: policycoreutils-2.0.83-19.47.el6.x86_64 (c6-media)

# policycoreutils = 2.0.83-19.47.el6

这次应该轻车熟路了,下载一下装上就行。

$ wget ftp://rpmfind.net/linux/centos/6.6/updates/x86_64/Packages/policycoreutils-python-2.0.83-19.47.el6_6.1.x86_64.rpm

$ sudo yum localinstall -y policycoreutils-python-2.0.83-19.47.el6_6.1.x86_64.rpm

还有这些包也是mesos需要的。

$ sudo yum install -y apache-maven python-devel java-1.7.0-openjdk-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel

很不幸,我有遇到了包冲突,还是用同样的方法去解决。

####Error: Protected multilib versions: nss-util-3.16.1-3.el6.i686 != nss-util-3.16.2.3-2.el6_6.x86_64
####Error: Protected multilib versions: nss-3.16.1-14.el6.i686 != nss-3.16.2.3-3.el6_6.x86_64
####Error: Protected multilib versions: libcurl-7.19.7-37.el6_5.3.i686 != libcurl-7.19.7-40.el6_6.3.x86_64
####Error: Protected multilib versions: nss-softokn-freebl-3.14.3-17.el6.i686 != nss-softokn-freebl-3.14.3-18.el6_6.x86_64
####Error: Protected multilib versions: openssl-1.0.1e-30.el6.i686 != openssl-1.0.1e-30.el6_6.4.x86_64

####Error: Protected multilib versions: nss-softokn-3.14.3-17.el6.i686 != nss-softokn-3.14.3-18.el6_6.x86_64

下载并安装冲突包。

$ wget ftp://195.220.108.108/linux/centos/6.6/updates/x86_64/Packages/libcurl-devel-7.19.7-40.el6_6.3.x86_64.rpm
$ sudo yum localinstall -y libcurl-devel-7.19.7-40.el6_6.3.x86_64.rpm
$ wget ftp://195.220.108.108/linux/centos/6.6/updates/x86_64/Packages/openssl-devel-1.0.1e-30.el6_6.4.x86_64.rpm
$ sudo yum localinstall -y openssl-devel-1.0.1e-30.el6_6.4.x86_64.rpm

到些该装的都装完了,还有最后一步就是在shell中激活devtoolset-2.
$ scl enable devtoolset-2 bash
$ g++ --version

如果GCC版本大于4.8,恭喜你,mesos运行环境搞定!!

2.安装mesos


从APACHE网站下载mesos-0.22.1,并解压。
$ wget http://www.apache.org/dist/mesos/0.22.1/mesos-0.22.1.tar.gz
$ tar -zxf mesos-0.22.1.tar.gz


编译并进行安装
$ mkdir build
$ cd build
$ ../configure --prefix=/usr/local/mesos
$ make
$ make install

全是坑啊,安装过程中报以下错误,原因是code.google.com被天朝屏蔽了,真TM想骂人。

#### Download error on http://code.google.com/p/google-apputils-python: [Errno 101] Network is unreachable

还有其它网站上有下载。

$ wget https://pypi.python.org/packages/source/p/python-gflags/python-gflags-2.0.tar.gz

$ python setup.py install
$ wget https://pypi.python.org/packages/source/g/google-apputils/google-apputils-0.4.0.tar.gz
$ python setup.py install

装完后再次make install,顺利搞定。

第二步,在node1上安装Zookeeper


下载zookeeper包,并启动服务。
$ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
$ tar xzf zookeeper-3.4.6.tar.gz
$ cd zookeeper-3.4.6
$ cp conf/zoo_sample.cfg conf/zoo.cfg

$ bin/zkServer.sh start

第三步,在node1上启动mesos master

$ mesos-master --ip=master-ip --work_dir=/var/lib/mesos --zk=zk://master-ip:2181/mesos --quorum=1 > /dev/null 2>&1 &

在浏览器中输入URL http://master-ip:5050访问master管理页面。

第四步,在node1上安装marathon

从mesosphere网站下载marathon包,并启动marathon服务,注意如果hostname无法dns解析,请在/etc/hosts中加上。

$ wget http://downloads.mesosphere.com/marathon/v0.9.0/marathon-0.9.0.tgz
$ tar xzf marathon-0.9.0.tgz
$ MESOS_NATIVE_JAVA_LIBRARY=/usr/local/mesos/lib/libmesos.so ./bin/start --master zk://master-ip:2181/mesos --zk zk://master-ip:2181/marathon > /dev/null 2>&1 &
在浏览器中输入URL http://master-ip:8080访问marathon管理页面。

第五步,在node2上安装docker, 并启动docker服务

$ yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum install -y docker-io
$ service docker start
$ chkconfig docker on

第六步,在node2上启动mesos slave服务

$ mesos-slave --master=zk://master-ip:2181/mesos --ip=slave-ip --containerizers=docker,mesos --executor_registration_timeout=5mins > /dev/null 2>&1 &

第七步,通过marathon分配计算资源

通过marathon的REST API 调用来申请创建docker容器。先用一个json文件来说明申请的计算资源 mara-nginx.json内容如下:

{
"id":"run-a-nginx-cluster-v111",
"cpus":0.3,
"mem":128.0,
"instances":2,
"container":{
"type":"DOCKER",
"docker":{
"image":"nginx",
"parameters":[
{ "key":"detach","value":"true" }],
"network":"BRIDGE",
"portMappings":[
{ "containerPort":80,"servicePort":80,"protocol":"tcp"}]
},
"healthChecks":[
{
"protocol": "HTTP",
"portIndex":0,
"path":"/",
"gracePeriodSeconds":5,
"intervalSeconds":20,
"maxConsecutiveFailures":3
}
]
}
}

通过curl直接调用REST API. mesos将在slave机器上启动docker容器运行nginx服务。如果需要对计算资源进行调整,如果更改实例个数,只要在json文件中修改,并调用PUT API.

$curl -X POST -H "Content-Type:application/json" -d@mara-nginx.json http://master-ip:8080/v2/apps

第八步,在node3上安装haproxy


haproxy帮助我们对外发布服务,用YUM安装
$ yum install -y haproxy

通过 marathon脚本生成haproxy.conf文件
$ marathon/bin/haproxy-marathon-bridge http://master-ip:8080 > /etc/haproxy/haproxy.conf

启动haproxy服务
$ service haproxy start