在深入淺出Mesos系列的第一篇文章中,我對相關(guān)的技術(shù)做了簡要概述,在第二篇文章中,我深入介紹了Mesos的架構(gòu)。完成第二篇文章之后,我本想開始著手寫一篇Mesos如何處理資源分配的文章。不過,我收到一些讀者的反饋,于是決定在談資源分配之前,先完成這篇關(guān)于Mesos持久化存儲和容錯的文章。
正如我在前文中討論過的,使用Mesos的主要好處是可以在同一組計算節(jié)點集合上運行多種類型的應(yīng)用程序(調(diào)度以及通過Framework初始化任務(wù))。這些任務(wù)使用隔離模塊(目前是某些類型的容器技術(shù))從實際節(jié)點中抽象出來,以便它們可以根據(jù)需要在不同的節(jié)點上移動和重新啟動。
由此我們會思考一個問題,Mesos是如何處理持久化存儲的呢?如果我在運行一個數(shù)據(jù)庫作業(yè),Mesos如何確保當(dāng)任務(wù)被調(diào)度時,分配的節(jié)點可以訪問其所需的數(shù)據(jù)?如圖所示,在Hindman的示例中,使用Hadoop文件系統(tǒng)(HDFS)作為Mesos的持久層,這是HDFS常見的使用方式,也是Mesos的執(zhí)行器傳遞分配指定任務(wù)的配置數(shù)據(jù)給Slave經(jīng)常使用的方式。實際上,Mesos的持久化存儲可以使用多種類型的文件系統(tǒng),HDFS只是其中之一,但也是Mesos最經(jīng)常使用的,它使得Mesos具備了與高性能計算的親緣關(guān)系。其實Mesos可以有多種選擇來處理持久化存儲的問題:
分布式文件系統(tǒng)。如上所述,Mesos可以使用DFS(比如HDFS或者Lustre)來保證數(shù)據(jù)可以被Mesos集群中的每個節(jié)點訪問。這種方式的缺點是會有網(wǎng)絡(luò)延遲,對于某些應(yīng)用程序來說,這樣的網(wǎng)絡(luò)文件系統(tǒng)或許并不適合。
使用數(shù)據(jù)存儲復(fù)制的本地文件系統(tǒng)。另一種方法是利用應(yīng)用程序級別的復(fù)制來確保數(shù)據(jù)可被多個節(jié)點訪問。提供數(shù)據(jù)存儲復(fù)制的應(yīng)用程序可以是NoSQL數(shù)據(jù)庫,比如Cassandra和MongoDB。這種方式的優(yōu)點是不再需要考慮網(wǎng)絡(luò)延遲問題。缺點是必須配置Mesos,使特定的任務(wù)只運行在持有復(fù)制數(shù)據(jù)的節(jié)點上,因為你不會希望數(shù)據(jù)中心的所有節(jié)點都復(fù)制相同的數(shù)據(jù)。為此,可以使用一個Framework,靜態(tài)地為其預(yù)留特定的節(jié)點作為復(fù)制數(shù)據(jù)的存儲。
Mesos項目還在發(fā)展中,它會定期增加新功能?,F(xiàn)在我已經(jīng)發(fā)現(xiàn)了兩個可以幫助解決持久化存儲問題的新特性:
動態(tài)預(yù)留。Framework可以使用這個功能框架保留指定的資源,比如持久化存儲,以便在需要啟動另一個任務(wù)時,資源邀約只會發(fā)送給那個Framework。這可以在單節(jié)點和節(jié)點集合中結(jié)合使用Framework配置,訪問永久化數(shù)據(jù)存儲。關(guān)于這個建議的功能的更多信息可以從此處獲得。
接下來,我們來談?wù)凪esos在其協(xié)議棧上是如何提供容錯能力的。恕我直言,Mesos的優(yōu)勢之一便是將容錯設(shè)計到架構(gòu)之中,并以可擴展的分布式系統(tǒng)的方式來實現(xiàn)。
Master。故障處理機制和特定的架構(gòu)設(shè)計實現(xiàn)了Master的容錯。
首先,Mesos決定使用熱備份(hot-standby)設(shè)計來實現(xiàn)Master節(jié)點集合。正如Tomas Barton對上圖的說明,一個Master節(jié)點與多個備用(standby)節(jié)點運行在同一集群中,并由開源軟件Zookeeper來監(jiān)控。Zookeeper會監(jiān)控Master集群中所有的節(jié)點,并在Master節(jié)點發(fā)生故障時管理新Master的選舉。建議的節(jié)點總數(shù)是5個,實際上,生產(chǎn)環(huán)境至少需要3個Master節(jié)點。 Mesos決定將Master設(shè)計為持有軟件狀態(tài),這意味著當(dāng)Master節(jié)點發(fā)生故障時,其狀態(tài)可以很快地在新選舉的Master節(jié)點上重建。 Mesos的狀態(tài)信息實際上駐留在Framework調(diào)度器和Slave節(jié)點集合之中。當(dāng)一個新的Master當(dāng)選后,Zookeeper會通知Framework和選舉后的Slave節(jié)點集合,以便使其在新的Master上注冊。彼時,新的 Master可以根據(jù)Framework和Slave節(jié)點集合發(fā)送過來的信息,重建內(nèi)部狀態(tài)。
Framework調(diào)度器。Framework調(diào)度器的容錯是通過Framework將調(diào)度器注冊2份或者更多份到Master來實現(xiàn)。當(dāng)一個調(diào)度器發(fā)生故障時,Master會通知另一個調(diào)度來接管。需要注意的是Framework自身負責(zé)實現(xiàn)調(diào)度器之間共享狀態(tài)的機制。
如下情況則截然不同,計算節(jié)點上Slave正常運行而任務(wù)執(zhí)行失敗。在此,Master負責(zé)監(jiān)控所有Slave節(jié)點的狀態(tài)。
當(dāng)計算節(jié)點/Slave節(jié)點無法響應(yīng)多個連續(xù)的消息后,Master會從可用資源的列表中刪除該節(jié)點,并會嘗試關(guān)閉該節(jié)點。
然后,Master會向分配任務(wù)的Framework調(diào)度器匯報執(zhí)行器/任務(wù)失敗,并允許調(diào)度器根據(jù)其配置策略做任務(wù)失敗處理。通常情況下,F(xiàn)ramework會重新啟動任務(wù)到新的Slave節(jié)點,假設(shè)它接收并接受來自Master的相應(yīng)的資源邀約。
在接下來的文章中,我將更深入到資源分配模塊。同時,我非常期待讀者的反饋,特別是關(guān)于如果我打標(biāo)的地方,如果你發(fā)現(xiàn)哪里不對,請反饋給我。我非全知,虛心求教,所以期待讀者的校正和啟示。我也會在twitter響應(yīng)你的反饋,請關(guān)注 @hui_kenneth。
查看英文原文:?DEALING WITH PERSISTENT STORAGE AND FAULT TOLERANCE IN APACHE MESOS
更多建議: