Mesos&Marathon實現容器部署

mesos&marathon架構說明


wKioL1fhL2XAduaIAAgXsAJ1_pg505.png

Mesos實現了兩級調度架構,它可以管理多種類型的應用程序。第一級調度是Master的守護進程,管理Mesos集羣中所有節點上運行的Slave守護進程。集羣由物理服務器或虛擬服務器組成,用於運行應用程序的任務,比如Hadoop和MPI作業。第二級調度由被稱作Framework的“組件”組成。Framework包括調度器(Scheduler)和執行器(Executor)進程,其中每個節點上都會運行執行器。Mesos能和不同類型的Framework通信,每種Framework由相應的應用集羣管理。上圖中只展示了Hadoop和MPI兩種類型,其它類型的應用程序也有相應的Framework。


Mesos Master協調全部的Slave,並確定每個節點的可用資源, 聚合計算跨節點的所有可用資源的報告,然後向註冊到Master的Framework(作爲Master的客戶端)發出資源邀約。Framework可以根據應用程序的需求,選擇接受或拒絕來自master的資源邀約。一旦接受邀約,Master即協調Framework和Slave,調度參與節點上任務,並在容器中執行,以使多種類型的任務,比如Hadoop和Cassandra,可以在同一個節點上同時運行.

mesos的體系結構和工作流


wKioL1fhL77glWpAAALCujpUe6U912.png


Slave是運行在物理或虛擬服務器上的Mesos守護進程,是Mesos集羣的一部分。

Framework由調度器(Scheduler)應用程序和任務執行器(Executor)組成,被註冊到Mesos以使用Mesos集羣中的資源。

  • Slave 1向Master彙報其空閒資源:4個CPU、4GB內存。然後,Master觸發分配策略模塊,得到的反饋是Framework 1要請求全部可用資源。

  • Master向Framework 1發送資源邀約,描述了Slave 1上的可用資源。

  • Framework的調度器(Scheduler)響應Master,需要在Slave上運行兩個任務,第一個任務分配<2 CPUs, 1 GB RAM>資源,第二個任務分配<1 CPUs, 2 GB RAM>資源。

  • 最後,Master向Slave下發任務,分配適當的資源給Framework的任務執行器(Executor),接下來由執行器啓動這兩個任 務(如圖中虛線框所示)。 此時,還有1個CPU和1GB的RAM尚未分配,因此分配模塊可以將這些資源供給Framework 2。


mesos工作流程

1.集羣中的所有slave節點會和master定期進行通信,將自己的資源信息同步到master,master由此獲知到整個集羣的資源狀況

2.mater會和已註冊、受信任的Framework進行交互,定期將最新的資源情況發送給Framework,當Framework前端有工作需求時,將選擇接收資源,否則拒絕

3.前端用戶提交了一個工作需求給Framework

4.Framework接收slave master發過來的資源信息

5.Framework依據資源信息向slave發起任務啓動命令,開始調度工作

Mesos是經典的二層架構,Master只負責管理資源,Framework負責任務調度,它們兩者都可以直接給slave通信;Master保持着通用性,輕量性,它和Framework、Slave之間的的交互更多的是狀態信息同步;在Slave上有兩類進程:一類爲Manager,用來與Master通信,交互狀態信息,另一類則是由Framework實現的具體Executor,它負責任務的運行,對於Manager而言,他看到的所有Executor、Task都是一致的容器,而不管這些任務具體執行什麼樣的業務邏輯;

最大最小公平算法將最小的資源分配最大化,並將其提供給用戶,確保每個用戶都能獲得公平的資源份額,以滿足其需求所需的資源;


mesos&marathon安裝說明如下:

服務器角色說明

master ——>192.168.229.128 ——> zookeeper,mesos-master,mesos-slave,marathon,docker
slave1  ——>192.168.229.132 ——> zookeeper,mesos-master,mesos-slave,marathon,docker
slave2  ——>192.168.229.133 ——> zookeeper,mesos-master,mesos-slave,marathon,docker

修改hostname和綁定hosts

echo "master" > /etc/hostname     #192.168.229.128
echo "slave1" > /etc/hostname      #192.168.229.132
echo "slave2" > /etc/hostname      #192.168.229.133
cat /etc/hosts    #三臺機器都需要綁定
192.168.229.128 master
192.168.229.132 slave1
192.168.229.133 slave2
重啓系統,使之生效

版本說明

