2014-07-01 54 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