我只是想知道在 Cassandra 中备份整个密钥空间的最佳方法是什么……你怎么看?
以前我只是将数据文件夹复制到我的备份硬盘中,但是在更新后我无法恢复数据库。
最好的方法是做快照 ( nodetool snapshot
)。您可以在此Datastax 文档中了解有关其工作原理以及如何最好地使用它的很多信息(免责声明:我为 Datastax 工作)。
您需要确保已启用 JNA(可以在此页面上找到一些相关说明)。如果这样做,快照会非常快;它们只是与现有稳定器的硬链接。无需进行复制。如果您想以特定方式跟踪备份,您可以将快照与其他备份工具(或仅 rsync、cp 等)结合使用。
我编写了一个简单的 python 工具来自动化集群快照和备份并将它们存储在 S3 上。
https://github.com/tbarbugli/cassandra_snapshotter是 github 页面,在那里你也可以找到文档
除了阅读Datastax 文档之外,我还发现文章“使用 amanda 增量备份 cassandra”很有见地。这是关于如何使用增量备份和快照。
最后,它建议以下程序:
nodetool snapshot
nodetool clearsnapshot
并删除符号链接。nodetool flush
另一种选择是监视正在写入的 sstables,并增量备份这些文件。
例如,查看表格快照。
从文档中:
Tablesnap 是一个脚本,它使用 inotify 来监控目录中的 IN_MOVED_TO 事件,并通过生成一个新线程将该文件上传到 Amazon S3 以及一个 JSON 格式的列表中的其他文件在目录中的时间来响应它们副本。
在运行 Cassandra 集群时,此行为非常有用,因为它允许对 SSTable 进行自动时间点备份。从理论上讲,tablesnap 应该适用于将文件写入某个临时位置,然后在将数据写入磁盘后移动到其最终位置的任何应用程序。Tablesnap 还假设文件一旦写入就不可变。