Cassandra:将键空间数据从多节点集群迁移到单节点集群

abi*_*pat 2 cassandra

我在 QA 环境中的多节点集群中有一个键空间。我想将该键空间复制到我的本地单节点集群。有没有直接的方法可以做到这一点?我现在无法编写一些像 SSTableLoader 实现这样的代码。请建议最快的方法。

Bla*_*son 5

确保新节点上有足够的可用磁盘空间,并且在测试/构建中为新的单节点“集群”正确设置复制因子和一致性级别

首先,将旧集群中的确切架构恢复到新节点。之后可以通过两种方式加载数据:

1.) 在旧集群中的每个节点上执行“sstableloader”实用程序并将其指向新节点。sstableloader 是令牌感知的,但在您的情况下,它最终会将所有数据传送到新的单节点集群。

sstableloader -d NewNode /Path/To/OldCluster/SStables 
Run Code Online (Sandbox Code Playgroud)

2.) 对键空间进行快照,并将原始 sstable 文件从旧集群中每个表的快照文件夹复制到新节点。一旦它们都在那里,将文件复制到相应的表目录并运行“nodetoolfresh”。

# Rinse and repeat for all tables    
nodetool snapshot -t MySnapshot
cd /Data/keyspace/table-UUID/snapshots/MySnapshot/
rsync -avP ./*.db User@NewNode:/NewData/Keyspace/table-UUID
...
# when finished, exec the following for all tables in your new node
nodetool refresh keyspace table
Run Code Online (Sandbox Code Playgroud)

选项 #1 可能是最好的,因为它将在新节点上流式传输数据并自然压缩。这也减少了手工工作。如果您没有从一个集群到另一个集群的直接线路,选项#2 很好、快速,但很脏。您可能不会注意到太大的差异,因为对于 QA 来说它可能是一个相对较小的密钥空间。