Cassandra键空间还原

时间:2018-09-19 11:11:19

标签: cassandra ubuntu-16.04 restore cassandra-3.0

我已使用此链接cassandra-backup.sh

在cassandra中备份了密钥空间。

要恢复,我编写了一个脚本,该脚本从包含快照的备份文件夹中复制内容,并粘贴到/ var / lib / cassandra / data / mykeypsace /下的相应目录中,但是当我看到mykeyspace的表内容时,什么都没有恢复。 例如,备份文件夹:路径/ mykeyspace / tableOne / snapshot / all-contents到var / lib / cassandra / data / mykeyspace / tableOne / all-contents

我遵循的还原过程:

  1. 删除键空间
  2. 还原mykeyspace(.cql文件)的架构
  3. 停止卡桑德拉服务
  4. 运行我的还原脚本(复制粘贴内容)
  5. nodetool维修
  6. 启动cassandra服务

我想念什么吗?

其他详细信息:cqlsh 5.0.1 |卡桑德拉3.11.3 | ubuntu 16.04

1 个答案:

答案 0 :(得分:0)

讨厌成为杀人狂,但是备份过程并不像复制sstables那样简单。您需要跟踪哪些节点实际生成了特定的SSTable(或包含它的快照)。

您需要:

备份

  1. 为集群中的每个节点创建快照
  2. 创建一个文件,该文件存储哪些令牌属于哪个节点(nodetool ringnodetool info -T
  3. 备份架构(您已经在执行此操作)

恢复:

  1. 使用与要还原的群集相同数量的节点创建新群集
  2. 对于新集群中的每个节点,将cassandra.yaml中的initial_token配置为在备份阶段从步骤2获得的令牌。(在每个节点上)
    例如:initial_token: 1, 2
  3. 确保Cassandra的数据目录为空rm /var/lib/cassandra/data(在每个节点上)
  4. 启动集群中的所有节点
  5. 创建您备份的架构。
  6. 将最新快照中的sstables复制到Cassandra的数据目录(在每个节点上)
  7. 运行nodetool refresh以使Cassandra加载新复制的数据。 (在每个节点上)

有关令牌的快速示例(这可能会令人困惑): 假设集群有3个节点,每个节点有2个虚拟令牌,因此范围是1-6。某些令牌分配给某些节点,最简单的方法是使用:

$ nodetool ring

Datacenter: datacenter1
==========
Address        Rack        Status State   Load            Owns                Token                                       
                                                                              6                         
127.0.0.1      rack1       Up     Normal  156.55 MiB      33.33%              1                       
127.0.0.1      rack1       Up     Normal  156.55 MiB      33.33%              2                       
127.0.0.2      rack1       Up     Normal  156.54 MiB      33.33%              3
127.0.0.2      rack1       Up     Normal  156.54 MiB      33.33%              4
127.0.0.3      rack1       Up     Normal  156.55 MiB      33.33%              5
127.0.0.3      rack1       Up     Normal  156.55 MiB      33.33%              6 

从快照恢复时,我必须为每个节点设置以下initial_token:

# node 127.0.0.1's cassandra.yaml
initial_token: 1,2 

# node 127.0.0.2's cassandra.yaml
initial_token: 3,4 

# node 127.0.0.3's cassandra.yaml 
initial_token: 5,6 

这通常是自动的,因为虚拟令牌的默认设置为256。