Ambari學習筆記-Ambari架構【轉載】

Ambari是hadoop分佈式集羣配置管理工具,是由hortonworks主導的開源項目。它已經成爲apache基金會的孵化器項目,已經成爲hadoop運維繫統中的得力助手,引起了業界和學術界的關注。

Ambari採用的不是一個新的思想和架構,也不是完成了軟件的新的革命,而是充分利用了一些已有的優秀開源軟件,巧妙地把它們結合起來,使其在分佈式環境中做到了集羣式服務管理能力、監控能力、展示能力。這些優秀開源軟件有:

    • 在agent端,採用了puppet管理節點;
    • 在Web端,採用了ember.js作爲前端的MVC構架和NodeJS相關工具,用handlebars.js作爲頁面渲染引擎,在CSS/HTML方面還用了Bootstrap 框架;
    • 在Server端,採用了Jetty, Spring,Jetty,JAX-RS等;
    • 同時利用了Ganglia,Nagios的分佈式監控能力。

Ambari架構採用的是Server/Client的模式,主要由兩部分組成:ambari-agent和ambari-server。ambari依賴其它已經成熟的工具,例如其ambari-server 就依賴python,而ambari-agent還同時依賴ruby, puppet,facter等工具,還有它也依賴一些監控工具nagios和ganglia用於監控集羣狀況。其中:

  1. puppet是分佈式集羣配置管理工具,也是典型的Server/Client模式,能夠集中式管理分佈式集羣的安裝配置部署,主要語言是ruby。
  2. facter是用python寫的一個節點資源採集庫,用於採集節點的系統信息,例如OS信息,主機信息等。由於ambari-agent主要是用python寫的,因此用facter可以很好地採集到節點信息。

一、Ambari系統架構

除了ambari-server和ambari-agent,ambari還提供一個界面清亮的管理監控頁面ambari-web,這些頁面由ambari-server提供。ambari-server開放了REST API,這些API也主要分兩大類,其中一類爲ambari-web提供管理監控服務,另一類用於與ambari-agent交互,接受ambari-agent向ambari-server發送的心跳請求。下圖是Ambari的系統架構。其中master模塊接受API和Agent Interface的請求,完成ambari-server的集中式管理監控邏輯,而每個agent節點只負責所在節點的狀態採集及維護。

52fa1fbc-e2ad-369b-9028-ecc6ce25502c

二、Ambari-Agent內部架構

ambari-agent是一個無狀態的。其功能主要分兩部分:

  1. 採集所在節點的信息並且彙總發心跳彙報給ambari-server;
  2. 處理ambari-server的執行請求。

因此它有兩種隊列:

  1. 消息隊列MessageQueue,或爲ResultQueue。包括節點狀態信息(包括註冊信息)和執行結果信息,並且彙總後通過心跳發送給ambari-server;
  2. 操作隊列ActionQueue。用於接收ambari-server返回過來的狀態操作,然後能過執行器按序調用puppet或python腳本等模塊完成任務。

09b223bb-e18c-3280-8f77-bd604518a2b5

三、Ambari-Server內部架構

ambari-server是一個有狀態的,它維護着自己的一個有限狀態機FSM。同時這些狀態機存儲在數據庫中,前期數據庫主要採用postgres。如下圖所示,server端主要維護三類狀態:

  1. Live Cluster State:集羣現有狀態,各個節點彙報上來的狀態信息會更改該狀態;
  2. Desired State:用戶希望該節點所處狀態,是用戶在頁面進行了一系列的操作,需要更改某些服務的狀態,這些狀態還沒有在節點上產生作用;
  3. Action State:操作狀態,是狀態改變時的請求狀態,也可以看作是一種中間狀態,這種狀態可以輔助Live Cluster State向Desired State狀態轉變。

a1ceaae2-189e-3cce-bcf3-3be37139a3ca

Ambari-server的Heartbeat Handler模塊用於接收各個agent的心跳請求(心跳請求裏面主要包含兩類信息:節點狀態信息和返回的操作結果),把節點狀態信息傳遞給FSM狀態機去維護着該節點的狀態,並且把返回的操作結果信息返回給Action Manager去做進一步的處理。

Coordinator模塊又可以稱爲API handler,主要在接收WEB端操作請求後,會檢查它是否符合要求,stage planner分解成一組操作,最後提供給Action Manager去完成執行操作。

因此,從上圖就可以看出,Ambari-Server的所有狀態信息的維護和變更都會記錄在數據庫中,用戶做一些更改服務的操作都會在數據庫上做一些相應的記錄,同時,agent通過心跳來獲得數據庫的變更歷史。

轉載來源:http://www.toxingwang.com/hadoop/2356.html

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