1. 程式人生 > >如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

Mesos概述

Apache Mesos 是一款基於多資源(記憶體、CPU、磁碟、埠等)排程的開源叢集管理套件,能使容錯和分散式系統更加容易使用。其採用了Master/Slave結構來簡化設計,將Master做的儘可能輕量級,僅儲存了各種計算框架(Framwork)和Mesos Slave的狀態資訊,這些狀態很容易在Mesos出現故障時被重構,所以使用zookeeper解決master單點故障問題。

Mesos工作原理

Mesos Master充當全域性資源排程器角色,採用某種策略演算法將某個Save
上的空閒資源分配給某個Famework,而各種Framework則是通過自己的排程器向master註冊進行接入,master slave則是收集任務狀態和啟動各個Framework的Executor。其架構圖如下:

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

基本術語:

  • Mesos master: 負責管理各個Framework和Slave,並將Slave 上的資源分配給各個Framework。
  • Mesos Slave:負責管理本節點上的各個Mesos Task,為各個Executor分配資源。
  • Framework:計算框架,如:、Spark等,可以通過MesosSchedulerDiver接入Mesos。
  • Executor:執行器,在Mesos Slave上安裝,用於啟動計算框架中的Task。

Zookeeper概述

ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。其中Master 選舉可以說是 ZooKeeper 最典型的應用場景了。生產環境中Zookeeper是以宕機個數過半來讓整個叢集宕機的,所以master至少三個節點。

Marathon

Marathon是一個Mesos框架,能夠支援執行長服務,比如web應用等。是叢集的分散式Init.d,能夠原樣執行任何Linux二進位制釋出版本,如Tomcat Play等等,可以叢集的多程序管理。也是一種私有的Pass,實現服務的發現,為部署提供提供REST API服務,有授權和SSL、配置約束,通過HAProxy實現服務發現和負載平衡。

配置搭建docker叢集管理平臺

版本核心需要3.10以上

cat /etc/-release   //檢視Linux版本

uname -r   //檢視核心版本(需要核心3.10以上)

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
環境如下所示:

主機 IP地址 安裝軟體包
master 192.168.26.150 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/zookeeper-3.4.10.tar.gz/ marathon-0.15.2.tgz
master1 192.168.26.139 jdk-8u91-linux-x64.tar.gz/ mesos-0.25.0.tar.gz /zookeeper-3.4.10.tar.gz
master2 192.168.26.140 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/zookeeper-3.4.10.tar.gz
slave 192.168.26.141 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/docker
slave1 192.168.26.142 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/docker

步驟如下所示:

一、安裝Mesos

關閉所有主機的防火牆和安全性策略

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

1.配置JAVA環境

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

cd /usr/local
mv jdk1.8.0_91/ java

vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

source /etc/profile

2.安裝相關環境

(1)安裝開發工具

yum groupinstall -y "Development Tools"

(2)新增apache-maven源
為Mesos提供專案管理和構建自動化工具的支援

wget http://repos.people.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

(3)安裝相關依賴包

yum install -y apache-maven -devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel

(4)配置WANdiscoSVN網路源

vim /etc/yum.repos.d/wandisco-svn.repo

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

3.配置Mesos環境變數

vim /etc/profile

export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so

source /etc/profile

4.構建Mesos

tar zxvf mesos-0.25.0.tar.gz -C /opt/
mv /opt/mesos-0.25.0/ /root/
cd /root/mesos-0.25.0
mkdir build
cd  build
../configure

make              //等待時間長(線上狀態)
make check
make install     

二、 配置Mesos-master(三臺配置一樣)

1.規劃master主機名

Mesos-master負責維護slave叢集的心跳,從salve提取資源資訊,配置之前做好相應的解析工作。

hostnamectl set-hostname master  #修改相應的主機名

vim /etc/hosts      #修改hosts檔案
192.168.26.131 master
192.168.26.139 master1
192.168.26.140 master2
192.168.26.141 slave
192.168.26.142 slave1

ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master

2.啟動mesos-master

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 

引數:

--work_dir:執行期資料存放路徑,包含sandbox、slavemeta等資訊

--log_dir:Mesos日誌存放路徑

--[no-]hostname_lookup: 是否從DNS獲取主機名,本例中關閉了此配置,直接顯示IP。

--ip: Mesos程序繫結的IP。

3.配置完成後開啟另一個終端使用瀏覽器訪問本地的5050埠

http://l92.168.26.150:5050

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

三、配置Mesos-slave(兩臺配置一樣)

1.規劃slave主機名

Mesos-slave負責接收並執行來自Mesos-master傳遞的任務以及監控任務狀態,收集任務使用系統的情況,配置之前做好解析工作。

hostnamectl set-hostname slave

vim /etc/hosts      #修改hosts檔案
192.168.26.150 master
192.168.26.139 master1
192.168.26.140 master2
192.168.26.141 slave
192.168.26.142 slave1
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave #建立連結檔案

2.安裝並啟動docker

yum install docker -y

systemctl start docker.service
systemctl enable docker.service

注意docker服務啟動失敗,解決方案請參考部落格http://blog.51cto.com/11134648/2162785。

3.啟動Mesos-slave服務

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.26.148:5050 --no-hostname_lookup --ip=0.0.0.0

