2014-07-01 80 views
3

如您所知,Cassandra集羣具有複製功能,以防止數據丟失,即使集羣中的某些節點關閉。但是,如果管理員意外刪除了一個包含大量數據的表,並且該命令已由集羣中的所有副本執行,這是否意味着您丟失了該表並且無法恢復該表?服務器停機時間短是否有什麼建議來應對這種災難?當出現故障時恢復cassandra集羣數據drop table

回答

5

從卡桑德拉docs

auto_snapshot (默認值:true)啓用或禁用的快照是否密鑰空間截短或表的滴之前取得的數據的。爲防止 數據丟失,強烈建議使用默認設置。如果您將 設置爲false,則將丟失截斷或丟棄數據。

+0

感謝您的回答。大量數據需要很長時間才能恢復嗎? – lncnb91

+1

在恢復過程中沒有實際的數據被複制,所以速度非常快。但我也建議在此之後運行相當緩慢的'nodetool repair'任務,以確保恢復的數據完全一致。 – shutty

0

如果管理員已經刪除了所有節點中的數據並複製,那麼在沒有一致備份的情況下很難恢復數據。

也許考慮到cassandra中的刪除不會立即執行,您可以恢復數據。當你刪除數據時,cassandra用墓碑代替數據。墓碑然後可以傳播到錯過了初始刪除請求的副本。

參見http://wiki.apache.org/cassandra/DistributedDeletes

列標有墓碑存在一個配置的時間(由gc_grace_seconds值在列家族組中定義的),然後通過壓縮處理將被永久刪除之後的時間已經期滿。默認值是10天。

按照About Deletes中的說明,如果您關閉了一些節點,並等到壓縮成功並且數據完全從SSTables中刪除,然後再次打開節點,則數據可能再次出現。但是這隻會發生,如果你不在節點上進行定期維修操作。

我從來沒有嘗試過這個,它只是一個想法,讓我讀到cassandra文檔。

+0

謝謝。我的問題包括在所有節點中複製刪除的情況。假設刪除還沒有傳播,我們怎麼知道哪個節點仍然保存着數據,即使我們知道,我們仍然需要等到數據恢復成功,這會造成很多經濟損失。 – lncnb91