首页 > 解决方案 > Cassandra 3.11 SSTableLoader 机制

问题描述

我一直在使用 SSTableLoader 实用程序在两个不同的 Cassandra 集群之间批量传输数据,我想知道是否有其他人遇到过同样的问题。源集群有数据,目标没有。

我已经阅读了有关实用程序详细信息的 datastax 页面,但我仍然对它的工作原理有一些未解决的问题。

我在源集群的活动节点上使用该实用程序,命令遵循以下格式:

sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid

这两个集群都设置有 256 个 vnode,每个集群中有 6 个节点。两种环境中的架构都是 RF = 3,并且表的结构都相同。

所以我的问题如下:

1) 该实用程序从您指定的 cassandra.yaml 中提取源集群信息,但您仍然必须指定 SSTables 的绝对路径。那么从单个节点运行 SSTableLoader 是否会在完成后给我整个目标表?由于目标集群的令牌范围不同,因此似乎很难验证。

2)数据税信息说:

为了从 SSTable 加载中获得最佳吞吐量,您可以使用多个 sstableloader 实例在多台机器上进行流式传输。sstableloader 可以同时运行的 SSTable 数量没有硬性限制,因此您可以添加额外的加载器,直到您没有看到进一步的改进。

这是否意味着对于单个表,我将跨多个源计算机启动多个 SSTableLoader 实例?还是仅仅意味着我可以在多台机器上同时对多个不同的表使用 SSTableLoader。我试图了解他们提到的吞吐量增益是针对单个表还是仅针对飞行中的多个表。

3)从快照运行需要什么语法修改?我拍摄了一个快照并通过运行相同的命令进行测试,但进一步深入到表的快照目录中,它没有正确解析它说“快照”是一个无效的键空间。

无论如何,谢谢希望我对我的问题足够清楚。

标签: cassandradatastaxcassandra-3.0scylla

解决方案


1)如果您的 RF=3 并且您的集群有 3 个节点,则每个节点都包含所有数据。由于尚未传播到所有副本的更新,仍然可能存在一些细微的变化。如果集群中的节点数量大于 RF(您的情况是 6 个节点,RF=3),则每个节点都拥有 50% 的数据组合(不同的令牌范围)。无论如何,您需要在sstableloader从每个源节点到新集群的目标节点的所有键空间 + 表上运行(假设比例为 1:1)。

2) 是的,您可以在同一个表/键空间上从每个源节点运行多个 sstableloader,并行匹配目标节点。但这也意味着您可以为不同的键空间/表执行此操作,只要最终您从所有键空间/表的所有源节点到它们匹配的目标节点执行它(假设比例为 1:1)。

3) 从备份恢复(快照)是一个不同的过程,不涉及使用sstableloader. 你可以在这里阅读更多关于它的信息。

还有一个选项可用于nodetool refresh将所有源节点的 sstables 加载到新的目标节点,但仅当 num_nodes=RF 时才应使用它。在此处阅读有关它的更多信息


推荐阅读