我一直在使用SSTableLoader实用程序在两个不同的Cassandra集群之间批量传输数据,我想知道是否还有其他人遇到过同样的问题。源群集有数据,目标没有。
我在实用工具的详细信息中阅读了datastax页面,但仍然有一些关于它是如何工作的问题没有得到回答。
我在源集群的活动节点上使用该实用程序,这些命令遵循以下格式:
sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid集群都是由256个v节点组成的,每个集群中有6个节点。在这两种环境中,模式都是RF =3,表的结构都是相同的。
因此,我的问题如下:
1)该实用工具从您指定的cassandra.yaml中提取源集群信息,但您仍然必须指定SSTables的绝对路径。那么,在一个节点上运行SSTableLoader会给我在目标点的整个表完成后吗?似乎很难验证,因为令牌范围在目标集群中是不同的。
2) datastax信息显示:
要从SSTable加载中获得最佳吞吐量,可以使用多个sstableloader实例跨多台计算机进行流。对于稳定负载程序可以同时运行的SSTables数量不存在硬限制,因此您可以添加额外的加载程序,直到您没有看到进一步的改进。
这是否意味着对于单个表,我将跨多个源计算机启动多个SSTableLoader实例?或者这仅仅意味着我可以同时在多台机器上对多个不同的表使用SSTableLoader。我试图了解他们提到的吞吐量增益是针对单个表还是针对正在运行的多个表。
3)从快照运行需要哪些语法修改?我获取了一个快照,并通过运行相同的命令进行了测试,但是深入到表的快照目录中,它没有正确地解析,它说“快照”是一个无效的键空间。
不管怎样,谢谢,希望我的问题够清楚了。
发布于 2018-10-11 06:32:20
1)如果您的RF=3和集群有3个节点,则每个节点都包含所有数据。但是,由于尚未传播到所有副本的更新,可能会有一些小的更改。如果集群中的节点数量大于RF (您的例子是6个节点,RF=3),则每个节点包含50%的数据(不同的令牌范围)。无论如何,您需要在从每个源节点到新集群的目标节点的所有键空间+表上运行sstableloader (假设1:1比)。
2)是的,您可以从每个源节点在同一个表/键空间上运行多个稳定负载器,并并行运行到它匹配的目标节点。但这也意味着您可以对不同的键空间/表执行此操作,只要最终从所有密钥空间/表的所有源节点执行到它们匹配的目标节点(假设1:1的比率)。
3)从备份恢复(快照)是一个不同的过程,不涉及使用sstableloader。您可以阅读更多关于它的这里。
还有一个选项是使用nodetool refresh将所有源节点中的马厩加载到新的目标节点,但它只应在num_nodes=RF使用时使用。了解更多关于it的信息,这里
https://stackoverflow.com/questions/52752022
复制相似问题