适当的cassandra键空间恢复过程

时间:2014-04-04 15:47:59

标签: cassandra backup restore

我正在寻找确认我的Cassandra备份和恢复程序是否合理并且我没有遗漏任何东西。您能否确认,或告诉我某些事情是否不正确/缺失?

备份

  • 我通过" nodetool snapshot keyspace_name -t current_timestamp"每天运行我关心的密钥空间的完整备份。拍摄快照后,我将数据复制到专用于备份的已装载磁盘,然后执行" nodetool clearsnapshot $ keyspace_name -t $ current_timestamp"
  • 我还运行每小时增量备份 - 执行" nodetool flush keyspace_name"然后将文件从每个键空间的备份目录移动到备份挂载点

恢复

到目前为止,我发现进行恢复(并经过测试/确认)的唯一有效方法是在集群中的所有Cassandra节点上执行此操作:

  1. 停止Cassandra
  2. 清除commitlog * .log文件
  3. 清除我要恢复的表中的* .db文件
  4. 将快照/完整备份文件复制到该目录中
  5. 复制我需要的任何增量文件(我没有使用多个增量进行测试,但我假设我必须按顺序覆盖文件,从最旧到最新)
  6. 启动Cassandra
  7. 在其中一个节点上,运行" nodetool repair keyspace_name"
  8. 所以我的问题是:

    1. 上述备份和恢复策略是否有效?是否有任何步骤不准确或遗失?
    2. 有没有办法在不停止每个节点上的Cassandra的情况下执行此操作?例如,有没有办法在一个节点上恢复数据,然后以某种方式使它成为权威的#34;?我试过这个,并且,正如预期的那样,由于恢复的数据较旧,其他节点(较新的)上的数据会在修复期间同步时覆盖。
    3. 谢谢!

1 个答案:

答案 0 :(得分:0)

有两种方法可以在不重新启动C *的情况下恢复Cassandra备份:

  1. 将文件复制到位,然后运行" nodetool refresh"。这有一点需要注意,行仍然比墓碑更旧。因此,如果您尝试恢复已删除的数据,则无法执行您想要的操作。它也只适用于本地服务器(您以后想要修复)
  2. 使用" sstableloader"。这会将数据加载到所有节点。您需要确保从完整副本中获得sstables,这可能意味着从多个节点加载sstables。添加奖励,即使群集大小已更改,此功能仍然有效。我不确定这里的订购是否重要(也就是说,我不知道行时间戳是通过加载保留还是在加载过程中重新定义)