Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra键空间恢复_Cassandra_Ubuntu 16.04_Restore_Cassandra 3.0 - Fatal编程技术网

Cassandra键空间恢复

Cassandra键空间恢复,cassandra,ubuntu-16.04,restore,cassandra-3.0,Cassandra,Ubuntu 16.04,Restore,Cassandra 3.0,我已使用此链接备份了我在cassandra中的密钥空间 为了恢复,我编写了一个脚本,它从备份文件夹中复制内容,备份文件夹中包含快照并粘贴到/var/lib/cassandra/data/mykeypsace/下的相应目录中,但是当我看到mykeyspace的表内容时,没有任何内容被恢复。 例如,备份文件夹:path/mykeyspace/tableOne/snapshot/all contents to var/lib/cassandra/data/mykeyspace/tableOne/all

我已使用此链接备份了我在cassandra中的密钥空间

为了恢复,我编写了一个脚本,它从备份文件夹中复制内容,备份文件夹中包含快照并粘贴到/var/lib/cassandra/data/mykeypsace/下的相应目录中,但是当我看到mykeyspace的表内容时,没有任何内容被恢复。 例如,备份文件夹:path/mykeyspace/tableOne/snapshot/all contents to var/lib/cassandra/data/mykeyspace/tableOne/all contents

我要遵循的恢复过程:

  • 删除键空间
  • 还原mykeyspace(.cql文件)的架构
  • 停止卡桑德拉服务
  • 运行我的还原脚本(复制粘贴)
  • nodetool修复
  • 启动cassandra服务
  • 我错过什么了吗


    其他细节:cqlsh 5.0.1 | Cassandra 3.11.3 | Ubuntu16.04

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

    您需要:

    备份

  • 为群集中的每个节点创建快照
  • 创建一个文件,存储属于哪个节点的令牌(
    nodetool-ring
    nodetool-info-T
  • 备份架构(您已经在这样做了)
  • 恢复:

  • 创建一个新群集,该群集的节点数与要恢复的群集的节点数相同
  • 对于新集群中的每个节点,将cassandra.yaml中的初始_令牌配置为备份阶段步骤2中获得的令牌。(在每个节点上)
    此示例:
    初始令牌:1,2
  • 确保Cassandra的数据目录为空
    rm/var/lib/Cassandra/data
    (在每个节点上)
  • 启动群集中的所有节点
  • 创建备份的架构
  • 将sstables从最新快照复制到Cassandra的数据目录(在每个节点上)
  • 运行
    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 
    
    从快照恢复时,我必须为每个节点设置以下初始\u令牌:

    # 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

    当sstables就位时,您应该启动Cassandra,并且只运行
    nodetool refresh
    (这应该适用于实时集群)。sstable必须在它们最初所属的正确节点上恢复。@Mandraenke我发现sstable_活动。。。。在cassandra的系统文件夹下。我应该把它们也换了,然后开始卡桑德拉吗?天哪!如此忙碌的过程?我确实运行了'ring'有256行o/p,但令牌是个位数,我猜它们是时间戳示例'Token:-9156630274167109527'。顺便问一下,当你说每个节点时,我怎样才能得到节点的信息?因为我在ubuntu pc上运行它,我只需要备份和恢复我的1个数据库(keyspace)。即使要恢复1个键空间,我也必须执行您描述的步骤?@AmitL是的,即使是一个键空间。无论您要备份50 KSs还是1个表,该过程都是相同的。此恢复过程非常复杂,因为它是一个完整的群集恢复。如果某个节点发生故障,而您只希望恢复该节点,则应转而依赖复制因子和cassandra修复过程。关于令牌大小,其范围为-2^63到2^63-1