1. 程式人生 > >監控HBase叢集

監控HBase叢集

任何生產系統的一個關鍵點就是運維人員監控其狀態和表現的能力。當問題發生時,運維人員最不希望做的事情就是篩查數GB或TB的日誌來搞清楚系統的狀態和問題的根源。沒有人願意為搞清楚發生了什麼情況而去閱讀跨多臺伺服器的成千上萬行日誌記錄。這種情況下,你記錄的詳細指標開始發揮作用。在一個像HBase這樣達到生產品質的資料庫裡發生著很多事情,每件事情可以用不同的方法進行測量。這些測量結果被系統輸出出來,可以被用來記錄它們的外部框架所捕獲,然後提供給運維人員使用。

注意 由於涉及到許多元件,無論就構成系統的不同元件還是就運營規模而言,在分散式系統中運維是尤其困難的。

收集和圖形指標顯示的功能並不是HBase獨有的,在任何一個成功的系統中都可以找到這樣的功能,無論其規模大小。但是不同的系統實現的方式有所不同。本節中,我們將討論HBase如何輸出這些指標,以及用來捕獲這些指標和透過這些指標瞭解叢集效能表現的框架。我們還會討論HBase輸出的指標、其含義、以及如何使用這些指標在問題發生時告警。

提示 我們建議,甚至在採用HBase的原型階段就應該建立起完整的指標收集、圖形顯示和監控體系。這可以幫助你熟悉運營HBase的各個方面,並且有利於更順暢地過渡到生產環境。此外,當系統接受訪問請求時,能夠看到表示這些請求的漂亮的圖形也是件有趣的事情。因為你會更加了解在應用與HBase互動時底層系統都發生了什麼,所以這在應用系統的開發程序中也會有所幫助。

1 HBase如何輸出指標

這種指標框架是HBase依賴於Hadoop的另一個體現。HBase與Hadoop緊密結合在一起,HBase使用Hadoop的底層指標框架來輸出自己的指標資訊。在編寫本書的時候,HBase還在使用指標框架v1(metrics framework v1)[1]

。讓HBase使用更新更好指標框架版本的工作正在進行中[2] ,但還沒有完成。

除非你想涉足這些框架的開發,否則沒有必要去深究指標框架的具體實現方法。如果你的目標是框架開發的話,請你務必深入瞭解那些程式碼。但如果你只是對在你的應用系統中使用HBase指標感興趣的話,你只需要知道如何配置框架和輸出指標的方法即可,這就是我們接下來要討論的內容。

這種指標框架的工作方式是基於對MetricsContext介面的context實現來輸出指標資訊。你可以使用的兩個預裝的實現是:Ganglia context和File context。除了這兩個context實現之外,HBase還可以使用Java Management Extensions(JMX)[3]

來輸出指標。

2 收集和圖形展示指標

指標方案涉及兩部分功能:收集(collection)和圖形展示(graphing)。通常這兩部分功能都被內建在同一個框架下,但這並不是必須的。收集功能用來收集被監控的系統產生的指標資訊,並將這些指標資訊高效儲存起來,以便將來可以使用。這部分功能也會按照日、月或年為單位執行彙總的工作。大多數情況下,超過一年的細粒度指標資料和同一個指標的年度彙總資料一樣沒有什麼用處。

圖形展示功能使用收集框架捕獲和儲存的資料,以圖形和漂亮圖片的形式展示出來,方便終端使用者檢視。運維人員檢視這些圖形,可以快速洞察系統的狀態。通過在圖形上設定閥值,你可以輕鬆瞭解系統是否執行在預期範圍裡。根據這些圖形,當墨菲定律生效[4] 時(可能超過閾值的指標一定會超過閾值)你可以採取措施以免最終應用受到影響

現在有很多種收集和圖形展示工具可以使用。但並不是所有的工具都能夠緊密整合Hadoop和HBase輸出指標的方式。你的選擇被限定在Ganglia(原生支援Hadoop指標框架)或者一些通過JMX收集指標資訊的框架。

GANGLIA

Ganglia()[5] 是一種被設計用來監控叢集的分散式監控框架。它是在加州大學伯克利分校開發的開源專案。Hadoop和HBase社群一直使用它作為監控叢集的業界標準方案。

為了配置HBase把指標資訊輸出到Ganglia,你需要設定$HBASE_HOME/conf/目錄下的hadoop-metrics.properties檔案中的引數。你需要配置的內容取決於你選擇使用的Ganglia版本。對於3.1以前的版本,應該使用GangliaContext。而3.1及以後的版本,應該使用GangliaContext31。對於Ganglia3.1及以後的版本,我們配置hadoop-metrics.properties檔案如下所示:

hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31

hbase.period=10

hbase.servers=GMETADHOST_IP:PORT

jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext31

jvm.period=10

jvm.servers=GMETADHOST_IP:PORT

rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext31

rpc.period=10

rpc.servers=GMETADHOST_IP:PORT

當你完成Ganglia的安裝和配置,並且使用這些配置屬性啟動HBase守護程序後,Ganglia的指標列表會顯示HBase輸出的指標資訊,如圖10.1所示。

10.1 設定用Ganglia收集HBase的指標資訊。注意下拉指標列表中的HBase和JVM指標列表。

JMX

除了使用Hadoop指標框架輸出指標資訊之外,HBase也可以通過JMX輸出指標資訊。一些開源工具,例如Cacti和OpenTSDB,可以通過JMX收集指標資訊。JMX指標資訊也可以透過Master和RegionServer的web使用者介面以JSON格式檢視:

Master的JMX 指標資訊: http://master_ip_address:port/jmx

某個特定RegionServer的JMX 指標資訊: http://region_server_ip _address:port/jmx

Master的預設埠是60010,RegionServer的預設埠是60030.

基於檔案

HBase還可以被設定把指標資訊輸出到平面檔案裡。指標資訊自動新增到檔案末尾。基於context實現的不同,新增的指標資訊可以帶或者不帶時間戳。因為基於檔案的指標資訊以後難以使用,所以這不是一個令人滿意的記錄指標的方法。雖然我們沒有遇到過把指標資訊記錄到檔案裡進行動態監控的產品,但這仍然是記錄指標資訊供將來分析的一種選擇。

為了把指標資訊記錄到檔案裡,hadoop-metrics.properties檔案的配置內容如下所示:

hbase.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext

hbase.period=10

hbase.fileName=/tmp/metrics_hbase.log

jvm.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext

jvm.period=10

jvm.fileName=/tmp/metrics_jvm.log

rpc.class=org.apache.hadoop.hbase.metrics.file.TimeStampingFileContext

rpc.period=10

rpc.fileName=/tmp/metrics_rpc.log

讓我們看看HBase輸出的這些指標,你可以利用它們來洞察叢集的健康狀況和效能。


[1] Hadoop指標框架v1,Apache Software Foundation,。

[2] Hadoop指標框架v2,Apache Software Foundation,。

[3] Qusay H. Mahmoud, “Getting Started with Java Management Extensions (JMX): Developing Management and Monitoring Solutions,” Oracle Sun Developer Network, January 6, 2004, 。

[5] Monitoring with Ganglia,Matt Massie等編寫,預計2012年11月發行,全面介紹了監控和Ganglia。參見。