注意當啟動失敗時,有可能連結檔案沒有生效,使用如下命令

cd /root/mesos-0.25.0/build/bin/

./mesos-slave.sh --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.26.150:5050 --no-hostname_lookup --ip=0.0.0.0

4.檢視slave狀態

使用瀏覽器再次對master的5050埠進行訪問

http://:192.168.26.150:5050

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

四、安裝Zookeeper

1.分別在所有的master節點上安裝Zookeeper

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/

cd /home/q/zookeeper-3.4.10/

mv conf/zoo_sample.cfg conf/zoo.cfg

2.修改Zookeeper的配置檔案

以server.A=B:C:D 格式定義各個節點的相關資訊,其中A是一個數字,表示第幾號伺服器;B是這個伺服器的IP地址;C為與叢集中的Leader伺服器交換資訊的埠;D是在leader掛掉時專門進行Leader選舉時所用的埠。

cd /home/q/zookeeper-3.4.10/conf

vim zoo.cfg 
   dataDir=/home/q/zookeeper-3.4.10/data   //重新定義Datadir的位置
   dataLogDir=/home/q/zookeeper-3.4.10/datalog
   server.1=192.168.26.150:2888:3888
   server.2=192.168.26.139:2888:3888
   server.3=192.168.26.140:2888:3888

3.修改完的配置檔案拷貝給其他master主機

scp zoo.cfg 192.168.26.139:/home/q/zookeeper-3.4.10/conf/
scp zoo.cfg 192.168.26.140:/home/q/zookeeper-3.4.10/conf/

4.在dataDir路徑下建立一個myid檔案

master主機上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 1 > data/myid
cat data/myid

master1主機上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 2 > data/myid
cat data/myid

master2主機上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 3 > data/myid
cat data/myid

5.分別在各master節點上啟動Zookeeper服務

master主機

./bin/zkServer.sh start conf/zoo.cfg 

master1主機

./bin/zkServer.sh start conf/zoo.cfg 

master2主機

./bin/zkServer.sh start conf/zoo.cfg 

6.檢視主機狀態

./bin/zkServer.sh status

7.分別啟動Mesos-master

注意先kill掉之前啟動的Mesos-master程序

master主機

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.150:2181/mesos --quorum=2

master1主機

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.139:2181/mesos --quorum=2

master2主機

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.140:2181/mesos --quorum=2

8.啟動Mesos-slave

注意先kill掉之前啟動的Mesos-master程序

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --no-hostname_lookup --ip=0.0.0.0

注意當啟動失敗時,,有可能連結檔案沒有生效,使用如下命令

cd /root/mesos-0.25.0/build/bin/

./mesos-slave.sh --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --no-hostname_lookup --ip=0.0.0.0

9.使用瀏覽器指定任意Mesos-master地址的5050埠驗證

http://192.168.26.140:5050

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
若指定的是非Leader狀態下的Mesos-master地址,頁面會自行跳轉至處於leader狀態的Mesos-master地址。
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

五、在master主機上部署執行Marathon

使用Marathon向Mesos傳送任務。

1.安裝並啟動Marathon

wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

tar zxvf marathon-0.15.2.tgz -C /home/q/

cd /home/q/marathon-0.15.2

./bin/start --hostname 192.168.26.150 --master zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --http_address 0.0.0.0    //將Marathon安裝到多Mesos-master環境的master主機上

2.訪問Marathon(預設使用8080埠)

http://192.168.26.150:8080/

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

3.使用Marathon建立測試任務

(1)在首頁點選Create按鈕,建立一個測試任務echo “hello world”
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(2)建立成功以後在applications頁面可以看到該任務
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
Marathon會自動註冊到Mesos中,可以在Mesos web的Framework頁面中看到註冊資訊。
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

可以在Mesos Web首頁看到測試任務在不停的執行中
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(4)在節點slave主機檢視任務的相關資訊
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(5)刪除測試任務

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

4.使用Marathon API的形式新增新任務

在節點slave中操作

cd /root
vim demo.json
{
"id":"basic-0",
"cmd":"while [true]; do echo 'hello Marathon'; sleep 5; done",
"cpus":0.1,
"mem":10.0,
"instances":1
}
//檢視Marathon網站有新新增任務
curl -X POST -H "Content-type:application/json" http://192.168.26.150:8080/v2/apps -d@demo.json

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

5.使用Mesos與Marathon建立Docker叢集

(1)在節點slave建立docker的nginx請求任務

cd /root
vim nginx.json

{
"id":"/nginx",      //應用唯一的ID
"container":{      //marathon啟用docker格式
"type":"DOCKER",
"docker":{
"image":"nginx",     //nginx映象
"network":"HOST",   //網路為HOST模式
"parameters":[],
"privileged":false,
"forcePullImage":false   //是否強制更新映象
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}

//檢視Marathon網站有新新增任務
curl -X POST -H "Content-type:application/json" http://192.168.26.150:8080/v2/apps [email protected]

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(2)在Marathon頁面檢視

可以在建立的Nginxd任務下看到該任務傳送給主機

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(3)用命令列方式檢視主機下載的docker映象

docker images

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺

docker ps -a

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺
(4)訪問slave主機上執行著的Nginx服務

 http://192.168.26.141

如何使用Zookeeper+Mesos+Marathon搭建Docker叢集管理平臺