我一直在使用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)datastax信息说:


为了从SSTable加载中获得最佳吞吐量,可以使用多个
sstableloader实例以跨多台计算机流式传输。不难
sstableloader可以在其上运行的SSTable数量存在限制
同时,因此您可以添加其他加载程序,直到看不到
进一步改善。


这是否意味着对于一个表,我将在多个源计算机上启动SSTableLoader的多个实例?还是仅表示我可以同时在多台计算机上的多个表中使用SSTableLoader。我试图了解它们提到的吞吐率提高是针对单个表还是针对正在运行的多个表。

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

无论如何,希望我对我的问题已经很清楚了。

最佳答案

1)如果您的RF = 3并且您的群集有3个节点,则每个节点将保存所有数据。由于更新尚未传播到所有副本,因此仍然可能会有一些小的更改。如果群集中的节点数大于RF(您的情况下为6个节点,RF = 3),则每个节点将拥有50%的数据组合(不同的令牌范围)。
无论如何,您需要在从每个源节点到新群集的目标节点的所有键空间+表上运行sstableloader(假定1:1比率)。

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

3)从备份还原(快照)是一个不同的过程,不涉及使用sstableloader。您可以here了解更多信息。

还可以使用nodetool refresh将sstables从所有源节点加载到新的目标节点,但是仅当num_nodes = RF时才应使用。进一步了解here

10-01 19:35