我有一个有3个节点的集群——比如说AWSEC2示例上的cluster1。集群已启动并正在运行,已获取密钥空间卷的快照。
现在我想从快照卷中恢复几个表/键空间,因此我创建了另一个集群cluster2,并将快照卷附加到新集群的ec2节点上(节点数相同)。cluster2没有启动bcz所拍摄的快照中的系统密钥空间的群集名称为cluster1,而要还原它的群集是cluster2。在这种情况下,如何进行恢复?我不想对现有集群做任何修改。
另外,在执行恢复时,是否需要考虑新旧集群Map的令牌范围?
我有一个有3个节点的集群——比如说AWSEC2示例上的cluster1。集群已启动并正在运行,已获取密钥空间卷的快照。
现在我想从快照卷中恢复几个表/键空间,因此我创建了另一个集群cluster2,并将快照卷附加到新集群的ec2节点上(节点数相同)。cluster2没有启动bcz所拍摄的快照中的系统密钥空间的群集名称为cluster1,而要还原它的群集是cluster2。在这种情况下,如何进行恢复?我不想对现有集群做任何修改。
另外,在执行恢复时,是否需要考虑新旧集群Map的令牌范围?
1条答案
按热度按时间zbdgwd5y1#
在启动cluster2之前,重要的是确保cluster1的所有ip地址都不包括在cluster2的种子列表中,以确保它们之间保持不知道状态。另外,要从路径中删除
data_file_directories
(如cassandra.yaml中所定义),以下目录:系统
系统认证
分布式系统
系统跟踪
system_schema
不应触碰,因为它包含键空间和表的模式定义。启动集群,一次启动一个节点;第一个节点应该在种子列表的开头包含它自己的ip地址;这将是一次性更改,一旦集群启动并运行,就应该删除更改。
此时,您应该有一个单独的集群,其中包含拍摄快照时原始集群的信息和结构。要测试这个,请执行
nodetool gossipinfo
并且只列出cluster2的节点,登录到cqlshdescribe keyspaces
应该列出所有键空间,执行应用程序的查询应该检索数据。您将注意到,cassandra已经生成了system*密钥空间,并处理了令牌分发。下一步是更新每个节点中已还原群集的名称:
登录cqlsh
执行
UPDATE system.local SET cluster_name = 'cluster2' where key='local';
退出cqlsh跑
nodetool flush
跑nodetool drain
编辑cassandra.yaml文件,更新cluster_name
名为“cluster2”重新启动cassandra服务
等待,直到节点报告为正常
nodetool status
或者nodetool netstats
对其他节点重复此操作此时,您将有两个独立的集群,名称不同。