Delete

有人可以簡單地解釋一下 Cassandra nodetool 命令,例如緊湊和清理嗎?

  • August 25, 2022

大家好

我是數據庫新手,我正在嘗試理解一些 Cassandra 命令。我想知道以下命令:

  • 節點工具緊湊
  • 節點工具清理
  • 節點工具修復
  • 節點工具垃圾收集

我將不勝感激一些簡單而清晰的答案,例如 -> nodetool help :它顯示了所有命令及其用法。

我要解決的問題是,在我刪除(大量數據)之後,儲存空間仍然是滿的。我將 gc_grace_seconds 更改為 1 天,但仍然沒有。因此,如果我現在需要手動清除空間,我應該執行哪些命令以及以什麼順序執行?

謝謝你的時間

這是我試圖解釋每個命令的作用。

nodetool compact

一種指示 Cassandra 合併/重寫 SSTables 同時驅逐過期(墓碑)數據的手動方式。當墓碑超過表上配置的 GC 寬限時,它們將被視為過期。

請注意,不建議執行此命令。我已經在這篇文章中解釋了原因——為什麼在表上強制進行主要壓縮並不理想?.

nodetool cleanup

刪除其鍵不再由節點擁有的分區(記錄),因為它擁有的令牌範圍在另一個節點添加到集群後發生了變化。

例如,假設節點 A 擁有令牌範圍 0-100。節點 B 已添加到集群中,其令牌範圍為 80-200。因此,節點 A 不再擁有令牌範圍 80-100 中的數據(現在只擁有令牌範圍 0-79 中的數據)。您將cleanup在此節點上執行以擺脫 80-100 範圍內的數據以回收磁碟空間。

nodetool repair

Cassandra 有一個分佈式架構,其中沒有任何東西是共享的,甚至儲存層也沒有。集群中的每個節點都是一個獨立的實例。

由於這種分佈式特性,節點(副本)上的數據副本可能會不同步。修復是 Cassandra 修復(修復)不一致性的機制。該功能類似於rsync文件系統的工作方式。

nodetool garbagecollect

此命令觸發對 SSTable 的壓縮以刪除“可刪除”已刪除(單元格/行/分區)數據。

此命令非常新,因此在某些情況下它不會驅逐已刪除的數據。“可刪除”的概念非常複雜,特別是因為分區的一部分(即列、行)可以跨多個 SSTable 分段,因此確定是否可以刪除已刪除的數據並不是一件容易的事。

現在對於您的問題,您需要注意設置gc_grace_seconds太低是危險的,因為如果您遇到其中一個節點遇到硬體故障的情況(例如),您需要能夠在 GC 寬限內替換該節點。否則,您不能將該節點放回集群中,因為墓碑已經過期。如果您嘗試將故障節點放回原處,則其他節點不再具有墓碑(它們已被 GCd),因此故障節點上已刪除的數據將重新恢復到您的集群中。

在第一種情況下,您可以嘗試nodetool garbagecollect在有問題的表上執行以嘗試回收空間。如果這不起作用(由於我上面描述的原因),那麼您可以嘗試nodetool compact但要注意我在上面的文章中解釋的後果。乾杯!

引用自:https://dba.stackexchange.com/questions/316036