我有一个由 20 个节点组成的生产集群,有 3 个复制,我想将一部分数据,即 ~600GB(有 3 个复制)复制到我的测试环境中,只有 1 个复制。
我知道我们可以使用 sstableloader 但是我们需要通过网络将所有 600GB 复制到另一个集群吗?
他们是一种仅将一个数据副本移动到其他集群的方法吗?
最好的方法是什么?
我有一个由 20 个节点组成的生产集群,有 3 个复制,我想将一部分数据,即 ~600GB(有 3 个复制)复制到我的测试环境中,只有 1 个复制。
我知道我们可以使用 sstableloader 但是我们需要通过网络将所有 600GB 复制到另一个集群吗?
他们是一种仅将一个数据副本移动到其他集群的方法吗?
最好的方法是什么?
我假设您正在使用 RandomPartitioner。你在做什么取决于你的测试环境中有多少节点。
在 SimpleStrategy 的情况下:
A. 如果您在测试环境中使用 20 个节点:
B. 如果您使用的节点数量少于生产:
如果您不关心恢复版本中某个时间点的数据一致性以进行测试,则可以跳过快照并直接复制数据目录。
需要考虑的事项:
此过程会显着影响您的磁盘 I/O。如果您在实时集群上执行此操作,请使用快照至少锁定某个时间点的状态并逐步复制。
在 NetworkTopologyStrategy 的情况下:
您可以重复上述过程,但只能从一个机架中的节点组合复制并形成 100% 的数据。如果您绝对关心可能错过的对其他机架上未复制到该机架中的节点的节点的写入,那么您将不得不像上面一样从所有节点复制所有内容。
理想的解决方案:
如果您要像我为我的公司一样每天都这样做以进行测试,那么您希望围绕它进行一些自动化。在我看来,备份和恢复的最佳自动化是 Netflix 的 Priam https://github.com/Netflix/Priam
我将生产备份存储在 S3 中。代码将在测试中启动新机器,为一个区域分配相同的令牌,我将 priam 快照时间设置为从最后一天备份的范围,然后测试节点将自动接收来自 s3 备份的数据。
希望我的回答对你有所帮助。