在单独的群集上使用AWS EBS的快照进行还原

时间:2019-06-28 06:38:34

标签: amazon-ec2 cassandra

我有一个包含3个节点的集群-例如AWS EC2实例上的cluster1。集群已启动并正在运行,并为密钥空间的卷拍摄了快照。

现在,我想从快照卷中还原几个表/键空间,因此我创建了另一个群集,即cluster2,并将快照卷附加到新群集的ec2节点(相同数量的节点)上。 Cluster2没有启动,因为快照中的系统键空间的群集名称为cluster1,要还原其的群集为cluster2。在这种情况下,如何进行还原?我不想对现有集群进行任何修改。

还原时,我还需要考虑新旧集群映射的令牌范围吗?

1 个答案:

答案 0 :(得分:0)

在启动cluster2之前,重要的是要确保cluster1的种子列表中不包含cluster1的IP地址,以确保它们之间不被察觉。另外,要从路径data_file_directories(在cassandra.yaml中定义)中删除以下目录:

  • 系统
  • system_auth
  • system_distributed
  • system_traces

system_schema不应被触摸,因为它包含键空间和表的架构定义。

启动集群,一次一个节点;第一个节点应在种子列表的开头包括其自己的IP地址;这将是一次更改,并且一旦群集启动并运行,就应删除该更改。

这时,您应该拥有一个单独的群集,并具有拍摄快照时原始群集的信息和结构。要对此进行测试,请执行nodetool gossipinfo,仅应列出cluster2的节点,登录到cqlsh describe keyspaces应列出您的所有键空间,并且对应用程序执行查询应检索您的数据。您会注意到,Cassandra已经生成了system *键空间,并且已经处理了令牌分配。

下一步是在每个节点中更新已还原群集的名称:

  1. 登录到cqlsh
  2. 执行UPDATE system.local SET cluster_name = 'cluster2' where key='local';
  3. 退出cqlsh
  4. 运行nodetool flush
  5. 运行nodetool drain
  6. 编辑cassandra.yaml文件,用名称'cluster2'更新cluster_name
  7. 重新启动cassandra服务
  8. 等待,直到使用nodetool statusnodetool netstats将节点报告为NORMAL为止
  9. 与其他节点重复

这时,您将有2个独立的群集,名称不同。