【问题标题】:How should I copy a keyspace within a cluster我应该如何在集群中复制密钥空间
【发布时间】:2013-09-13 16:19:01
【问题描述】:

我有一个密钥空间,其中填充了生成成本高昂的数据。我想在我的集群中复制两份此数据。我想最终得到两个键空间:我们称它们为 mydatamydatabackup,它们都包含相同的数据(我不介意 Cassandra 时间戳是否不同)。

有没有简单的方法来做到这一点?我能找到的最接近答案的是使用 sstable2json 和 json2sstable as suggested in response to a similar question?有没有更好的办法?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    “有没有更好的方法?”

    所有 Cassandra 数据都存储在 data/ 文件夹中(检查 cassandra.yaml 中的配置值 data_file_directories)。您还可以检查 saved_caches_directorycommitlog_directory 配置。

    在数据文件夹中,您将拥有

    1. 每个键空间一个文件夹

    2. 系统键空间的一个文件夹

    3. 一些用于身份验证等的文件夹。

      在每个键空间文件夹中,您将拥有

    4. *-Data.db 文件,其中包含您的真实数据

    5. *-Filter.db 文件

    6. *-Index.db 索引文件

    7. ...

    要复制数据,请对这些文件夹进行普通副本

    在我们的团队中,操作员使用 crontab 以这种方式安排 Cassandra 数据的定期备份。

    注意:有时,您可能会错过仍在内存或 memtable 中且尚未刷新到磁盘的实时数据。您可以在备份数据文件之前触发完全压缩。但是完全压实可能会伤害你的性能,所以要小心


    更好的答案:使用提供的工具为您的数据库拍摄快照:

    http://www.datastax.com/docs/1.0/operations/backup_restore

    【讨论】:

    • 你可以运行nodetool flush来确保你的内存表被刷新到磁盘,而不是完全压缩。
    • @Richard 确实。该文档提供了一个更好的选择: nodetool -h -p snapshot
    • 我做了一个快照的普通副本并将文件粘贴到 casssandra 数据目录中的一个新文件夹 (mydata) 中。但是,无法从 cassandra-cli 获得数据。这似乎是因为文件是根据旧的键空间命名的——比如mydata-cf-hf-1-Data.db。但是,如果我重命名文件以匹配新的键空间(例如,mydatabackup-cf-hf-1-Data.db)并运行nodetool repair mydatabackup。它似乎工作。谢谢@doanduyhai
    • 忘了说,我需要在运行修复之前为 mydatabackup 创建新架构(mydata 架构的副本)。
    • DataStax 链接已失效。
    猜你喜欢
    • 2014-05-29
    • 2016-04-18
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2019-02-23
    • 2018-11-04
    相关资源
    最近更新 更多