当前位置: 首页 > 知识库问答 >
问题:

Cassandra密钥空间恢复

马峻
2023-03-14

我已经用这个链接备份了我在卡桑德拉的密钥空间cassandra-backup.sh

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

恢复所遵循的过程:

    < li >删除键区 < li >恢复我的密钥空间(。cql文件) < li >停止cassandra服务 < li >运行我的恢复脚本(复制粘贴内容) < li >节点工具修复 < li >启动cassandra服务

我错过了什么吗?

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

共有1个答案

邓深
2023-03-14

我不想扫大家的兴,但是备份过程并不像复制表格那样简单。您需要跟踪哪些节点实际上生成了特定的表(或者包含它的快照)。

您需要:

备份

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

恢复:

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

 类似资料:
  • 问题:我们的一个新客户希望数据存储在他自己的国家(法律法规)。然而,我们使用分布在不同国家的几个数据中心的现有客户数据。 问:我们如何在不太改变现有Cassandra架构的情况下,将新客户的数据分离到其自己的国家? 潜在的解决方案#1:为该客户使用单独的密钥空间。关键字空间之间的模式是相同的,这增加了数据迁移的复杂性,等等。DataStax支持确认可以为每个区域配置keyspace。然而,我们使用

  • 问题内容: 我想知道是否有人尝试使用默认键空间构建cassandra docker镜像,但我尝试在BUILD时间内完成该操作,但由于cassandra不在该阶段运行,因此无法正常工作。这类似于以下内容: 我的新方法是从入口点脚本执行此操作,但是,如果其他人有更好的主意,我现在想。 快乐运输:D 问题答案: 今天解决了这个问题。构建映像,该映像将在修改之前附加一个修改过的默认Cassandra 将所

  • 我已经搜索了StackOverflow一段时间,但我只是想确定...

  • 我已经开发并上传了我的应用程序到Google Play商店,现在我试图上传更新,但Android Studio不让我创建一个签名的APK,我确信我的密码和别名都是正确的。 会有其他方法来解决这个问题吗?或者有没有办法把Keystore转移到另一个Keystore,这样我就可以在Google Play商店更新我的应用程序 PS.我正在使用Android Studio北极狐,仍然有同样的问题。 任何帮

  • 我正在尝试将以下结构存储在卡桑德拉中。 上面的大多数查询是 这就是为什么将()设置为主键很有用的原因。 根据docu,Cassandra的默认分区键是主键的第一列-在我的例子中是,但我想在Cassandr集群上均匀分布数据,我不能允许一个中的所有数据只存储在一个分区中,因为有些商店有10M条记录,有些只有1k条记录。 我可以设置()作为分区键,然后我可以达到Cassandra集群中记录的统一分布。

  • 所以我有一张表,它看起来像这样: 我们依赖该表根据进行分页来正确排序。 问题是:当从cassandra返回结果时,看起来它们是根据ASCII值而不是逻辑的A-Z排序进行排序的。-对于观看它的人来说,这在程序上是有意义的,但在逻辑上是不合理的。 是否有一个选项来改变当前聚类顺序的方法? -或者另一种逻辑排序的方法?