mesos 集羣架構

mesos技術架構簡圖算法

如下內容參考了別的內容:docker


四個組件組成,分別是Mesos-master,mesos-slave,framework和executor架構

master主要負責管理各個framework和slave,並將slave上的資源分配給各個framework,框架

slave進程則負責運行計算框架的計算任務,向master彙報集羣節點的資源和計算框架的任務運行狀態。oop

framework和節點主要信息都存在zookeeper中spa

Framework:計算框架,如:Hadoop,Spark,marathon等,經過MesosSchedulerDiver接入Mesoscode

Executor:執行器,安裝到mesos-slave上,用於啓動計算框架中的task。orm

Scheduler:作資源的調度,這裏master和框架都有調度器,也就是雙層調度進程

Master scheduler :整個集羣的資源管理和調度內存

FrameworkScheduler:單個應用程序的管理和資源二次調度,基本操做均包括註冊、資源申請/獲取、資源分配(給內部的任務)等

第一層調度:調度器將master統計的這部分資源,發送給應用程序框架,供應用程序框架進行選擇,框架須要資源時,就會給master 發送有關資源申請(至關於接受master資源邀約)的信息,一旦master收到了來自框架的接受資源邀約或者申請的消息,就會自動更新slave資源使用狀況

第二層:框架本身的調度器將申請來的資源分配給本身內部的任務。

Master主要任務

1.管理維護框架應用程序,框架程序中記錄正在運行的任務、已經完成的任務,發送給應用程序框架但尚未收到回覆的resource offer、框架的已分配資源、在slave上運行的執行器信息

2.管理維護存活的slave。slave中須要記錄在slave上運行的應用程序框架的執行器、在slave上運行的全部任務,屬於slave上的已經發送給應用程序框架但沒有收到迴應的offer,slave上全部offer佔用的資源,(全部分配的)已被任務和執行器使用的資源,負責slave心跳保活的process

注:

Slave 和 framework須要向master註冊,註冊的主要信息存儲在zookeeper中。Master的元數據信息沒有持久化,而是在內存中維護,爲了方便交互。

Slave持久化的數據分紅五個部分,分別是slave的信息framework的信息、executor的信息、任務的信息,和任務的狀態變化

調度算法:Resource Allocation

Mesos 提供兩種資源分配的算法, 第一種是max-min fairness 調度算法, 另外一種是嚴格的資源限制。默認使用後者

Mesos 提供兩種刪除資源的方法, 好比這個framework長時間的佔用資源, 這個時候怎麼辦, 好比想MapReduce 這樣的任務, 那麼就直接殺死, 由於對MapReduce這種架構而言, 單個任務的影響是不大的. 可是對MPI這種任務就不行, 由於MPI裏面任務都不獨立.  因此對於想MPI這種任務, allocation module提供了guaranteed allocation 的保證. 如今Mesos的作法比較簡單, 若是一個framework在它保證的資源一下, 都不殺死, 若是超過了 所有殺死

調度的侷限性 :

因爲不一樣framework須要的資源不同, 這種Two level 調度, 不能把多種類型打包起來, 分配資源不夠合理

由於在運行各類不一樣類型的framework的時候, 容易把全部的資源碎片化, 致使有一些framework須要大任務運行不起來. 若是是中心化調度的話, 由於他知道全部的須要調度的請求, 由於不存在這個問題

task建立流程;

task刪除

刪除任務則較爲簡單,刪除任務是由framework發起的,killTaskMessage沿着framework、master、slave、執行器這一條鏈路上進行傳遞,但在處理killTaskMessage信令時,正常狀況下都不會直接刪除task,而是在後續處理StatusUpdateMessage時,檢測到task狀態爲failed、killed和finished纔會真正刪除task。

對於docker容器任務執行完,狀態爲exited,slave上不會馬上刪除,而是在必定的時間後纔會刪除

相關文章
相關標籤/搜索