【问题标题】:Cassandra - copying sstable snapshot from one cluster to anotherCassandra - 将 sstable 快照从一个集群复制到另一个集群
【发布时间】:2016-12-07 22:15:18
【问题描述】:

我知道有几个类似的问题,但我仍然对此感到困惑。由于需要这种机制(将数据从一个集群复制到另一个集群),我正在寻找一些说明。

让我们假设一个非常简单的场景。我想将一个表从一个 cassandra 集群 (C1) 复制到另一个 (C2)。我正在复制的表称为“项目”。

假设每个集群的节点数相同(集群中的源节点和目标节点各 4 个)。不确定是否重要。

我正在尝试使用快照和 sstableloader 来解决问题。我已经能够创建快照,将快照文件从 C1:N1(集群 1 节点 1 .../myspace/item-xxxxxx/snapshot/######)复制到目标表目录 C2:N1(集群2 节点 1:.../myspace/item-xxxxxx)。我使用 sstableloader 加载数据并运行 nodetool repair。完美的。唯一的问题是,由于加载的快照仅来自一个源节点,我只“恢复”了部分数据(大约 1k 行中的 485 行)。所以我想我会再次将快照从 C1:N2 复制到 C2:N1 并加载它。问题是 C2:N1 上已经存在所有表文件。如果我将快照文件从 C1:N2 复制到 C2:N1 上的表目录,我会吹走已经存在的文件。我没有检查所有 4 个目标节点,但我确实检查了目标的节点 2,并且项目表目录也已经存在于数据文件中。我猜目标上的所有节点都有数据文件,所以我不知道如何 sstableload 其他 3 个源节点快照文件。

长话短说(如果可能的话): 我应该如何将多个源快照文件(来自源集群上的每个主机的一个)加载到目标集群?更复杂的是,源集群和目标集群是否有不同数量的节点是否重要(我认为目标上的节点越少可能会是一个更大的问题)。

在我看来,这里真正需要的是一种在 SOURCE 集群上运行 ssableloader 并将数据流式传输到目标集群的方法。我想这会让生活变得更轻松。

提前致谢。

-吉姆

【问题讨论】:

    标签: cassandra datastax


    【解决方案1】:

    two options for bulk loading,看来你可能把它们半合并在一起了。您主要指的是“复制 sstables”机制,该机制非常手动,除非还原的性能是重中之重,否则可能不值得麻烦。使用 sstable loader 是不同的,但不需要。

    sstableloader 工具将连接到一个节点,查找该节点集群中的所有节点,并使用该连接来构建元数据/发现。它会将您选择的 sstable 拆分/流式传输到适当令牌范围内的目标集群(您不需要修复)。您可以从源集群节点运行 sstableloader,并将其指向目标集群,您不需要自己复制 sstables(尽管如果它们在不同的 DC 中可能会快一点)。

    如果您有 OpsCenter,则可以使用 GUI https://docs.datastax.com/en/opscenter/5.2/opsc/online_help/services/opscBackupCloneCluster.html 为您完成这些步骤的自动化

    【讨论】:

    • 所以 sstableloader 使用“-d IP”运行。完成此操作后,它就是目标 IP,我正在从其中一个目标节点运行它(并且我正在使用快照来加载数据)。也许这就是我要出错的地方。你说我可以从源集群运行它。我放了“-d SourceIP”吗?如果是这样,我在哪里指定要连接的目标集群 IP?
    • -d 将指向目标集群中的任何节点。该工具可以在任何地方运行
    • 感谢您的回复。很抱歉我对此缺乏了解,但是您如何指定要连接的源集群呢?只需在源集群上运行它?话虽如此,那么您就不能在目标集群上运行 sstableloader 了(因为我们没有指定源 IP)?
    • 源集群无关紧要,不需要。只是目标集群中的 sstable 和一个节点
    • 感谢您的澄清。我想我现在明白了(因为我玩得更多了)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2015-12-02
    • 2018-06-02
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多