我一直在使用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的数量没有硬限制,因此可以添加额外的loader,直到没有进一步的改进为止。
这是否意味着对于单个表,我将跨多个源计算机启动sstableloader的多个示例?或者这仅仅意味着我可以同时在多台机器上对多个不同的表使用sstableloader。我试图理解他们提到的吞吐量增益是针对单个表还是针对飞行中的多个表。
3) 从快照运行需要什么语法修改?我拍摄了一个快照,并通过运行相同的命令进行了测试,但进一步深入到表的snapshot目录中,它没有正确解析,它说“snapshot”是一个无效的键空间。
不管怎样,谢谢,希望我的问题说得够清楚。
1条答案
按热度按时间u4dcyp6a1#
1) 如果rf=3并且集群有3个节点,则每个节点都保存所有数据。不过,由于更新尚未传播到所有副本,可能会有一些小的更改。如果集群中的节点数大于rf(您的情况是6个节点,rf=3),则每个节点都持有50%的数据(不同的令牌范围)。不管怎么说,你得负责
sstableloader
在从每个源节点到新集群的目标节点的所有keyspaces+表上(假设比率为1:1)。2) 是的,您可以在同一个表/键空间上运行多个sstableloader,从每个源节点到它的匹配目标节点并行运行。但这也意味着您可以对不同的键空间/表执行此操作,只要最终从所有键空间/表的所有源节点到它们匹配的目标节点执行此操作(假设比率为1:1)。
3) 从备份(快照)还原是一个不同的过程,不涉及使用
sstableloader
. 你可以在这里了解更多。还有一个选项可以使用
nodetool refresh
将sstables从所有源节点加载到新的目标节点,但仅当num\u nodes=rf时才应使用。请在此处阅读更多信息