我知道有几个类似的问题,但我仍然对此感到困惑。由于需要这种机制(将数据从一个集群复制到另一个集群),我正在寻找一点澄清。
让我们假设一个非常简单的场景。我想将一个表从一个cassandra集群(C1)复制到另一个(C2)。我正在复制的表格被称为" item"。
假设每个集群的节点数相同(集群中的源节点和目标节点各为4)。不确定是否重要。
我试图使用快照和sstableloader来做这个伎俩。我已经能够创建快照,将快照文件从C1:N1(集群1节点1 ... / myspace / item-xxxxxx / snapshot / ######)复制到目标表目录C2:N1(集群) 2节点1:... / myspace / item-xxxxxx)。我使用sstableloader加载数据并运行nodetool修复。完善。唯一的问题是,因为加载的快照只来自其中一个源节点,所以我只能恢复"部分数据(约1k行的485)。所以我想我会将快照从C1:N2复制到C2:N1然后加载它。问题是所有表文件已经存在于C2:N1上。如果我将快照文件从C1:N2复制到C2:N1上的表目录,我将吹走已经存在的文件。我没有检查所有4个目标节点,但我确实检查了目标的节点2,并且项目表目录也已存在于数据文件中。我猜测目标上的所有节点都有数据文件,因此我不知道如何sstableload其他3个源节点快照文件。
这么长的故事简短(如果可能的话): 我应该如何将多个源快照文件(源集群中的每个主机一个)加载到目标集群?更复杂的是,如果源和目标集群具有不同数量的节点(我认为在目标上拥有较少的节点可能是一个更大的问题),这是否重要。
在我看来,这里真正需要的是一种在SOURCE集群上运行ssableloader并将数据流传输到目标集群的方法。我想,会让生活变得更轻松。
提前致谢。
-Jim
答案 0 :(得分:1)
有two options for bulk loading,似乎你可能将它们半合并在一起。你主要指的是“复制sstables”机制,这是非常手动的,除非恢复的性能是最重要的,否则可能不值得。使用sstable loader虽然不同,但并不需要。
sstableloader
工具将连接到一个节点,找到该节点集群中的所有节点,并使用该连接来构建元数据/发现。它会将您选择的sstables拆分/流式传输到适当的令牌范围内的目标集群(您不需要修复)。您可以从源群集节点运行sstableloader,并将其指向目标群集,您不需要自己复制sstables(尽管如果它们位于不同的DC中,它可能会更快一些)。
如果您有OpsCenter,可以使用GUI https://docs.datastax.com/en/opscenter/5.2/opsc/online_help/services/opscBackupCloneCluster.html
为您完成这些步骤的自动化