将数据从cassandra复制到cassandra

时间:2014-01-15 21:55:47

标签: cassandra datastax-enterprise datastax

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

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

他们只能将一个数据副本移动到其他群集吗?

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

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

如果是SimpleStrategy:

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

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

    1. 均匀地将令牌分配给新节点以获得平衡的环;
    2. 同时在所有节点上使用nodetool快照;
    3. 您必须将生产中所有节点的所有数据复制到测试环境中的每个节点;
    4. 如果您正在使用LevelCompaction,请确保在启动节点之前使用该压缩从列族的日期目录中删除metadata.json。这使得LevelCompaction可以压缩并在新设置中正确分组标签。
    5. 与上述4相同;
    6. 与上述5相同;
    7. 如果您不关心还原版本中某个时间点的数据一致性,可以跳过快照并直接复制数据目录。

      需要考虑的事项:

      此过程会极大地影响您的磁盘I / O.如果您在实时群集上执行此操作,请使用快照至少锁定某个时间点的状态并逐渐复制。

      对于NetworkTopologyStrategy:

      您可以重复上述过程,但只能从一个机架中的节点组合进行复制,并形成100%的数据。如果您完全不关心可能错过写入其他机架上未复制到此机架中节点的节点,那么您将必须复制上述所有节点中的所有节点。

      理想的解决方案:

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

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

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