閱讀583 返回首頁    go 阿裏雲 go 技術社區[雲棲]


由一個STOP命令挖出Ambari如何下發任務

天龍係統部署MINIRDS失敗,重試時,Ambari會對所有已經安裝成功的組件下發一個STOP命令。對這個STOP,處女座的@風煜表示不能忍,so。。。開始啃Ambari源碼之路。。。

抓包發現重試時,前端向server發送了一個PUT請求

ok,這個PUT請求到server端之後,server到底做了什麼呢??

如下圖所示,一個API如何產生部署階段->stage

在Ambari中什麼是stage呢,以部署MINIRDS為例,需要部署GLOBALCONFIG,METADB,BAKDB,PERFDB.....等等等等。

這些任務如PERFDB,BAKDB必須依賴METADB,所以部署PERFDB時必須保證METADB部署完成,所以GLOBALCOONFIG、METADB為第一階段,PERFDB,BAKDB為第二階段。

總體來講,stage的任務規劃是按照DAG的方式來實現的。什麼是DAG?

DAG:在圖論中,如果一個有向圖無法從任意頂點出發經過若幹條邊回到該點,則這個圖是一個有向無環圖(DAG圖)。
因為有向圖中一個點經過兩種路線到達另一個點未必形成環,因此有向無環圖未必能轉化成樹,但任何有向樹均為有向無環圖。

如何實現DAG?

在Ambari server算法中,所有的service作為一個結點(即METADB、GLOBALCONFIG),節點間的依賴關係為eage(邊),如PERFDB依賴METADB,所以有一條METADB指向PERFDB的邊。

如何劃分stage?

遍曆所有節點,將入度(指向該節點的邊的個數)為0的節點作為一個stage,並將這些節點從原來哈希表中刪除。
循環直至,所有節點都劃分完畢。

從數據庫中的數據驗證結果。。。。

為什麼會給安裝好的組件下發STOP命令呢?

這是Ambari Controller的策略。在ambari server中,每個component都有一個狀態機,當重試時,component狀態為INSTALLED時,controller會向對應狀態機執行STOP命令對應的HOST_SERVICE_COMPONENT_EVENT。

最後更新:2017-04-01 13:39:21

  上一篇:go ALICloudDB for PostgreSQL 試用報告 - 1 教你做RDS性能測試
  下一篇:go OSS移動開發實戰2 (30分鍾快速搭建移動應用上傳回調服務)