如何在Cassandra中恢复架构?

nwwlzxa7  于 2022-11-29  发布在  Cassandra
关注(0)|答案(2)|浏览(161)

这是一个示例场景,我们希望了解是否有可能恢复它,并更好地了解架构。
在一个只有一个节点的假设场景中,Cassandra 3.11。我有一个密钥空间和一个表。

root@dd85fa9a3c41:/# cqlsh -k cycling -e "describe tables;"
rank_by_year_and_name

现在,我重置模式并重新启动Cassandra:(我没有节点可以再次复制)

root@dd85fa9a3c41:/# nodetool resetlocalschema

使用新的模式,我不再“看到”我的keyspace+表:

root@dd85fa9a3c41:/# cqlsh -e "describe keyspaces;"
system_traces  system_schema  system_auth  system  system_distributed

我丢失了我的原始模式,其中有我的keyspace+表。但是,它们仍然在磁盘上:

root@dd85fa9a3c41:/# ls -l /var/lib/cassandra/data/cycling/
total 0
drwxr-xr-x 1 root root 14 Nov 22 11:32 rank_by_year_and_name-4eedbbf0

在这种情况下,我如何恢复这个键空间呢?使用sstableloader,我可以重新创建keyspace+table并导入。
我想恢复这个模式,并再次看到我的keyspace+表。我还没有找到任何方法来做到这一点,除非手动重新创建和导入sstableloader。谢谢你,如果你帮助我!

e5nqia27

e5nqia271#

在Cassandra中,磁盘上的数据和模式是两个不同的东西。
为了能够恢复一个密钥空间模式,你首先需要使用nodetool snapshot来备份它。它将备份stable(硬链接)并创建一个包含该模式的schema.cql文件。
请在此处查看官方文档:https://cassandra.apache.org/doc/3.11/cassandra/operating/backups.html

x7rlezfr

x7rlezfr2#

我知道这是一个假设的场景,但在单节点集群上运行resetlocalschema是个坏主意。节点应该丢弃它的模式副本,并从其他节点请求最新的副本,但在单节点集群的情况下,没有节点可以从中获取模式。
您确实不应该在单节点集群上运行resetlocalschema,除非您正在执行CASSANDRA-5094中讨论的某些特定测试或边缘用例活动。
现在回答您关于如何恢复模式的问题,大多数企业通常在变更管理系统中都有其模式的副本(或CI/配置管理系统)。在对生产中的架构进行更新之前,通常要经过测试、同行评审、试运行/生产前验证并最终通过批准的变更请求部署到生产中(组织之间的条款可能不同,但最终目的是相同的)。
类似地,当您执行常规备份时,nodetool snapshot命令将模式的副本与SSTable备份一起存储。在我在https://dba.stackexchange.com/questions/316520/中发布的示例中,您可以看到snapshots/文件夹包含manifest.json(快照中包含的SSTable清单)和schema.cql(快照时的模式):

data/
  community/
    users-6140f420a4a411ea9212efde68e7dd4b/
      snapshots/
        1591083719993/
          manifest.json
          mc-1-big-CompressionInfo.db
          mc-1-big-Data.db
          mc-1-big-Digest.crc32
          mc-1-big-Filter.db
          mc-1-big-Index.db
          mc-1-big-Statistics.db
          mc-1-big-Summary.db
          mc-1-big-TOC.txt
          schema.cql

从上面的内容中,您应该能够看到有两个选项可用:
1.从您的变更管理系统中提交/同行评审的副本中重新创建架构,或者
1.从快照重新创建架构。
选择取决于你想达到什么样的目标。干杯!

相关问题