【问题标题】:Cassandra: Migrate keyspace data from Multinode cluster to SingleNode ClusterCassandra:将键空间数据从多节点集群迁移到单节点集群
【发布时间】:2015-11-07 01:08:54
【问题描述】:

我在 QA 环境中的多节点集群中有一个密钥空间。我想将该键空间复制到我的本地单节点集群。有没有直接的方法可以做到这一点?我现在不能写一些像 SSTableLoader 实现这样的代码。请建议最快的方法。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    确保您的新节点上有足够的可用磁盘空间,并且您已在测试/构建中为新的单节点“集群”正确设置复制因子和一致性级别

    首先,将旧集群中的确切架构还原到新节点。之后可以通过两种方式加载数据:

    1.) 在旧集群中的每个节点上执行“sstableloader”实用程序并将其指向新节点。 sstableloader 可以识别令牌,但在您的情况下,它最终会将所有数据传送到您的新单节点集群。

    sstableloader -d NewNode /Path/To/OldCluster/SStables 
    

    2.) 对键空间进行快照并将原始 sstable 文件从旧集群中每个表的快照文件夹复制到新节点。一旦它们都在那里,将文件复制到相应的表目录并运行“nodetool refresh”。

    # Rinse and repeat for all tables    
    nodetool snapshot -t MySnapshot
    cd /Data/keyspace/table-UUID/snapshots/MySnapshot/
    rsync -avP ./*.db User@NewNode:/NewData/Keyspace/table-UUID
    ...
    # when finished, exec the following for all tables in your new node
    nodetool refresh keyspace table
    

    选项#1 可能是最好的,因为它会在新节点上自然地流式传输数据和压缩。它也减少了手工工作。如果您没有从一个集群到另一个集群的直接线路,选项 #2 是好的、快速且肮脏的。您可能不会注意到太大的区别,因为它对于 QA 来说可能是一个相对较小的键空间。

    【讨论】:

    • 我使用了第一个选项,它就像一个魅力。谢谢你,兄弟。拯救了我的一天。一个更正虽然,该命令将包含 'd' 而不是 'D' sstableloader -d NewNode /Path/To/OldCluster/SStables
    • 太棒了!很高兴它成功了。修复了参数大写(太多时间弄乱了 JVM 选项:P)
    • @BlakeAtkinson 我尝试了第一个选项,但它说:无法检索端点范围:InvalidRequestException(为什么:未配置的表 schema_columnfamilies)java.lang.RuntimeException:无法检索端点范围:
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 2012-05-02
    • 2020-04-12
    • 2017-06-03
    • 1970-01-01
    • 2016-08-14
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多