【问题标题】:copy data from cassandra to cassandra将数据从 cassandra 复制到 cassandra
【发布时间】:2014-02-04 14:37:30
【问题描述】:

我有一个包含 20 个节点和 3 个复制的生产集群,我想将一部分数据,即 ~600GB(带有 3 个复制)复制到我的测试环境中,只有 1 个复制。

我知道我们可以使用 sstableloader,但我们需要通过网络将所有 600GB 复制到另一个集群吗?

他们是一种只将一个数据副本移动到其他集群的方法吗?

最好的方法是什么?

【问题讨论】:

    标签: cassandra datastax-enterprise datastax


    【解决方案1】:

    我假设您正在使用 RandomPartitioner。你在做什么取决于你的测试环境中有多少节点。

    在 SimpleStrategy 的情况下:

    A.如果您在测试环境中使用 20 个节点:

    1. 为测试环境中的每个节点分配相同的令牌;
    2. 同时在所有节点上使用nodetool快照;
    3. 将快照目录中的数据从你的生产节点同token复制到同token的测试节点;
    4. 要将复制因子更改为 1,只需使用新的复制设置更新键空间,如下所示:http://wiki.apache.org/cassandra/Operations#Replication
    5. 在每个节点上运行清理。

    B.如果您使用的节点数量少于生产:

    1. 将令牌平均分配给新节点以获得平衡环;
    2. 同时在所有节点上使用nodetool快照;
    3. 您必须将生产中所有节点的所有数据复制到测试环境中的每个节点;
    4. 如果您使用 LevelCompaction,请确保在启动节点之前使用该压缩从列族的日期目录中删除 metadata.json。这使得 LevelCompaction 可以在您的新设置上正确压缩和分组标签。
    5. 同上4;
    6. 同上5;

    如果您不关心恢复版本中某个时间点的数据一致性以进行测试,则可以跳过快照并直接复制数据目录。

    需要考虑的事项:

    此过程会显着影响您的磁盘 I/O。如果您在实时集群上进行,请使用快照至少锁定某个时间点的状态并逐步复制。

    如果是 NetworkTopologyStrategy:

    您可以重复上述过程,但只能从一个机架中的节点组合复制并形成 100% 的数据。如果您绝对关心其他机架上未复制到该机架中的节点的节点可能丢失的写入,那么您将不得不像上面一样从所有节点复制所有内容。

    理想的解决方案:

    如果您要像我为公司所做的那样每天都这样做以进行测试,那么您希望围绕它进行一些自动化。在我看来,备份和恢复的最佳自动化是 Netflix 的 Priam https://github.com/Netflix/Priam

    我将生产备份存储在 S3 中。代码将在测试中启动新机器,为一个区域分配相同的令牌,我将 priam 快照时间设置为从最后一天备份的范围,然后测试节点将自动接收来自 s3 备份的数据。

    希望我的回答对你有所帮助。

    【讨论】:

    • 谢谢你。但我们使用 murmur3partitioner 和 vnodes 而不是令牌。我们正在使用具有大小分层压缩的 SimpleStrategy 和 CF。我在测试集群中只有 3 个节点。如何将 20 个节点数据复制到 3 个节点中。我需要将数据分配到 3 个节点吗?
    猜你喜欢
    • 2016-09-28
    • 2013-11-28
    • 2016-12-02
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2016-08-14
    相关资源
    最近更新 更多