mesos&marathon架構說明
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的體系結構和工作流
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/#/ 查看
這裏可以看到我們定義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資源情況
3.查看Frameworks頁面,可以看到現在frameworks使用的是marathon slave1主機,同mesos master一樣,這裏無論marathon任何一個down掉,其他的marthon都會頂上,也是使用zk來做選舉,點擊slave1,即可跳轉到marathon管理界面
4.訪問marathon管理界面
5.創建一個docker應用,創建5個instances(前提:已將docker image存放在3臺機器上,可以直接run)
點擊Create Application 完成應用的創建,然後查看狀態已爲Runing
查看5個詳細實例
點擊slave1:31289,跳轉到對應的應用中
到此應用部署成功,當然這些實例也可以做伸縮,具體的操作,請查閱相關文檔。