我使用这个链接cassandra-backup.sh备份了我在cassandra中的键空间
为了还原,我编写了一个脚本,它复制备份文件夹中的内容,备份文件夹中包含快照,并粘贴到/var/lib/cassandra/data/mykeypsace/下的相应目录中,但是当我看到mykeyspace的表内容时,什么也没有还原。例如,备份文件夹:path/mykeyspace/tableone/snapshot/all contents to var/lib/cassandra/data/mykeyspace/tableone/all contents
恢复过程:
删除键空间
还原mykeyspace(.cql文件)的架构
停止cassandra服务
运行我的恢复脚本(复制粘贴)
节点工具修复
启动cassandra服务
我错过什么了吗?
其他细节:cqlsh5.0.1 | cassandra 3.11.3 | ubuntu 16.04
1条答案
按热度按时间kyxcudwk1#
我不想成为杀手锏,但备份过程并不像复制sstables那么简单。您需要跟踪实际生成特定sstable(或包含它的快照)的节点。
你需要:
备份
为群集中的每个节点创建快照
创建一个文件来存储属于哪个节点的令牌(
nodetool ring
或者nodetool info -T
)备份架构(您已经在这样做了)
恢复:
创建一个新群集,其节点数与要还原的群集的节点数相同
对于新集群中的每个节点,将cassandra.yaml中的初始\u令牌配置为备份阶段步骤2中获得的令牌
例如:
initial_token: 1, 2
确保cassandra的数据目录为空rm /var/lib/cassandra/data
(在每个节点上)启动群集中的所有节点
创建备份的架构。
将sstables从最新快照复制到cassandra的数据目录(在每个节点上)
跑
nodetool refresh
使cassandra加载新复制的数据(在每个节点上)关于令牌的快速示例(这可能会让人困惑):假设集群有3个节点,每个节点有2个虚拟令牌,所以范围是1-6。某些令牌分配给某些节点,最简单的方法是使用:
从快照恢复时,我必须为每个节点设置以下初始\u令牌:
这通常是自动的,因为虚拟令牌的默认设置是256。