docker構建PaaS平臺理論知識
mesos 叢集資源管理框架(以叢集的形式出現,主決定資源的分配,從負責執行executor),分配資源,提供offer給framework,不負責排程資源,千言萬語都在這裡了mesos的設計結構。
marathon 是mesos的framework,容器編排系統,保證長時間的執行任務,類似後臺執行或者supervisor。
zooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置管理維護、域名服務、分散式同步、組服務、健康檢查,HA等。
Chronos
consul經常拿來和etcd、 zookeeper來對比,他有和etcd一樣的服務發現、服務註冊功能,也有和etcd、zookeeper一樣的配置儲存功能,詳細的對比在此不再列出。
Registrator是一個獨立於服務登錄檔的自動服務註冊/登出元件
Apache Mesos概述:
Apache Mesos:Apache-Mesos是一款基於多資源(記憶體、CPU、磁碟、埠等)排程的開源叢集管理套件,能使容錯和分散式系統更加容易使用。官方網站http://mesos.apache.org/ ,軟體能夠自由下載使用;
Apache-Mesos採用Master/Slave結構來簡化設計,將Master做得儘可能輕量級,僅儲存各種計算框架(Framework)和Mesos Slave的狀態資訊,這些狀態很容易在Mesos出現故障的時候被重構,除此之外Mesos還使用Zookeeper解決Master單點故障的問題;
Apache Mesos專業術語:
Mesos Master:負責管理各個Framework和Slave,並將Slave上的資源分配給各個Framework;
Mesos Slave:負責管理本節點上的各個Mesos Task,為各個Executor分配資源;
Framework:計算機框架,如:Hadoop、Spark等,可以通過MesosSchedulerDiver接入Mesos;
Executor:執行器,在Mesos Slave上安裝,用於啟動計算框架中的Task
Apache Mesos處理流程:
1.叢集中的所有slave節點會和master定期進行通訊,將自己的資源資訊同步到master,master由此獲知到整個叢集的資源狀況;
2.mater會和已註冊、受信任的Framework進行互動,定期將最新的資源情況傳送給Framework,當Framework前端有工作需求時,將選擇接收資源,否則拒絕;
3.前端使用者提交了一個工作需求給Framework;
4.Framework接收slave master發過來的資源資訊;
5.Framework依據資源資訊向slave發起任務啟動命令,開始排程工作;
zookeeper概述:
ZooKeeper是用來給叢集服務維護配置資訊,提供分散式同步和提供組服務。所有這些型別的服務都使用某種形式的分散式應用程式。ZooKeeper是一個分散式的,開放原始碼的協調服務,是Hadoop和Hbase的重要元件,在此zookeeper與mesos結合實現為mesos的master保證其單點故障問題;
ZooKeeper角色:
領導者(leader):領導者負責投票發起和決議,更新系統狀態;
跟隨者(follwoer):follower用於接收客戶請求並向客戶端返回結果,在選主過程參與投票;
觀察者:ObServer可以接受客戶端連線,將寫請求轉發給leader節點,但ObServer不參加投票過程,只同步leader的狀態,ObServer的目的是為了拓展系統,提高讀取速度;
客戶端:請求發起方;
Marathon概述:
是一個mesos框架,能夠支援執行長服務,可以實現通過web頁面或者api介面實現部署應用,比如web應用等。也是一種私有的Paas,實現服務的發現,為部署提供提供REST API服務,有授權和SSL、配置約束;
事實上, 通過讀取同一臺宿主機的其他容器 的環境變數進行服務註冊、健康檢查定義等操作,支援可插拔式的服務登錄檔配置。
mesos架構:
架構圖可以看出mesos主要兩部分主和從 ,主叢集依靠zookeeper。
架構圖展示了Mesos的重要組成部分,Mesos由一個master程序管理執行著每個客戶端節點的slave程序和跑任務的Mesos計算框架。
Mesos程序通過計算框架可以很細緻的管理cpu和記憶體等,從而提供資源。每個資源提供都包含了一個清單(slave ID,resource1:amount1,resource2,amount2,…)master會根據現有的資源決定提供每個計算框架多少資源。例如公平分享或者根據優先順序分享。
為了支援不同種的政策,master通過外掛機制新增額一個allocation模組使之分配資源更簡單方便。
一個計算框架執行在兩個組建之上,一個是Scheduler,他是master提供資源的註冊中心,另一個是Executor程式,用來發起在slave節點上執行計算框架的任務。master決定給每個計算框架提供多少計算資源,計算框架的排程去選擇使用哪種資源。當一個計算框架接受了提供的資源,他會通過Mesos的任務描述執行程式。Mesos也會在相應的slave上發起任務。
Mesos是Apache下的開源分散式資源管理框架,它被稱為分散式系統的核心。Mesos最初是由加州大學伯克利分校的AMPLab開發,後在Twitter得到廣泛使用。
Mesos-Master:主要負責管理各個framework和slave,並將slave上的資源分配給各個framework。
Mesos-Slave:負責管理本節點上的各個mesos-task,比如:為各個executor分配資源。
Framework:計算框架,如:Hadoop、Spark、Kafaka、ElasticSerach等,通過MesosSchedulerDiver接入Mesos
Executor:執行器,就是安裝到每個機器節點的軟體,這裡就是利用docker的容器來擔任執行器的角色。具有啟動銷燬快,隔離性高,環境一致等特點。
Mesos-Master是整個系統的核心,負責管理接入Mesos的各個framework(由frameworks_manager管理)和slave(由slaves_manager管理),並將slave上的資源按照某種策略分配給framework(由獨立插拔模組Allocator管理)。
Mesos-Slave負責接受並執行來自Mesos-master的命令、管理節點上的mesos-task,併為各個task分配資源。Mesos-slave將自己的資源量傳送給mesos-master,由mesos-master中的Allocator模組決定將資源分配給哪個framework,當前考慮的資源有CPU和記憶體兩種,也就是說,Mesos-slave會將CPU個數的記憶體量傳送給mesos-master,而使用者提交作業時,需要指定每個任務需要的CPU個數和記憶體。這樣:當任務執行時,mesos-slave會將任務放導包含固定資源Linux container中執行,以達到資源隔離的效果。很明顯,master存在單點故障問題,為此:Mesos採用了Zookeeper解決該問題。
Framework是指外部的計算框架,如果Hadoop、Mesos等,這些計算框架可通過註冊的方式接入Mesos,以便Mesos進行統一管理和資源分配。Mesos要求可接入的框架必須有一個排程模組,該排程器負責框架內部的任務排程。當一個framework想要接入Mesos時,需要修改自己的排程器,以便向Mesos註冊,並獲取Mesos分配給自己的資源,這樣再由自己的排程器將這些資源分配給框架中的任務,也就是說,整個Mesos系統採用了雙層排程框架:第一層,由Mesos將資源分配給框架。第二層,框架自己的排程器將資源分配給自己內部的任務。當前Mesos支援三中語言編寫的排程器,分別是C++、Java、Python。為了向各種排程器提供統一的接入方式,Mesos內部採用C++實現了一個MesosSchedulerDriver(排程驅動器),framework的排程器可呼叫該driver中的介面與Mesos-master互動,完成一系列功能(如註冊,資源分配等。)
Executor主要用於啟動框架內部的task。由於不同的框架,啟動task的介面或者方式不同,當一個新的框架要接入mesos時,需要編寫一個Executor,告訴Mesos如何啟動該框架中的task。為了向各種框架提供統一的執行器編寫方式,Mesos內部採用C++實現了一個MesosExecutorDiver(執行器驅動器),framework可通過該驅動器的相關介面告訴Mesos啟動task的方式。
mesos執行流程:
流程步驟:
1、slave1報告給master他擁有4核cpu和4G剩餘記憶體,Marathon呼叫allocation政策模組,告訴slave1計算框架1應該被提供可用的資源。
2、master給計算框架1傳送一個在slave上可用的資源描述。
3、計算框架的排程器回覆給master執行在slave上兩個任務相關資訊,任務1需要使用2個CPU,記憶體1G,任務2需使用1個CPU,2G記憶體。
4、最後,master傳送任務給slave,分配適當的給計算框架執行器,繼續發起兩個任務(圖1.1-2虛線處),因為任有1個CPU和1G記憶體未分配,allocation模組現在或許提供剩下的資源給計算框架2。
除此之外,當任務完成,新的資源成為空閒時,這個資源提供程式將會重複。