Cassandra
在 Cassandra 中分配空間
我們執行一個帶有 2 個 DC、每個 3 個節點(2 個 RF)的 Cassandra 集群。集群的狀態非常糟糕(從未修復)並且磁碟已滿,因此我們添加了額外的節點,這些節點在引導過程成功加入集群之後。根據 Cassandra 文件,應該在添加新節點後執行清理,但在我們的例子中:
由於我們從不執行修復(現在執行為時已晚,因為舊節點中的磁碟使用率 > 90 %)數據執行是否安全:
nodetool cleanup
在每個節點中以釋放空間?
乾杯,
jbrl
簡而言之,
nodetool cleanup
將從不再負責的節點中刪除數據。將新節點添加到集群時可能會發生這種情況,因為它們假定令牌範圍曾經由其他節點持有。數據流式傳輸到新節點後,不會自動從預先存在的節點中刪除。這是有意的,因為如果新節點無法引導,則不會失去任何數據。執行 a
cleanup
確實會刪除潛在的孤立副本。通常,在執行之前確保已成功完成修復是一個好主意nodetool cleanup
。在這種情況下,由於
repair
從未執行過,我無法想像應用程序使用者此時真的關心數據一致性。但是要嘗試的一件事可能是cleanup
在一個節點上執行以獲取一些空間,然後repair
在同一個節點上執行。在每個集群上執行repair
/cleanup
(按此順序)。這應該可以最大限度地減少數據失去的風險,同時允許恢復一些表面上的一致性。
如果您的磁碟空間較少,則可以按如下方式執行清理鍵空間和表。
對鍵空間和表使用“nodetool cleanup keyspace_name table_name”
有關更多詳細資訊,請參閱以下連結 https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsCleanup.html