安裝步驟
1.準(zhǔn)備環(huán)境
準(zhǔn)備三臺(tái)Ubuntu 14.40的環(huán)境(物理機(jī)和虛擬機(jī)都可以)跛璧,配置DNS或者/etc/hosts文件來(lái)保證相互通過(guò)機(jī)器名可以訪問捏检,并且關(guān)閉防火墻。
2.在兩臺(tái)計(jì)算節(jié)點(diǎn)上安裝Docker
登陸computer1.wyq.com和computer2.wyq.com執(zhí)行以下命令安裝Docker:
# apt-get update # apt-get install wget# wget -qO- https://get.docker.com/ | sh
默認(rèn)情況下,Docker只允許通過(guò)unix socket來(lái)訪問Docker Engine迎变,所以根據(jù)以上理論的分析,如果Swarm Manager節(jié)點(diǎn)master.wyq.com想要訪問計(jì)算節(jié)點(diǎn)上的Docker Engine飘言,我們必須修改Swarm默認(rèn)配置來(lái)開啟一個(gè)TCP的端口供外部訪問:
編輯/etc/default/docker文件衣形,修改DOCKER_OPTS參數(shù)如下:
# vim /etc/default/docker DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock"# service docker restart
3.在master節(jié)點(diǎn)安裝Golang和godep
由于master.wyq.com上需要安裝Swarm Manager服務(wù),Swarm 是由GO語(yǔ)言編寫姿鸿,所以需要在master.wyq.com上安裝Golang來(lái)支持Swarm Manager的運(yùn)行谆吴。
注: 這里使用Swarm的最新的版本:
/# wgethttps://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
/# tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz
Swarm像大多數(shù)GO語(yǔ)言的項(xiàng)目一樣,使用godep來(lái)管理包的依賴苛预,由于Swarm官方?jīng)]有提供Swarm的安裝包句狼,所以需要我們自己編譯,所以在編譯之前我們需要安裝godep來(lái)幫助下載Swarm的依賴热某。
首先由于godep的一些依賴使用了mercurial腻菇, 先安裝mercurial
# apt-get install -y mercurial
安裝godep:
\# mkdir $HOME/go-tools && export GOPATH=$HOME/go-tools
\# go get github.com/tools/godep
\# ll /root/go-tools/bin/
-rwxr-xr-x 1 root root 10327064 Jan 22 16:47 godep*
在安裝完Golang和godep之后,編輯/etc/profile,添加環(huán)境變量:
export PATH=$PATH:/usr/local/go/bin:$HOME/go-tools/bin
安裝驗(yàn)證:
\# go versiongo version go1.5.3 linux/amd64
\# godep versiongodep v51 (linux/amd64/go1.5.3)
4.在master節(jié)點(diǎn)上build Mesos
Mesos官方目前沒有提供Mesos的安裝包昔馋,需要自己下載源碼包進(jìn)行build筹吐。這里是以Mesos最新的版本為例進(jìn)行安裝。
登陸master節(jié)點(diǎn)master.wyq.com執(zhí)行以下步驟進(jìn)行build:
首先需要安裝build Mesos 必須的第三方軟件包:
# apt-get update# apt-get install -y openjdk-7-jdk# apt-get install -y autoconf libtool# apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev maven libapr1-dev libsvn-dev
下載源碼包進(jìn)行編譯安裝:
# wget http://mirror.bit.edu.cn/apache/mesos/0.26.0/mesos-0.26.0.tar.gz# tar -xzvf mesos-0.26.0.tar.gz# cd mesos-0.26.0# ./bootstrap# mkdir build && cd build# ../configure# make# make install DESTDIR=/opt/apache/mesos# ll /opt/apache/mesos/usr/local/sbin/total 2632drwxr-xr-x 2 root root 4096 Jan 28 16:41 ./
drwxr-xr-x 9 root root 4096 Jan 15 20:02 ../
-rwxr-xr-x 1 root root 406 Jan 28 16:41 mesos-daemon.sh*
-rwxr-xr-x 1 root root 1698505 Jan 28 16:41 mesos-master*
-rwxr-xr-x 1 root root 954864 Jan 28 16:41 mesos-slave*
-rwxr-xr-x 1 root root 888 Jan 28 16:41 mesos-start-cluster.sh*
-rwxr-xr-x 1 root root 1366 Jan 28 16:41 mesos-start-masters.sh*
-rwxr-xr-x 1 root root 1349 Jan 28 16:41 mesos-start-slaves.sh*
-rwxr-xr-x 1 root root 635 Jan 28 16:41 mesos-stop-cluster.sh*
-rwxr-xr-x 1 root root 1200 Jan 28 16:41 mesos-stop-masters.sh*
-rwxr-xr-x 1 root root 1185 Jan 28 16:41 mesos-stop-slaves.sh*
配置:
編輯/opt/apache/mesos/usr/local/sbin/mesos-daemon.sh文件:
?修改prefix變量的值為:/opt/apache/mesos/usr/local
?在prefix的下一行添加行:
export LD_LIBRARY_PATH=${prefix}/lib
export MESOS_LAUNCHER_DIR=${prefix}/libexec/mesos
export MESOS_EXECUTOR_ENVIRONMENT_VARIABLES="{\"PATH\": \"${PATH}\",\"LD_LIBRARY_PATH\": \"${LD_LIBRARY_PATH}\"}"
5.在master節(jié)點(diǎn)上編譯Swarm
下載源碼包:
# mkdir /opt/docker/swarm && cd /opt/docker/swarm# wget https://github.com/docker/swarm/archive/v1.0.1.tar.gz
構(gòu)建build目錄結(jié)構(gòu):
# mkdir -p $PWD/src/github.com/docker# tar -C src/github.com/docker -xzf v1.0.1.tar.gz# mv src/github.com/docker/swarm-1.0.1 src/github.com/docker/swarm# export GOPATH=$PWD# cd src/github.com/docker/swarm/
編譯Swarm binary:
# godep go install .# $PWD/bintotal 22680-rwxr-xr-x 1 root root 23215632 Feb 1 19:25 swarm*
6.在master節(jié)點(diǎn)上安裝NFS
為了節(jié)省安裝時(shí)間秘遏,我們不需要在三臺(tái)機(jī)器上分別build Mesos骏令,可以直接將build的安裝目錄拷貝到其他兩臺(tái)機(jī)器上即可。但是我們需要定期的和社區(qū)最新的代碼進(jìn)行同步和重新build垄提,所以為了避免每次重復(fù)的拷貝榔袋,我們采用共享文件的方式。
登陸master.wyq.com執(zhí)行如下命令安裝配置NFS:
# apt-get install -y nfs-common nfs-kernel-server# vim /etc/exports/opt/apache/mesos *(rw,sync,no_root_squash,no_subtree_check)# /etc/init.d/nfs-kernel-server start# showmount -e localhostExport list for localhost:
/opt/apache/mesos *
7.配置兩臺(tái)計(jì)算節(jié)點(diǎn)
登陸computer1.wyq.com和computer2.wyq.com铡俐,執(zhí)行如下命令:
在兩臺(tái)計(jì)算節(jié)點(diǎn)上安裝運(yùn)行Mesos需要的安裝包:
# apt-get update# apt-get install -y openjdk-7-jdk# apt-get install -y autoconf libtool# apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev maven libapr1-dev libsvn-dev
Mount Mesos安裝目錄:
# mkdir /opt/apache/mesos
# mount -t nfs -o nolock maser.wyq.com:/opt/apache/mesos /opt/apache/mesos
# ll /opt/apache/mesos/usr/local/sbin/
total 2632
drwxr-xr-x 2 root root 4096 Jan 28 16:41 ./
drwxr-xr-x 9 root root 4096 Jan 15 20:02 ../
-rwxr-xr-x 1 root root 406 Jan 28 16:41 mesos-daemon.sh*-rwxr-xr-x 1 root root 1698505 Jan 28 16:41 mesos-master*-rwxr-xr-x 1 root root 954864 Jan 28 16:41 mesos-slave*-rwxr-xr-x 1 root root 888 Jan 28 16:41 mesos-start-cluster.sh*-rwxr-xr-x 1 root root 1366 Jan 28 16:41 mesos-start-masters.sh*-rwxr-xr-x 1 root root 1349 Jan 28 16:41 mesos-start-slaves.sh*-rwxr-xr-x 1 root root 635 Jan 28 16:41 mesos-stop-cluster.sh*-rwxr-xr-x 1 root root 1200 Jan 28 16:41 mesos-stop-masters.sh*-rwxr-xr-x 1 root root 1185 Jan 28 16:41 mesos-stop-slaves.sh*
8.啟動(dòng)服務(wù)
登陸master.wyq.com啟動(dòng)Mesos master和Swarm manager:
# cd /opt/apache/mesos/usr/local/sbin/# mkdir /opt/mesoslog# ./mesos-daemon.sh mesos-master --work_dir=/var/lib/mesos --log_dir=/opt/mesoslog# cd /opt/docker/swarm/bin# ./swarm manage -c mesos-experimental --cluster-opt mesos.address=9.111.255.10 --cluster-opt mesos.port=3375 gradyhost1.eng.platformlab.ibm.com:5050
登陸computer1.wyq.com和computer2.wyq.com啟動(dòng)Mesos agent:
# cd /opt/apache/mesos/usr/local/sbin/# mkdir /opt/mesoslog# ./mesos-daemon.sh mesos-slave --master=gradyhost1.eng.platformlab.ibm.com:5050 --log_dir=/opt/mesoslog --containerizers=mesos,docker
9.驗(yàn)證:
打開Mesos portal:http://master.wyq.com:5050查看Slaves,Frameworks和offers的信息凰兑。
在任意一個(gè)計(jì)算節(jié)點(diǎn)上查看docker info:
# docker -H manager.wyq.com:2375 infoContainers: 0Images: 1Role: primaryStrategy: spreadFilters: health, port, dependency, affinity, constraintOffers: 2
Offer: 98085d1e-4516-4c4c-b6a3-4f8cde32c980-O19
└ cpus: 2
└ mem: 2.851 GiB
└ disk: 29.79 GiB
└ ports: 31000-32000
Offer: 98085d1e-4516-4c4c-b6a3-4f8cde32c980-O20
└ cpus: 2
└ mem: 2.851 GiB
└ disk: 29.79 GiB
└ ports: 31000-32000CPUs: 4Total Memory: 5.701 GiBName: manager.wyq.com
執(zhí)行docker run, 創(chuàng)建hello-world container:
# docker -H manager.wyq.com:2375 run --cpu-shares 1 hello-worldHello from Docker.