2013-05-03 60 views
1

對於大約1個月,我在我的Cassandra集羣中看到以下3個節點的使用空間值(我有複製因子= 3)nodetool cfstats output :Cassandra cfstats:Live和Total已用空間值之間的差異

Pending Tasks: 0 
      Column Family: BinaryData 
      SSTable count: 8145 
      Space used (live): 787858513883 
      Space used (total): 1060488819870 

對於其他節點我看到良好的價值觀,是這樣的:

  Space used (live): 780599901299 
      Space used (total): 780599901299 

你可以注意到Live和總面積之間有25%的差異(〜254Gb)。看起來我在這3個節點上有很多垃圾,因爲某些原因無法壓縮。 列家人我說的是有100兆的大小的SSTable配置LeveledCompaction策略:

create column family BinaryData with key_validation_class=UTF8Type 
    and compaction_strategy=LeveledCompactionStrategy 
    and compaction_strategy_options={sstable_size_in_mb: 100}; 

注意,即總價值在所有三個節點爲一個月住。我依靠Cassandra自動標準化數據。

我試圖降低空間(無結果):

  1. nodetool清理
  2. nodetool維修-PR
  3. nodetool緊湊[KEYSPACE] BinaryData(沒有任何反應:主要壓實的LeveledCompaction戰略忽視)

有沒有其他的事情我應該嘗試清理垃圾和可用空間?

+0

你在本月的時間段內是否執行了大量的刪除操作? – abhi 2013-05-03 10:38:23

+0

我想是的,我沒有一個精確的值,它可能會在100Gb-1Tb之間的數據被刪除。但爲什麼我的羣集中只有3個節點存在此問題?爲什麼羣集中其餘節點具有Live == Total?我正在使用Cassandra 1.1.9 – odiszapc 2013-05-03 13:46:41

回答

0

整平壓實創建一個固定的,相對較小的尺寸的sstables,你的情況下它是100Mb被分組到「水平」。在每個 級別,sstables保證不重疊。每個級別的 是以前的十倍。

所以基本上從cassandra doc中提供的這個語句中,我們可以得出結論,可能是在你的情況下十次大的背景沒有形成,導致沒有壓縮。

即將到來的第二個問題,因爲您已將複製因子保留爲3,所以數據有3個重複副本,對此您有這種異常。

Live和Total space之間的最後差距爲25%,因爲您知道它應該在刪除操作之上。

+0

謝謝。但是爲什麼只有3個節點,爲什麼其他節點不會影響這個問題呢?無論如何,看到我的解決方案下面 – odiszapc 2013-05-05 03:25:14

+0

聰明的舉動;)。以及那張卡上一直都有。反正你使用哪種分區器?數據分佈依賴於分區器,這可能會給你爲什麼只有3個受影響的節點。 – abhi 2013-05-05 04:28:24

+0

RandomPartitioner – odiszapc 2013-05-05 10:41:52

0

對於LeveledCompactionStrategy,您希望將sstable大小設置爲大約15 MB的最大值。 100MB會導致大量不必要的磁盤IO,並且會導致數據傳播到更高級別需要很長時間,從而導致刪除的數據長時間滯留。

由於大量的刪除操作,您很可能會通過輕微壓縮來解決一些問題,而不是在Cassandra 1.1中清理已刪除的數據。在Cassandra 1.2中進行輕微壓縮時,有一堆修補程序可用於清理墓碑。尤其是與LCS結合使用時。我會在Dev/QA環境中測試Cassandra 1.2。 1.2仍然有一些扭曲的問題被解決,所以你需要確保跟上最新的安裝新版本,甚至在git中運行1.2分支,但是對於你的數據大小和使用模式,我認爲它會給你一些肯定的改進。

+0

我會試試1.2。請參閱下面的解決方案 – odiszapc 2013-05-05 03:24:40

0

好的,我有一個解決方案。它看起來像Cassandra問題。首先,我深入瞭解了Cassandra 1.1.9源代碼,並指出Cassandra在節點啓動期間對SStables進行了一些重新分析。它刪除標記爲壓縮的SStables,執行重新計算已用空間,並執行其他一些工作。

因此,我所做的是重新啓動3個問題節點。重新啓動完成後,「總計」和「實時」值立即變爲相等,然後壓縮過程已啓動,現在使用的空間正在減少。