Cassandra 3.11 SSTableLoader机制

Raz*_*zle 2 cassandra datastax scylla cassandra-3.0

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

我已经阅读了关于实用程序详细信息的数据存储页面,但我仍然有一些未解决的问题,关于它是如何工作的.

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

sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid
Run Code Online (Sandbox Code Playgroud)

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

所以我的问题如下:

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

2)数据存储信息说:

要从SSTable加载获得最佳吞吐量,您可以使用多个sstableloader实例来跨多台计算机进行流式处理.Sstableloader可以同时运行的SSTable数量没有硬性限制,因此您可以添加其他加载器,直到您看不到进一步的改进.

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

3)从快照运行需要什么语法修改?我拍摄了一张快照并通过运行相同的命令进行了测试,但是进一步向下进入了表的快照目录,它没有正确解析它说"快照"是一个无效的密钥空间.

无论如何,谢谢希望我对我的问题很清楚.

Tom*_*San 8

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

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

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

还有一个选项可用于nodetool refresh将sstables从所有源节点加载到新目标节点,但只有在num_nodes = RF时才应使用它.在这里阅读更多相关信息

  • `sstableloader`应该从1个源节点运行到1个目标节点.如果要运行多个实例,则必须是`sstableloader`的多个进程,从相同的源节点,每个进程用于不同的表到不同的单个目标节点. (2认同)