您不能简单地将快照从一个节点复制到另一个节点,因为这两个节点不一定拥有相同的令牌范围,因此快照中的数据对于随机节点来说是无用的。 在Cassandra中,数据分布在集群中的节点上,每个节点都拥有一系列令牌。每个分区(记录)都有一个分区键(主键的一部分),使用散列算法将其转换为令牌值,令牌值的值确定分区将存储在哪个节点上。 快照中的SSTables只包含令牌值在节点拥有的令牌范围内的分区。将快照重定向到拥有不同令牌范围的节点意味着SSTables中的部分或所有分区将丢失,因为新节点将永远不会接受对其不拥有的分区的读取。 如果您想将数据恢复到配置(包括令牌所有权)相同的节点,可以使用“刷新方法”。我已经在How to restore snapshots to a cluster with identical configuration中记录了详细的过程。 否则,您将需要使用sstableloader实用程序大容量加载快照,以便将SSTables中的数据发送到拥有它们的节点(副本)。我已经在How to clone data to a new cluster中记录了详细的过程。干杯!干杯!
2条答案
按热度按时间c0vxltue1#
您不能简单地将快照从一个节点复制到另一个节点,因为这两个节点不一定拥有相同的令牌范围,因此快照中的数据对于随机节点来说是无用的。
在Cassandra中,数据分布在集群中的节点上,每个节点都拥有一系列令牌。每个分区(记录)都有一个分区键(主键的一部分),使用散列算法将其转换为令牌值,令牌值的值确定分区将存储在哪个节点上。
快照中的SSTables只包含令牌值在节点拥有的令牌范围内的分区。将快照重定向到拥有不同令牌范围的节点意味着SSTables中的部分或所有分区将丢失,因为新节点将永远不会接受对其不拥有的分区的读取。
如果您想将数据恢复到配置(包括令牌所有权)相同的节点,可以使用“刷新方法”。我已经在How to restore snapshots to a cluster with identical configuration中记录了详细的过程。
否则,您将需要使用
sstableloader
实用程序大容量加载快照,以便将SSTables中的数据发送到拥有它们的节点(副本)。我已经在How to clone data to a new cluster中记录了详细的过程。干杯!干杯!blmhpbnm2#
是的,缺少的部分是,如果节点不是复制的令牌范围的副本之一,文件中的数据将不会出现。它将在文件中,但节点不会认为它拥有它或使用它来响应查询。
如果你有3个节点在一个键空间上使用RF3,它将工作,因为所有3个节点在该键空间上都应该有相同的数据。
您还必须运行nodetool刷新,或重新启动节点以获取文件。