15

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

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

4

4 回答 4

13

最好的方法是做快照 ( nodetool snapshot)。您可以在此Datastax 文档中了解有关其工作原理以及如何最好地使用它的很多信息(免责声明:我为 Datastax 工作)。

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

于 2012-05-05T23:32:02.913 回答
7

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

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

于 2014-01-14T17:00:18.400 回答
6

除了阅读Datastax 文档之外,我还发现文章“使用 amanda 增量备份 cassandra”很有见地。这是关于如何使用增量备份和快照。

最后,它建议以下程序:

  1. 完全备份
    • 删除旧的增量文件和符号链接。
    • nodetool snapshot
    • 将所有快照文件符号链接到备份目录
    • 备份该目录取消引用符号链接。
    • nodetool clearsnapshot并删除符号链接。
  2. 增量备份(不要与 cassandra 的内置增量备份混淆):
    • nodetool flush
    • 将所有增量文件符号链接到备份目录。
    • 备份该目录取消引用符号链接。
  3. 恢复
    • 恢复上次完整备份和所有增量。
于 2013-06-03T00:33:50.157 回答
4

另一种选择是监视正在写入的 sstables,并增量备份这些文件。

例如,查看表格快照

从文档中:

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

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

于 2014-01-15T03:49:22.240 回答