2017-04-10 270 views
0

我面臨Cassandra的磁盤空間問題。其中一個密鑰空間佔用了將近25GB的空間。由於這張表包含了大量的數據,我開始清理桌面並從1億條記錄中清除了9800萬條記錄。儘管數據清理,仍然cassandra正在佔用25 GB的空間。用新節點替換cassandra集羣中的現有節點

要只對剩餘的2萬條記錄,確保卡桑德拉佔用的磁盤空間,我想實現下面的方法(我有5個卡桑德拉節點的集羣,爲所有keyspaces設置3複製因子):

  1. 將第6個節點添加到現有集羣並關閉現有節點的1(假設第一個節點)(這裏我預計從第1個節點的數據將被複制到新添加的節點,因爲複製因子設置爲3,並且此副本中的一個具有已經下降)
  2. 經過一段時間(考慮到複製數據到新的cassandra節點需要一些時間),重複上述步驟爲接下來的4個新節點(所以我的集羣將c從Cassandra節點中複製新的Cassandra 5節點)

這是正確的方法來解決我的問題嗎?如果這不起作用或不是一個好的解決方案,我想了解其中的原因和任何其他安全的替代方法。

注:我用的卡珊德拉2.1.14

+0

您是否嘗試運行nodetool compact? – DineMartine

+0

不,我沒有。它有幫助嗎? 我讀過的地方不應該手動運行「nodetool compact」。 – Shailesh

回答

0

您沒有提供足夠的信息來真正瞭解發生了什麼事情,但是有些事情要考慮...

  • 爲了爲了在失敗時提供最終的一致性,Cassandra不能立即刪除數據。它必須先寫入NEW數據,稱爲墓碑,然後等待gc_grace_seconds,然後才允許在下一次壓縮中清除墓碑。你還沒有談到做什麼,是通過gc_grace_seconds對墓碑的影響來推理。如果您的墓碑不夠大以至於無法清除,那麼在gc_grace_seconds過去之前(或者您在此維護過程中暫時降低gc_grace_seconds,但在某些情況下,如果遇到此問題,則會出現意外復活數據的風險,所以節點更換和壓縮都不會對您有所幫助在維護期間節點中斷)。
  • 如果您已經完成了gc_grace_seconds vs tombstone age,手動壓縮將恢復您的磁盤空間。如果你使用的是大小一致的壓縮,它也會將你的所有數據壓縮到一個單獨的sstable中,然後在很長一段時間內再次壓縮......導致更多的空間恢復問題。你更新/刪除你的數據。
  • 切換到水平壓實可以幫助解決空間恢復問題。它使用更小的sstables,並保證不超過一定比例的空間將被舊更新或可回收墓碑佔用。儘管如此,如果在寫入容量方面運行羣集「熱」,則級別壓縮對您的磁盤的要求更高,但交換機可能會影響性能。
  • 我認爲節點替換也是回收磁盤的一種可行的策略,但我不記得流式傳輸的所有細節以確定它是否會將陳舊的邏輯刪除或將它們壓縮爲第一個......我認爲它首先壓縮。不過,您可能需要首先在測試平臺上進行驗證。
相關問題