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
安裝參考
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
Error:May 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)
Solution:It 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發現。