ZooKeeper運維之使用SnapshotFormatter視覺化快照資料

五柳-先生發表於2015-11-25

在ZooKeeper的運維過程中,我們經常會碰到這樣的問題,就是快照資料檔案越來越大,但是ZooKeeper上的資料節點數量並沒有相應的增加。

這說明什麼問題:一定是有客戶端在將ZooKeeper當資料庫使用了。長此以往,必然會引起ZooKeeper記憶體資料過大而影響效能及叢集間的資料同步。

那麼有沒有辦法能夠排查此類問題呢?解決方法是有的,我們首先需要使用SnapshotFormatter視覺化快照資料。

資料快照機制是ZooKeeper用來定時進行記憶體全量資料dump,每次資料快照都會生成磁碟上的一個snapshot檔案,例如:snapshot.300000007。

但是令人沮喪的是,這個檔案是二進位制格式的,無法看出任何有意義的資料資訊。

幸好,ZooKeeper提供給我們一個視覺化快照資料的工具:SnapshotFormatter

使用方法如下

java  SnapshotFormatter 快照資料檔案

例如我們對上面提到的事務日誌對應的快照資料檔案進行視覺化轉換:

java SnapshotFormatter snapshot.300000007

輸出內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ZNode Details (count=7):
----
/
  cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Thu Jan 01 08:00:00 CST 1970
  pZxid = 0x00000300000003
  cversion = 2
  dataVersion = 0
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 0
----
/test_log
  cZxid = 0x00000300000003
  ctime = Tue Sep 03 07:08:40 CST 2012
  mZxid = 0x00000300000004
  mtime = Tue Sep 03 08:13:54 CST 2012
  pZxid = 0x00000300000006
  cversion = 1
  dataVersion = 1
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 2
----
……


從上面的輸出中,我們就可以看到ZooKeeper上的所有節點資訊了,其中會看到有個dataLength屬性,這個就是該資料節點的資料大小了。排序就可以排查出異常節點了。


本文出自 “ni掌櫃部落格” 部落格,請務必保留此出處http://nileader.blog.51cto.com/1381108/983259

相關文章