摘要: 2010年,一個旨在解決擴容問題的項目誕生——Apache Mesos,它在某種程度上對CPU、記憶體、磁碟資源進行抽象,從而允許整個資料中心如同單台大伺服器般運轉。無需虛擬機器和作業系統,Mesos創造了一個單獨底層的叢集為應用提供所需資源。
引言:2010年,一個旨在解決擴容問題的項目誕生——Apache Mesos,它在某種程度上對CPU、記憶體、磁碟資源進行抽象,從而允許整個資料中心如同單台大伺服器般運轉。無需虛擬機器和作業系統,Mesos創造了一個單獨底層的叢集為應用提供所需資源。
本文將向您簡單介紹Mesos分布式架構,詳細討論請見《Mesos 實戰》一書。
Mesos通過引入一層抽象,提供了一種像管理單台大伺服器般的方法來管理整個資料中心。你可以認為Mesos與當今虛擬化解決方案類似:像hypervisor一樣抽象物理CPU、記憶體、磁碟資源,之後以虛擬機器形式呈現。Mesos做相同的事情,但其將資源直接提供給應用。
除了提升整體資源的利用率外,Mesos還一開始就支援分布式、高可用及容錯。通過使用容器技術,如Linux control groups (cgroups)和Docker,Mesos實現了進程間隔離,允許多個應用運行在同一機器上。你也許曾搭建過三個叢集,分別運行著Memcached、Jenkins CI和Ruby on Rails應用,現在你只需部署一個Mesos叢集就可以運行所有的應用了。
為了提供規模化服務,Mesos提供了一套分布式、容錯性架構來完成資源的細粒度分配。這套架構包括三個組件:master、slave及運行在其上的應用本身(通常稱為framework)。Mesos依賴於Apache ZooKeeper,一個分布式的資料存放區系統,專用於叢集內的協調同步leader投票選舉,以及Mesos master、slave和framework間的leader發現。
在下圖中,你能夠看見這些架構組件如何在一起工作,從而提供一個穩定的平台來部署應用。
Mesos架構圖,包括一個或多個master、slave和framework masters
Mesos master的職責是管理叢集中在每台機器上啟動並執行Mesos slave守護進程。通過ZooKeeper和master之間協調哪個節點是主master,哪些節點作為備用存在,它們將在主master離線時接管服務。
主master節點使用可插拔的分配模組或調度演算法來分發資源供給至各種調度器,從而決定將什麼資源提供給某一特定的framework。調度器依據其上是否有任務需要執行來決定接收或拒絕資源供給。
Mesos叢集至少要求有一個master節點。在生產環境為了保證高可用性,推薦採用三個甚至更多的master節點。你可以將ZooKeeper在與master相同的機器上運行,或者使用獨立ZooKeeper叢集。 slaves
在叢集中負責執行framework任務的伺服器被稱為Mesos slave節點,它們訪問ZooKeeper來確定主master節點,將CPU、記憶體、儲存資源以資源供給的形式宣告給主master。當調度器從主master接收資源供給後,在slave節點上啟動一個或多個執行器,執行器負責運行framework的任務。
Mesos slave也能夠基於屬性與資源進行配置,從而允許它們定製特定環境。屬性配置是索引值對形式,可以包含類似於節點所在機房位置資訊。資源配置可以替代Mesos自動探測發現slave節點的有效資源,並由使用者指定具體的CPU、記憶體、磁碟資源資訊。屬性配置與資源配置的樣本資訊如下:
--attributes='datacenter:pdx1;rack:1-1;os:rhel7'--resources='cpu:24;mem:24576;disk:409600'
在屬性配置中對Mesos節點的資料中心、節點位置、作業系統進行了說明,在資源配置中使用者指定了該節點提供的CPU、記憶體和磁碟資源。在日常維護中,這些資訊對保證應用線上運行不受影響特別有用。使用這些配置資訊,資料中心的營運人員可以在整個機櫃甚至整排機櫃離線日常維護時不影響使用者。 frameworks
framework是表示Mesos應用的術語,它負責在叢集上調度與執行任務。framework由兩個組件組成:調度器與執行器。 1 . 調度器
調度器是典型的長運行態服務,負責與Mesos Master串連,接收或拒絕資源供給。Mesos將調度的職責委派給了framework,而不是試著由自己調度所有的任務執行。調度器基於當下是否有任務需要運行來決定是否接受或拒絕資源供給。調度器通過與ZooKeeper通訊來探測主master的存在,之後將其自己註冊到master中。 2 . 執行器
執行器是在Mesos slave上啟動的一個進程,負責運行framework的任務。在本書寫作之時,Mesos內建的執行器允許framework執行shell指令碼、Docker容器等。Mesos支援多種程式設計語言執行器,新的執行器可以與framework綁定在一起,當任務需要它時由Mesos slave從framework擷取。
如你所看到的,Mesos提供了一個分布式、高可用的架構,master負責整個叢集的調度工作,slave將有效資源通知調度器,並在叢集中執行任務。
原文連結