1. 程式人生 > >Mesos+Docker+Marathon環境搭建教程

Mesos+Docker+Marathon環境搭建教程

官方Doc

架構原理

下圖描述了一個 Framework 如何通過排程來執行一個 Task:

 

事件流程:

1、Slave1 向 Master 報告,有4個CPU和4 GB記憶體可用

2、Master 傳送一個 Resource Offer 給 Framework1 來描述 Slave1 有多少可用資源

3、FrameWork1 中的 FW Scheduler會答覆 Master,我有兩個 Task 需要執行在 Slave1,一個 Task 需要<2個cpu,1 gb記憶體="">,另外一個Task需要<1個cpu,2 gb記憶體="">

4、最後,Master 傳送這些 Tasks 給 Slave1。然後,Slave1還有1個CPU和1 GB記憶體沒有使用,所以分配模組可以把這些資源提供給 Framework2

當 Tasks 完成和有新的空閒資源時,Resource Offer 會不斷重複這一個過程。 當 Mesos 提供的瘦介面允許其來擴充套件和允許 frameworks 相對獨立的參與進來,一個問題將會出現: 一個 framwork 的限制如何被滿足在不被 Mesos 對這些限制所知曉的情況下? 例如, 一個 framework 如何得到資料本地化在不被 Mesos所知曉哪個節點儲存著被該 framwork 所需要的資料?Mesos 通過簡單的寄予 frameworks 能夠拒絕 offers 的能力來回答了這個問題。 一個 framework 將拒絕不滿足其限制要求的 offers 並接受滿足其限制要求的 offers. 特殊情況下,我們找到一個簡單的策略 delay scheduling, 在該 frameworks 等待 一個限制時間來獲取儲存輸入資料的節點,並生成接近的優化過得資料點。

安裝參考

Mesos-master:10.63.51.231

Mesos-slave1:10.63.51.230

Mesos-slave2:10.63.51.232

安裝記錄

安裝依賴

安裝Python依賴

apt-get install curl python-setuptoolspython-pip python-dev python-protobuf

安裝配置ZooKeeper

apt-get install ZooKeeperd

echo 1 | sudo dd of=/var/lib/ZooKeeper/myid

安裝Mesos

1、 安裝各種環境依賴:

# Update the packages.

$ sudo apt-get update

# Install a few utility tools.

$ sudo apt-get install -y tar wget git

# Install the latest OpenJDK.

$ sudo apt-get install -y openjdk-7-jdk

# Install autotools (Only necessary if building from gitrepository).

$ sudo apt-get install -y autoconf libtool

# Install other Mesos dependencies.

$ sudo apt-get -y install build-essential python-devlibcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev

2、 下載安裝包

$ wget http://www.apache.org/dist/mesos/0.28.2/mesos-0.28.2.tar.gz

$ tar -zxfmesos-0.28.2.tar.gz

3、 編譯&&安裝:

$ cdmesos

$./bootstrap(從官網下載的安裝包不需要這一步,git上下載的包需要)

$ mkdirbuild

$ cdbuild

$../configure

$ make (這一步時間比較長,如果卡住時間特別長考慮機器配置問題)

# Runtest suite.

$ make check(時間也特別長,可略過)

$ makeinstall

安裝配置ZooKeeper

apt-get install ZooKeeperd

echo 1 | sudo dd of=/var/lib/ZooKeeper/myid

配置mesos-master(只需要主節點配置,從屬節點可略過)

mkdir -p /etc/Mesos-master

echo in_memory | sudo ddof=/etc/Mesos-master/registry

安裝Deimos

Mesos通過Deimos 管理Docker,通過pip安裝Deimos:

$ pip install deimos

配置mesos 使用Deimos

$ mkdir -p/etc/mesos-slave

$ echo/usr/local/bin/deimos | sudo dd of=/etc/mesos-slave/containerizer_path

$ echo external | sudodd of=/etc/mesos-slave/isolation

安裝docker

安裝Marathon

$ curl -Ohttp://downloads.mesosphere.com/marathon/v1.1.1/marathon-1.1.1.tgz

$ tar xzf marathon-1.1.1.tgz

啟動服務

啟動所有服務 :

$ initctlreload-configuration

$ service dockerstart

$ servicezookeeper start

在所有的節點上配置ZooKeeper

在配置maser節點和slave節點之前,需要先在所有的6個節點上配置一下ZooKeeper,配置步驟如下:

修改zk的內容

sudo vi /etc/Mesos/zk

將zk的內容修改為如下:

zk://10.162..2.91:2181,10.162.2.92:2181,10.162.2.93:2181/Mesos(master-ip:port,master-ip:port……,只需加master的zookeeper地址)

配置所有的master節點

在所有的master節點上都要進行如下操作:

修改ZooKeeper的myid的內容

sudo vi /etc/ZooKeeper/conf/myid

將三個master節點的myid按照順序修改為1,2,3。(本例中master有三個節點)

修改ZooKeeper的zoo.cfg

sudo vi/etc/ZooKeeper/conf/zoo.cfg

server.1=10.162.2.91:2888:3888

server.2=10.162.2.92:2888:3888

server.3=10.162.2.93:2888:3888

修改Mesos的quorum

sudo vi /etc/Mesos-master/quorum

將值修改為2。

配置master節點的Mesos 識別ip和和hostname(以在master1上的配置為例)

echo 10.162.2.91 | sudo tee/etc/Mesos-master/ip

sudo cp /etc/Mesos-master/ip/etc/Mesos-master/hostname

配置所有的slave節點

配置slave節點的識別ip和hostname(根據實際情況填寫)

echo 192.168.2.94 | sudo tee/etc/Mesos-slave/ip

sudo cp /etc/Mesos-slave/ip/etc/Mesos-slave/hostname

在所有節點上啟動服務

在master節點上啟動服務(以在master1節點上為例)

initctl reload-configuration

service docker start

service zookeeper start

執行mesos-master:

./bin/mesos-master.sh --ip=10.63.51.231--work_dir=/var/lib/mesos --zk=zk://10.63.51.231:2181/mesos --quorum=1

執行mesos-slave:

./mesos-slave.sh --ip=10.63.51.230--work_dir=/var/lib/mesos --master=10.63.51.231:5050 --containerizers=docker,mesos--log_dir=/var/log/ --docker=/usr/bin/docker--executor_registration_timeout=5mins

啟動Marathon:

./bin/start --masterzk://10.63.51.231:2181/mesos --zk zk://10.63.51.231:2181/marathon

ErrorMay 12 10:09:18 mesos-master marathon[3611]: Exception in thread "main" java.lang.UnsupportedClassVersionError: mesosphere/marathon/Main : Unsupported major.minor version 52.0
May 12 10:09:18 mesos-master marathon[3611]: #011at java.lang.ClassLoader.defineClass1(Native Method)
May 12 10:09:18 mesos-master marathon[3611]: #011at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
May 12 10:09:18 mesos-master marathon[3611]: #011at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

SolutionIt worked. Marathon needs jdk8. I forgot to mention that I'm on Ubuntu 14.04

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config java

好,至此,如果配置沒有出現錯誤的話就會成功了,由於有的網路情況和裝置情況不一樣,所以選舉的過程有的快有的慢,當發現slave節點有些正常有些不正常時,可以通過reboot來促使自己被master發現。