Cassandra:备份整个密钥空间

时间:2012-05-05 21:36:55

标签: cassandra backup

我只是想知道在Cassandra中备份整个键空间的最佳方法是什么......你怎么看?

以前我只是将数据文件夹复制到我的备份硬盘中,但是在更新后我遇到了恢复数据库的问题。

4 个答案:

答案 0 :(得分:13)

最好的方法是拍摄快照(nodetool snapshot)。您可以在Datastax documentation(免责声明:我为Datastax工作)中学到很多关于它如何工作以及如何最好地使用它的信息。

您需要确保已启用JNA(可在this page上找到一些相关说明)。如果你这样做,快照非常快;它们只是现有sstables的硬链接。不需要复制。如果要以特定方式跟踪备份,可以将快照与其他备份工具(或仅rsync,cp等)结合使用。

答案 1 :(得分:7)

我编写了一个简单的python工具来自动化群集快照和备份,并将它们存储在S3上。

https://github.com/tbarbugli/cassandra_snapshotter是github页面,在那里你也可以找到文档

答案 2 :(得分:6)

除了阅读Datastax documentation之外,我发现文章"incrementally backup up cassandra with amanda"具有洞察力。它是关于如何使用增量备份和快照的。

最后,它建议采用以下程序:

  1. 完全备份
    • 删除旧的增量文件和符号链接。
    • nodetool snapshot
    • 将所有快照文件符号链接到备份目录
    • 备份解除引用符号链接的目录。
    • nodetool clearsnapshot并删除符号链接。
  2. 增量备份(不要与cassandra的内置增量备份混淆):
    • nodetool flush
    • 将所有增量文件符号链接到备份目录中。
    • 备份解除引用符号链接的目录。
  3. 恢复
    • 恢复上次完整备份和所有增量备份。

答案 3 :(得分:4)

另一个选择是监视正在写入的sstables,并逐步备份这些文件。

例如,查看tablesnap

来自文档:

Tablesnap是一个脚本,它使用inotify来监视IN_MOVED_TO事件的目录,并通过生成一个新线程将该文件上传到Amazon S3来响应它们,以及JSON格式的列表,列出目录中的其他文件。复制的时间。

运行Cassandra集群时,此行为非常有用,因为它允许SSTables的自动时间点备份。从理论上讲,tablesnap应该适用于将文件写入某个临时位置的任何应用程序,然后在数据写入磁盘后移动到最终位置。 Tablesnap还假设文件在写入后是不可变的。