論技術原理的相通性示例之三:Master可用性

在分佈式架構中,Master/Slave架構是主流架構之一,通常表現爲一主多從的服務器部署結構,其中Master是整個架構的核心節點。Master/Slave架構中關於Master存在一個普遍性的問題,即如何確保Master的高可用性。

通常,我們可以採用熱備方案實現Master的高可用。在熱備方案中,存在一個Active Master和若干個Standby Master,當Active Master失效時,從若干個Standby Master中挑選一個作爲Active Master。爲了能夠實現Active Master和Standby Master之間的無縫切換,一般都會採用共享存儲的解決方案,即Active Master不斷寫入信息,Standby Master不斷同步信息,當主備切換時,選中的Standby Master保證信息完全同步之後再切換到Active Master。這裏的共享存儲實現媒介可以包括Zookeeper、NFS、HDFS、BookKeeper和QJM(Qurom Journal Manager)等,簡單起見我們還是基於Zookeeper來討論如何實現Active Master和Standby Master的切換過程,也將依賴前面Zookeeper示例中提到的臨時節點和Watcher機制。

Master/Slave架構應用非常廣泛,幾乎所有的非對等性分佈式系統中都採用了這一架構。在本節中,我們將使用大數據技術體系中的YARN架構作爲示例來講解Master的可用性。YARN架構的結構圖如下所示,可以看到通過ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)和Container之間的分佈式調用構成了整體的工作流程。這裏ResourceManager就是Master,負責集羣中所有資源的統一管理和分配,接收來自各個節點(NodeManager)的資源彙報信息,並把這些信息按照一定的策略分配給各個應用程序。

    YARN的ResourceManager高可用方案採用多個ResourceManager並存的方式,其中一個處於Active狀態,當Active ResourceManager失效時,處於Standby的ResourceManager就會通過競爭選舉產生新的Active節點。YARN就是使用Zookeeper來實現這一過程,包括以下三個主要步驟:

下面對這三個步驟做簡單展開:

  •  創建鎖節點

所有的ResourceManager在啓動的時候都會去競爭寫一個Lock子節點,該節點爲臨時節點,Zookeeper能夠爲我們保證最終只有一個ResourceManager能夠創建成功。創建成功的那個ResourceManager就切換爲Active狀態,沒有成功的那些ResourceManager則切換爲Standby狀態。

  • 註冊Watcher監聽

所有處於Standby狀態的ResourceManager都會對處於Active狀態的ResourceManager節點註冊一個節點變更的Watcher監聽。利用Watcher機制,能夠快速感知到處於Active狀態的ResourceManager節點的運行情況。

  • 主備切換

當Active狀態的ResourceManager出現諸如宕機或重啓的異常情況時,其在ZooKeeper上連接的客戶端會話就會失效,因此該臨時節點就會被刪除。此時其餘各個Standby狀態的ResourceManager就都會接收到來自ZooKeeper服務端的Watcher事件通知,然後會重複進行步驟一的操作。

上述三個步驟的示意圖參考下圖。該示意圖中展示的工作流程在很多確保Master可用性的分佈式架構中都有所體現,可以理解爲一種通用的知識體系。當我們面對不同的工具或框架時,回想這張示意圖能夠幫助我們快速掌握背後的原理。

更多內容可以關注我的公衆號:程序員向架構師轉型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章