我有一个包含3个节点的集群-例如AWS EC2实例上的cluster1。集群已启动并正在运行,并为密钥空间的卷拍摄了快照。
现在,我想从快照卷中还原几个表/键空间,因此我创建了另一个群集,即cluster2,并将快照卷附加到新群集的ec2节点(相同数量的节点)上。 Cluster2没有启动,因为快照中的系统键空间的群集名称为cluster1,要还原其的群集为cluster2。在这种情况下,如何进行还原?我不想对现有集群进行任何修改。
还原时,我还需要考虑新旧集群映射的令牌范围吗?
答案 0 :(得分:0)
在启动cluster2之前,重要的是要确保cluster1的种子列表中不包含cluster1的IP地址,以确保它们之间不被察觉。另外,要从路径data_file_directories
(在cassandra.yaml中定义)中删除以下目录:
system_schema
不应被触摸,因为它包含键空间和表的架构定义。
启动集群,一次一个节点;第一个节点应在种子列表的开头包括其自己的IP地址;这将是一次更改,并且一旦群集启动并运行,就应删除该更改。
这时,您应该拥有一个单独的群集,并具有拍摄快照时原始群集的信息和结构。要对此进行测试,请执行nodetool gossipinfo
,仅应列出cluster2的节点,登录到cqlsh describe keyspaces
应列出您的所有键空间,并且对应用程序执行查询应检索您的数据。您会注意到,Cassandra已经生成了system *键空间,并且已经处理了令牌分配。
下一步是在每个节点中更新已还原群集的名称:
UPDATE system.local SET cluster_name = 'cluster2' where key='local';
nodetool flush
nodetool drain
cluster_name
nodetool status
或nodetool netstats
将节点报告为NORMAL为止这时,您将有2个独立的群集,名称不同。