Cassandra 如何在集群中复制密钥空间

Cassandra 如何在集群中复制密钥空间,cassandra,Cassandra,我有一个填充了数据的密钥空间,生成这些数据的成本很高。我想在群集中复制两份此数据。最后我想使用两个键空间:让我们调用它们mydata和mydatabackup,它们都包含相同的数据(我不介意Cassandra时间戳是否不同) 有没有一个简单的方法可以做到这一点?我能找到的最接近答案是使用sstable2json和JSON2STABLE?有更好的办法吗?“有更好的办法吗?” 所有Cassandra数据都存储在数据/文件夹中(检查Cassandra.yaml中的配置值数据文件目录)。您还可以检查已保

我有一个填充了数据的密钥空间,生成这些数据的成本很高。我想在群集中复制两份此数据。最后我想使用两个键空间:让我们调用它们
mydata
mydatabackup
,它们都包含相同的数据(我不介意Cassandra时间戳是否不同)

有没有一个简单的方法可以做到这一点?我能找到的最接近答案是使用sstable2json和JSON2STABLE?有更好的办法吗?

“有更好的办法吗?”

所有Cassandra数据都存储在数据/文件夹中(检查Cassandra.yaml中的配置值数据文件目录)。您还可以检查已保存的\u缓存\u目录提交日志\u目录配置

在数据文件夹中,您将有

  • 每个键空间一个文件夹

  • 一个用于系统密钥空间的文件夹

  • 用于身份验证等的某些文件夹

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

  • *-包含真实数据的Data.db文件

  • *-Filter.db文件

  • *-索引的Index.db文件

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

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

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


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


    您可以运行
    nodetool flush
    来确保将memtables刷新到磁盘,而不是执行完全压缩。文档提供了一个更好的选择: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链接已断开。