Cassandra:如何找到具有匹配令牌的节点以恢复到新的集群?

时间:2017-03-17 12:28:11

标签: cassandra

我想将数据从现有群集还原到较新的群集。我希望使用这种方法,即将快照SSTables从旧群集复制到较新群集的键空间,如http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/operations/ops_backup_snapshot_restore_t.html中所述。

同一份文件说," ...必须将快照复制到具有匹配标记的正确节点"。具有匹配令牌的节点"是什么意思?

我当前的群集有5个节点,每个节点有num_tokens:256。我将创建另一个具有相同no节点和num_tokens以及相同模式的群集。在将SSTables复制到较新的群集时,是否需要遵循响铃顺序?如何找到给定源节点的匹配目标节点?

我尝试了命令" nodetool ring"检查我是否可以使用标记值进行匹配。但是这个命令为每个主机提供了所有令牌。如何获取单个标记值(确定环中节点的位置)?如果我能得到它,那么我也可以找到匹配的节点。

1 个答案:

答案 0 :(得分:1)

使用vnodes很难正确复制sstables,因为它不仅仅是一个分配的令牌,你必须重新分配,而是256.要做你想要的,你需要做一些额外的步骤http://datascale.io/cloning-cassandra-clusters-fast-way/。基本上将每个节点的256个令牌重新分配给其他群集中的新节点,因此环是相同的。您列出的文章描述了将它加载到同一个集群上,这更简单,因为您不必担心不同的拓扑。值得注意的是,即使在那种情况下,如果添加了一个新节点或者从快照中删除了一个节点,它将无法工作。

最安全的赌注是使用sstableloader,它将遍历sstable并在适当的节点中分发数据。如果一切都正确的话,它也会开启变革的可能性而不用担心。此外,它确保一切都在正确的节点上,所以不用担心人为错误。原始集群中的每个节点都可以在每个sstable上运行sstableloader到新集群,并且您可以很好地并行化工作。

我强烈建议你利用这个机会将vnode的数量减少到32个。对于重建,solr索引,spark,以及最重要的 ruins 修复,256默认值是过多而且非常可怕。特别是如果使用增量修复(默认),额外的范围将导致更多的反压缩和负载。如果你在每个sstable上使用sstableloader它就会起作用。增加cassandra.yaml中的流式吞吐量可能会加快这一点。

如果您使用OpsCenter这个备份和恢复到新群集的机会也是自动化的。