《Apache Mesos入門》要點:
本文介紹了Apache Mesos入門,希望對您有用。如果有疑問,可以聯系我們。
相關主題:apache配置

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

Apache Mesos由四個組件組成,分別是Mesos-Master,Mesos-Slave,Framework和Executor.
- 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、Marathon等,這些計算框架可通過注冊的方式接入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的方式.
官方提供的一個資源分配的例子

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