mesos-1.0.1
marathon-1.1.1
zookeeper-3.4.6
docker-1.11.2

mesos安裝

tar -zxvf mesos-1.0.1.tar.gz
cd mesos-1.0.1
mkdir build
cd build
../configure
make -j8
make check
make install

編譯過程中出現的問題:
1.找到libmesos.so文件所在目錄,這裏是拷貝到/usr/local/lib目錄下
2.在/etc/ld.so.conf中加入include /usr/local/lib
3.執行/sbin/ldconfig –v 更行配置文件
find / -name  libmesos-1.0.1.so
vim /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf   #添加
include /usr/local/mesos-1.0.1/build/src/.libs/
/sbin/ldconfig -v

marathon安裝

tar -zxvf marathon-1.1.1.tgz
cd  marathon-1.1.1/bin

啓動marathon,出現報錯內容如下:
mesos-master marathon[3611]: Exception in thread "main" java.lang.UnsupportedClassVersionError: mesosphere/marathon/Main : Unsupported major.minor version 52.0
解決方法:It worked. Marathon needs jdk8.

zookeeper安裝

zk的安裝和啓動不做說明,主要配置文件如下(zoo.cfg):

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
clientPort=2181
server.1=192.168.229.128:3888:4888
server.2=192.168.229.132:3888:4888
server.3=192.168.229.133:3888:4888

安裝到此完成;

mesos master啓動

192.168.229.128上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin &&./mesos-master.sh --ip=192.168.229.128 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas   

192.168.229.132上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.132 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas 

192.168.229.133上:
mkdir -p /data1/mesos1/ && touch /data1/mesos1/log
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-master.sh --ip=192.168.229.133 --zk=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --quorum=2 --work_dir=/data1/mesos1/ --external_log_file=/data1/mesos1/log --cluster=paas

mesos slave啓動

192.168.229.128上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=master --ip=192.168.229.128 --work_dir=/data1/mesos_slave1/

192.168.229.132上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=slave1 --ip=192.168.229.132 --work_dir=/data1/mesos_slave1/

192.168.229.133上:
mkdir -p /data1/mesos_slave1/
cd /usr/local/mesos-1.0.1/build/bin && ./mesos-slave.sh   --master=zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos  --containerizers=mesos,docker  --hostname=slave2 --ip=192.168.229.133 --work_dir=/data1/mesos_slave1/

marathon啓動

192.168.229.128上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon

192.168.229.132上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon

192.168.229.133上:
cd /usr/local/marathon-1.1.1/bin && ./start --master zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/mesos --zk zk://192.168.229.128:2181,192.168.229.132:2181,192.168.229.133:2181/marathon


使用說明

1.打開http://192.168.229.132:5050/#/ 查看

wKioL1fhMOPwROO0AAJWcLfRnmY027.png

這裏可以看到我們定義cluster爲我們定義的paas,master server地址:192.168.229.128:5050 ,無論我們進入master,slave1,slave2 這三臺任意一臺中master server的地址都爲192.168.229.128,這裏是通過zk選舉的master,如果128 掛掉後,master server會被其他服務器取代

2.查看slave資源情況

wKioL1fhMQvylzymAACmveM4RZg360.png

3.查看Frameworks頁面,可以看到現在frameworks使用的是marathon  slave1主機,同mesos master一樣,這裏無論marathon任何一個down掉,其他的marthon都會頂上,也是使用zk來做選舉,點擊slave1,即可跳轉到marathon管理界面

wKiom1fhMT6AAcDYAADAoKT-u98255.png

4.訪問marathon管理界面

wKiom1fhMWjAVL2TAADbxR7Tq5M414.png

5.創建一個docker應用,創建5個instances(前提:已將docker image存放在3臺機器上,可以直接run)

wKioL1fhMb7BW-x5AABrA9i5PQA261.png

wKiom1fhMd3DHMRqAABx_Z4AIqM795.png

wKiom1fhMf7yY5lTAABoAwO-0_U236.png

點擊Create Application 完成應用的創建,然後查看狀態已爲Runing

wKioL1fhMiTSvZ5OAAC09vIsZWs181.png

查看5個詳細實例

wKiom1fhMj_QGgesAAFkfFzp-bE190.png

點擊slave1:31289,跳轉到對應的應用中

wKioL1fhMmCjzFjXAABGrKxL_2w064.png

到此應用部署成功,當然這些實例也可以做伸縮,具體的操作,請查閱相關文檔。

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