《Apache Mesos入門》要點(diǎn):
本文介紹了Apache Mesos入門,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:apache配置

題圖:by Aaron Burden from Unsplash
Apache Mesos誕生于UC Berkeley的一個(gè)研究項(xiàng)目,現(xiàn)已成為Apache Incubator中的項(xiàng)目.Apache Mesos把自己定位成一個(gè)數(shù)據(jù)中心操作系統(tǒng),它能管理上萬(wàn)臺(tái)的從機(jī).Framework相當(dāng)于這個(gè)操作系統(tǒng)的應(yīng)用程序,每當(dāng)應(yīng)用程序需要執(zhí)行,Framework就會(huì)在Mesos中選擇一臺(tái)有合適資源(cpu、內(nèi)存等)的從機(jī)來運(yùn)行.
Apache Mesos使用ZooKeeper實(shí)現(xiàn)容錯(cuò)復(fù)制,使用Linux Containers來隔離任務(wù),支持多種資源計(jì)劃分配.Apache Mesos應(yīng)用場(chǎng)景非常廣泛.今天我們先來學(xué)習(xí)下Mesos的基本架構(gòu)原理.
Apache Mesos中的基本術(shù)語(yǔ)解釋
- Mesos-Master:主要負(fù)責(zé)管理各個(gè)Framework和Slave,并將Slave上的資源分配給各個(gè)Framework.
- Mesos-Slave:負(fù)責(zé)管理本節(jié)點(diǎn)上的各個(gè)Mesos-Task,比如:為各個(gè)executor分配資源.
- Framework:計(jì)算框架,如:Hadoop、Spark、Kafaka、ElasticSerach等,通過MesosSchedulerDiver接入Mesos.
- Executor:執(zhí)行器,就是安裝到每個(gè)機(jī)器節(jié)點(diǎn)的軟件.用于啟動(dòng)計(jì)算框架中的Task.這里就是利用Docker的容器來?yè)?dān)任執(zhí)行器的角色.具有啟動(dòng)銷毀快,隔離性高,環(huán)境一致等特點(diǎn).
Apache Mesos總體架構(gòu)
Apache Mesos架構(gòu)示意圖

Apache Mesos由四個(gè)組件組成,分別是Mesos-Master,Mesos-Slave,Framework和Executor.
- Mesos-Master是整個(gè)系統(tǒng)的核心,負(fù)責(zé)管理接入Mesos的各個(gè)framework(由frameworks_manager管理)和Slave(由slaves_manager管理),并將slave上的資源按照某種策略分配給framework(由獨(dú)立插拔模塊Allocator管理).
- Mesos-Slave負(fù)責(zé)接受并執(zhí)行來自Mesos-master的命令、管理節(jié)點(diǎn)上的mesos-task,并為各個(gè)task分配資源.Mesos-Slave將自己的資源量發(fā)送給Mesos-Master,由Mesos-Master中的Allocator模塊決定將資源分配給哪個(gè)framework,當(dāng)前考慮的資源有CPU和內(nèi)存兩種,也就是說,Mesos-Slave會(huì)將CPU個(gè)數(shù)的內(nèi)存量發(fā)送給Mesos-Master,而用戶提交作業(yè)時(shí)需要指定每個(gè)任務(wù)需要的CPU個(gè)數(shù)和內(nèi)存.這樣當(dāng)任務(wù)運(yùn)行時(shí),Mesos-Slave會(huì)將任務(wù)放到包含固定資源Linux container中運(yùn)行,以達(dá)到資源隔離的效果.很明顯,Master存在單點(diǎn)故障問題,為此Mesos采用了Zookeeper解決該問題.
- Framework是指外部的計(jì)算框架,如果Hadoop、Mesos、Marathon等,這些計(jì)算框架可通過注冊(cè)的方式接入Mesos,以便Mesos進(jìn)行統(tǒng)一管理和資源分配.Mesos要求可接入的框架必須有一個(gè)調(diào)度模塊,該調(diào)度器負(fù)責(zé)框架內(nèi)部的任務(wù)調(diào)度.當(dāng)一個(gè)Framework想要接入Mesos時(shí),需要修改自己的調(diào)度器,以便向Mesos注冊(cè),并獲取Mesos分配給自己的資源,這樣再由自己的調(diào)度器將這些資源分配給框架中的任務(wù).也就是說,整個(gè)Mesos系統(tǒng)采用了雙層調(diào)度框架:第一層,由Mesos將資源分配給框架.第二層,框架自己的調(diào)度器將資源分配給自己內(nèi)部的任務(wù).當(dāng)前Mesos支持三中語(yǔ)言編寫的調(diào)度器,分別是
C++
、Java
、Python
.為了向各種調(diào)度器提供統(tǒng)一的接入方式,Mesos內(nèi)部采用C++實(shí)現(xiàn)了一個(gè)MesosSchedulerDriver(調(diào)度驅(qū)動(dòng)器),Framework的調(diào)度器可調(diào)用該driver中的接口與Mesos-Master交互,完成一系列功能(如注冊(cè),資源分配等.)
- Executor主要用于啟動(dòng)框架內(nèi)部的Task.由于不同的框架,啟動(dòng)Task的接口或者方式不同,當(dāng)一個(gè)新的框架要接入Mesos時(shí),需要編寫一個(gè)Executor,告訴Mesos如何啟動(dòng)該框架中的task.為了向各種框架提供統(tǒng)一的執(zhí)行器編寫方式,Mesos內(nèi)部采用C++實(shí)現(xiàn)了一個(gè)MesosExecutorDiver(執(zhí)行器驅(qū)動(dòng)器),Framework可通過該驅(qū)動(dòng)器的相關(guān)接口告訴Mesos啟動(dòng)Task的方式.
官方提供的一個(gè)資源分配的例子

