最近公有云比较火,公司也在尝试使用多个公有云,IDC也仍然在使用,这样给运维工作带来了很多麻烦。我想对IDC、公有云资源进行统一管理,发现Mesos比较适合干这事。先整一个搞清楚它能做什么。 我准备了三个节点来构建一个MINI平台,OS是Centos6.6, 规划架构如下: node1:mesos-master,marathon,zookeepernode2: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内容如下:
{ 通过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上安装haproxyhaproxy帮助我们对外发布服务,用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 (责任编辑:IT) |