2014-01-15 72 views
1

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

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

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

这样做的最佳方法是什么?

回答

2

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

在SimpleStrategy的情况下:

答:如果您使用的是20个节点在测试环境:

  1. 分配同样要在您的测试环境中的每个节点;
  2. 同时在所有节点上使用nodetool快照;
  3. 将来自具有相同标记的生产节点的快照目录中的数据复制到具有相同标记的测试节点;
  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备份接收数据。

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

+0

谢谢你arya。但我们使用murmur3partitioner和vnodes而不是令牌。我们使用SimpleStrategy和CF进行大小分层压缩。测试集群中只有3个节点。如何将20个节点数据复制到3个节点中。我需要将数据分配到3个节点吗? – Rock