引言: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
mesos master的職責是管理叢集中在每台機器上運作的mesos slave守護程序。通過zookeeper和master之間協調哪個節點是主master,哪些節點作為備用存在,它們将在主master離線時接管服務。
主master節點使用可插拔的配置設定子產品或排程算法來分發資源供給至各種排程器,進而決定将什麼資源提供給某一特定的framework。排程器依據其上是否有任務需要執行來決定接收或拒絕資源供給。
mesos叢集至少要求有一個master節點。在生産環境為了保證高可用性,推薦采用三個甚至更多的master節點。你可以将zookeeper在與master相同的機器上運作,或者使用獨立zookeeper叢集。
在叢集中負責執行framework任務的伺服器被稱為mesos slave節點,它們通路zookeeper來确定主master節點,将cpu、記憶體、存儲資源以資源供給的形式宣告給主master。當排程器從主master接收資源供給後,在slave節點上啟動一個或多個執行器,執行器負責運作framework的任務。
mesos slave也能夠基于屬性與資源進行配置,進而允許它們定制特定環境。屬性配置是鍵值對形式,可以包含類似于節點所在機房位置資訊。資源配置可以替代mesos自動探測發現slave節點的有效資源,并由使用者指定具體的cpu、記憶體、磁盤資源資訊。屬性配置與資源配置的示例資訊如下:
在屬性配置中對mesos節點的資料中心、節點位置、作業系統進行了說明,在資源配置中使用者指定了該節點提供的cpu、記憶體和磁盤資源。在日常維護中,這些資訊對保證應用線上運作不受影響特别有用。使用這些配置資訊,資料中心的運維人員可以在整個機櫃甚至整排機櫃離線日常維護時不影響使用者。
framework是表示mesos應用的術語,它負責在叢集上排程與執行任務。framework由兩個元件組成:排程器與執行器。
排程器是典型的長運作态服務,負責與mesos master連接配接,接收或拒絕資源供給。mesos将排程的職責委派給了framework,而不是試着由自己排程所有的任務執行。排程器基于當下是否有任務需要運作來決定是否接受或拒絕資源供給。排程器通過與zookeeper通信來探測主master的存在,之後将其自己注冊到master中。
執行器是在mesos slave上啟動的一個程序,負責運作framework的任務。在本書寫作之時,mesos内建的執行器允許framework執行shell腳本、docker容器等。mesos支援多種程式設計語言執行器,新的執行器可以與framework綁定在一起,當任務需要它時由mesos slave從framework擷取。
如你所看到的,mesos提供了一個分布式、高可用的架構,master負責整個叢集的排程工作,slave将有效資源通知排程器,并在叢集中執行任務。
想及時獲得更多精彩文章,可在微信中搜尋“博文視點”或者掃描下方二維碼并關注。