Tair監控及統計技巧


    Tair是淘寶自主開發的一個分布式 key/value 存儲系統。Tair 分為持久化和非持久化兩種使用方式. 非持久化的 Tair 可以看成是一個分布式緩存. 持久化的 Tair 將數據存放於磁盤中. 為了解決磁盤損壞導致數據丟失, Tair 可以配置數據的備份數目, Tair 自動將一份數據的不同備份放到不同的主機上, 當有主機發生異常, 無法正常提供服務的時候, 其於的備份會繼續提供服務.項目主頁參見:淘寶Tair.

    受NoSQLFan上的一遍文章Redis監控技巧   一文的啟發,本文系統的總結下我們在生產環境使用Tair時進行的各類監控和統計,希望對開源社區有所回饋。

    Tair最直接的監控和獲取統計信息的方法是采用其提供的工具tairclient,按照如下方式使用,可以獲取很多狀態信息:

./sbin/tairclient -g group_1 -c tair_configserver_ip:port -l stat
  • 配額信息
  • dataserver存活信息
  • 每個area(類似於namespace的信息)的dataSize,evictCount,getCount(per second),hitCount(per second),itemCount,putCount(per second),removeCount(per second),useSize信息
  • 是否正在遷移(isMigrating false)
  • group狀態,代表是否有桶丟失(group_name status OK)

     對於上述信息有如下說明:

     1.dataSize和itemCount可能並不精確,參見“統計的itemcount問題”;

     2.dataSize、evictCount等,也可以通過tair_client_api.hpp的get_data_stat接口獲取,可以進行更靈活的統計和計算;

     3.由於tair bucket的桶遷移並不常見,所以監控遷移狀態作為一種預警非常有必要;

     4.監控group狀態,如果不為OK,證明有bucket的所有副本均丟失,此時tair的configserver不會rebuild分配表,需要人工介入處理;

     服務狀態監控

     使用客戶端模擬客戶請求,如果連續5次均失敗,證明訪問出現問題,需要報警。此處需要注意的是,構造的key必須是隨機的。(因為根據tair的hash算法,同樣的key會一直落到同一個bucket);

     配置監控

     group.conf是由tair configserver使用,並自動在master slave間同步的配置文件。該文件有許多重要的信息,比如副本數、dataserver地址、area capacity等信息,可能經常需要手工進行修改。因此,為了保證嚴格一致,我們使用inotify結合rsync對group.conf的一致性進行監控,如果在任何狀況下,發現master和slave的group.conf不一致,則報警。

     ldb level 0文件數目監控

     tair的ldb存儲引擎使用的是google開源的leveldb,其level0的文件數會影響到讀取性能(超過一定值,會減慢請求,甚至是掛起請求)。在tair出現大量bucket遷移時,有可能會出現level 0文件數驟增,因此需要對level 0文件數做監控,超過閾值報警。

     獲取level 0文件數的方法非常簡單,只需如下一行語句:

tac $log_file | grep -m 1 "compacted to:" | awk '{print $6}'

     $log_file是ldb目錄下的LOG文件。

     內存級kv使用空間監控

     tair的內存級存儲引擎類似於memcache,由於我們的業務方有部分是將內存級當作准存儲在使用,所以有必要對內存級area的area使用的內存空間做監控,如果達到閾值(如設定capacity的80%)則給業務方報警,避免不必要的數據evict。

     thrift層面的監控

    為了方便多種語言的訪問,同時為了進行管控,我們提供了thrift形式的訪問接口,在thrift層面做了大量的工作。針對thrift,我們統計了不同db的訪問量、占用空間、QPS、訪問時延等數據,用來在訪問質量出現下降時報警,同時每天發出統計報表。這個層面的報警統計可以和tair的統計配合使用。   

     bucket分布表和遷移狀態

     Tair的桶分布表記錄在configserver/data/目錄下,使用cst_monitor工具,可以查看最新的桶分布表,同時在存在數據遷移時,可以查看最終生成的表,以及實時遷移表,使用這份數據,結合tairclient可以預估遷移進度。使用方式如下:

./cst_monitor ../configserverdir/data/group_1_server_table

     注:以上監控項,涉及到趨勢的,均使用ganglia做前端,可以使用gmetric或自行編寫插件,方便的將數據導入ganglia。ganglia還順便用於分析cpu\memory\disk等的使用情況。

    

     除以上所述監控外,為了提高服務質量,便於迅速的定位問題,我們還在對ldb存儲引擎內部進行剖析和監控,具體參見下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM