Cassandra - 将 sstable 快照从一个集群复制到另一个集群
Cassandra - copying sstable snapshot from one cluster to another
我知道那里有几个类似的问题,但我对此仍然感到困惑。由于需要这种机制(将数据从一个集群复制到另一个集群),我正在寻找一些说明。
让我们假设一个非常简单的场景。我想将 table 从一个 cassandra 集群 (C1) 复制到另一个 (C2)。我正在复制的 table 名为 "item"。
假设每个集群的节点数相同(集群中的源节点和目标节点各为 4 个)。不确定这是否重要。
我正在尝试使用快照和 sstableloader 来解决这个问题。我已经能够创建快照,将快照文件从 C1:N1(集群 1 节点 1 .../myspace/item-xxxxxx/snapshot/######)复制到目标 table 目录 C2:N1(集群 2 节点 1:.../myspace/item-xxxxxx)。我使用sstableloader加载数据和运行nodetool修复。完美的。唯一的问题是,由于加载的快照仅来自其中一个源节点,因此我只有 "restored" 部分数据(1k 行中的大约 485 行)。所以我想我会再次将快照从 C1:N2 复制到 C2:N1 并加载它。问题是所有 table 文件都已存在于 C2:N1 上。如果我将快照文件从 C1:N2 复制到 C2:N1 上的 table 目录,我将删除已经存在的文件。我没有检查所有 4 个目标节点,但我确实检查了目标的节点 2,并且项目 table 目录也已经存在,其中包含数据文件。我猜目标上的所有节点都有数据文件,所以我对如何 sstable 加载其他 3 个源节点快照文件感到困惑。
长话短说(如果可能的话):
我应该如何将多个源快照文件(一个来自源集群上的每个主机)加载到目标集群?使事情复杂化的是,如果源集群和目标集群具有不同数量的节点,这是否重要(我认为目标上的节点较少可能是一个更大的问题)。
在我看来,这里真正需要的是 运行 源集群上的 ssableloader 并将数据流式传输到目标集群的方法。会让生活轻松很多,我想。
提前致谢。
-吉姆
有two options for bulk loading,看来你可能把它们半合并在一起了。您主要指的是 "copy the sstables" 机制,该机制非常手动,除非恢复性能是重中之重,否则可能不值得麻烦。但是使用 sstable loader 是不同的并且不需要它。
sstableloader
工具将连接到一个节点,找到该节点集群中的所有节点并使用该连接构建 metadata/discovery。它将 split/stream 你 select 的 sstables 到适当令牌范围内的目标集群(你不需要修复)。你可以从源集群节点 运行 sstableloader,并将其指向目标集群,你不需要自己复制 sstables(尽管如果它们在不同的 DC 中,它可能会更快一些)。
如果您有 OpsCenter,可以使用 GUI 为您自动完成这些步骤 https://docs.datastax.com/en/opscenter/5.2/opsc/online_help/services/opscBackupCloneCluster.html
我知道那里有几个类似的问题,但我对此仍然感到困惑。由于需要这种机制(将数据从一个集群复制到另一个集群),我正在寻找一些说明。
让我们假设一个非常简单的场景。我想将 table 从一个 cassandra 集群 (C1) 复制到另一个 (C2)。我正在复制的 table 名为 "item"。
假设每个集群的节点数相同(集群中的源节点和目标节点各为 4 个)。不确定这是否重要。
我正在尝试使用快照和 sstableloader 来解决这个问题。我已经能够创建快照,将快照文件从 C1:N1(集群 1 节点 1 .../myspace/item-xxxxxx/snapshot/######)复制到目标 table 目录 C2:N1(集群 2 节点 1:.../myspace/item-xxxxxx)。我使用sstableloader加载数据和运行nodetool修复。完美的。唯一的问题是,由于加载的快照仅来自其中一个源节点,因此我只有 "restored" 部分数据(1k 行中的大约 485 行)。所以我想我会再次将快照从 C1:N2 复制到 C2:N1 并加载它。问题是所有 table 文件都已存在于 C2:N1 上。如果我将快照文件从 C1:N2 复制到 C2:N1 上的 table 目录,我将删除已经存在的文件。我没有检查所有 4 个目标节点,但我确实检查了目标的节点 2,并且项目 table 目录也已经存在,其中包含数据文件。我猜目标上的所有节点都有数据文件,所以我对如何 sstable 加载其他 3 个源节点快照文件感到困惑。
长话短说(如果可能的话): 我应该如何将多个源快照文件(一个来自源集群上的每个主机)加载到目标集群?使事情复杂化的是,如果源集群和目标集群具有不同数量的节点,这是否重要(我认为目标上的节点较少可能是一个更大的问题)。
在我看来,这里真正需要的是 运行 源集群上的 ssableloader 并将数据流式传输到目标集群的方法。会让生活轻松很多,我想。
提前致谢。
-吉姆
有two options for bulk loading,看来你可能把它们半合并在一起了。您主要指的是 "copy the sstables" 机制,该机制非常手动,除非恢复性能是重中之重,否则可能不值得麻烦。但是使用 sstable loader 是不同的并且不需要它。
sstableloader
工具将连接到一个节点,找到该节点集群中的所有节点并使用该连接构建 metadata/discovery。它将 split/stream 你 select 的 sstables 到适当令牌范围内的目标集群(你不需要修复)。你可以从源集群节点 运行 sstableloader,并将其指向目标集群,你不需要自己复制 sstables(尽管如果它们在不同的 DC 中,它可能会更快一些)。
如果您有 OpsCenter,可以使用 GUI 为您自动完成这些步骤 https://docs.datastax.com/en/opscenter/5.2/opsc/online_help/services/opscBackupCloneCluster.html