- Slave1向Master報(bào)告,有4個(gè)CPU和4GB內(nèi)存可用.
- Master發(fā)送一個(gè)Resource Offer給Framework1來描述Slave1有多少可用資源.
- FrameWork1中的FW Scheduler會(huì)答復(fù)Master,我有兩個(gè)Task需要運(yùn)行在Slave1,一個(gè)Task需要2個(gè)CPU,1GB內(nèi)存,另外一個(gè)Task需要1個(gè)CPU,2GB內(nèi)存.
- 最后,Master發(fā)送這些Tasks給Slave1.然后Slave1還有1個(gè)CPU和1GB內(nèi)存沒有使用,所以分配模塊可以把這些資源提供給Framework2.
這個(gè)例子可以看出來,Mesos的核心工作其實(shí)很少,資源管理和分配以及Task轉(zhuǎn)發(fā).調(diào)度由Framework實(shí)現(xiàn),Task的定義以及具體執(zhí)行也由Framework實(shí)現(xiàn),Mesos的資源分配粒度是按Task的,但由于Executor執(zhí)行Task可能在同一個(gè)進(jìn)程中實(shí)現(xiàn),所以資源限制只是一種流控的機(jī)制,并不能實(shí)際的控制到Task這個(gè)粒度.
Mesos和Kubernetes比較
Mesos和Kubernetes雖然都借鑒了Borg的思想,終極目標(biāo)類似,但解決方案是不同的.
- Mesos有點(diǎn)像聯(lián)邦制,承認(rèn)各邦(Framework)的主權(quán),但各邦讓渡一部分公用的機(jī)制出來由Mesos來實(shí)現(xiàn),最大化的共享資源,提高資源利用率,Framework和Mesos是相對(duì)獨(dú)立的關(guān)系.
- Kubernetes有點(diǎn)像單一制,搭建一個(gè)通用的平臺(tái),盡量提供全面的能力(網(wǎng)絡(luò),磁盤,內(nèi)存,cpu),制定一個(gè)集群應(yīng)用的定義標(biāo)準(zhǔn).任何復(fù)雜的應(yīng)用都可以按照該標(biāo)準(zhǔn)定義并以最小的變更成本在上面部署運(yùn)行,主要的變更需求也是因?yàn)橄胂硎躃ubernetes的動(dòng)態(tài)伸縮能力帶來的.
- Mesos是基于兩階段調(diào)度的集群管理器.基于其兩階段調(diào)度特性,用戶需要能夠使用Mesos的Mesos框架(比如Marathon,Aurora,Singularity),才能夠像Kubernetes調(diào)度器那樣工作.高度簡(jiǎn)化來說,Mesos用來管理集群資源,并且向其提供高層級(jí)的能接受這些資源來啟動(dòng)任務(wù)的框架.Mesos作為數(shù)據(jù)中心管理系統(tǒng),適用于任何開發(fā)框架和應(yīng)用.
- Kubernetes是基于Borg理念而設(shè)計(jì)的容器集群管理器.Google的集群管理器沒有兩階段調(diào)度的概念,而針對(duì)容器的集群管理具有輕量化、模塊化、便捷等特點(diǎn);除了兩階段調(diào)度,Mesos和Kubernetes還有很多區(qū)別,比如它們的依賴(Zookeeper、Etcd等等)以及使用方式等等.
值得一提的是,Mesos正在接受Kubernetes的理念,你可以在Mesos集群上搭建Kubernetes并部署Kubernets應(yīng)用.
Kubernetes on Mesos正是這樣一個(gè)項(xiàng)目:https://kubernetes.io/docs/getting-started-guides/mesos/
文章來自微信公眾號(hào):運(yùn)維之美
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/4204.html