这是一个示例场景,我们希望了解是否有可能恢复它,并更好地了解架构。
在一个只有一个节点的假设场景中,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。谢谢你,如果你帮助我!
2条答案
按热度按时间e5nqia271#
在Cassandra中,磁盘上的数据和模式是两个不同的东西。
为了能够恢复一个密钥空间模式,你首先需要使用
nodetool snapshot
来备份它。它将备份stable(硬链接)并创建一个包含该模式的schema.cql
文件。请在此处查看官方文档:https://cassandra.apache.org/doc/3.11/cassandra/operating/backups.html
x7rlezfr2#
我知道这是一个假设的场景,但在单节点集群上运行
resetlocalschema
是个坏主意。节点应该丢弃它的模式副本,并从其他节点请求最新的副本,但在单节点集群的情况下,没有节点可以从中获取模式。您确实不应该在单节点集群上运行
resetlocalschema
,除非您正在执行CASSANDRA-5094中讨论的某些特定测试或边缘用例活动。现在回答您关于如何恢复模式的问题,大多数企业通常在变更管理系统中都有其模式的副本(或CI/配置管理系统)。在对生产中的架构进行更新之前,通常要经过测试、同行评审、试运行/生产前验证并最终通过批准的变更请求部署到生产中(组织之间的条款可能不同,但最终目的是相同的)。
类似地,当您执行常规备份时,
nodetool snapshot
命令将模式的副本与SSTable备份一起存储。在我在https://dba.stackexchange.com/questions/316520/中发布的示例中,您可以看到snapshots/
文件夹包含manifest.json
(快照中包含的SSTable清单)和schema.cql
(快照时的模式):从上面的内容中,您应该能够看到有两个选项可用:
1.从您的变更管理系统中提交/同行评审的副本中重新创建架构,或者
1.从快照重新创建架构。
选择取决于你想达到什么样的目标。干杯!