1

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

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

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

最好的方法是什么?

4

1 回答 1

2

我假设您正在使用 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 备份的数据。

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

于 2014-01-16T01:48:31.687 回答