Mesos+Docker+Marathon環境搭建教程

官方Doc

Mesos:http://mesos.apache.org/gettingstarted/

Mesos學習:https://www.gitbook.com/book/mesos-cn/mesos-cn/details

Docker:https://docs.docker.com/engine/installation/linux/ubuntulinux/

安裝Marathon:https://mesosphere.github.io/marathon/docs/

架構原理

下圖描述了一個 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

參考:https://docs.docker.com/engine/installation/linux/ubuntulinux/

安裝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發現。

 

Mesos Web UI: http://10.63.51.231:5050/

Marathon Web UI: http://10.63.51.231:8080

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章