- nebula 版本:v1.2.0
- 部署方式(分布式 / 单机 / Docker / DBaaS):docker 单机
- 硬件信息
- HDD 512G
- CPU、内存信息:4核 16G
- 问题的具体描述
- create snapshots
- show snapshots
- 我的问题是,这个快照文件在哪里,怎么通过恢复快照文件恢复数据库?
- nebula的存储目录如下:
能具体点么,我觉得文档没有描述的很清楚,我在/data 目录下没找到快照
我找到了快照的文件,有个问题就是,metat节点只有meta2的目录下有snapshot文件,storage目录下只有117目录下有snapshot,这个现象是对的么
官方文档:当前版本暂未提供快照恢复功能,需要用户根据实际的生产环境编写 shell 脚本实现。实现逻辑也比较简单,拷贝各 engine server 的快照到指定的文件夹下,并将此文件夹设置为 data_path,然后启动集群即可。
还有个问题,上面文档的描述,拷贝各 engine server 的快照到指定的文件夹下,并将此文件夹设置为 data_path,指的是storaged目录下的snapshot文件?将将此文件夹设置为 data_path,此文件夹是用户自定义么,我是修改docker-compose.yaml,设置storage节点为快照对应的文件夹,然后启动集群就可以了?
meta只对leader做snapshot,当前meta2就是leader,storage会对所有节点的part做snapshot。
关于snapshot的恢复,可以看到snapshot下的目录结构和data下的目录结构是一样的,这样的话根据实际业务场景选择不同的恢复方案,各有利弊,例如:
- 修改data_path指向新的snapshot
- 将snapshot复制到其他地方,并修改data_path
- 直接用snapshot下的文件替换原data_path的文件
好的,我先试试,谢谢了
试了下你给的方案,可以了,不过有个问题,这样恢复快照,是不是只能停掉Nebula恢复快照了?
是的
还有个问题是这样的:
- 测试服是在华南阿里云,5节点集群
- 线上服务器是在华东阿里云,3节点集群
- 测试服的Nebula图数据库入完所有数据后,做快照,通过oss上传快照,华东的服务器拉下来
- 华东的3节点集群能否通过oss下载下来的快照文件恢复数据
- 两个集群的节点数量不一致
1.0暂时还不支持,因为space 里面有part 对应到storage的机器ip 信息,换了环境 ip 不对 数据就读不出来,现在nebula 2.0正在做br 工具,后续ga 发布可以解决这个问题
快照数据里面有ip信息?换了环境就不行么。。。
是的,必须要离线恢复。
改IP到不是什么问题,如果目标节点比源节点少的话,可能会丢失部分part,源的part是分布在5个节点上,用其中的3个节点的snapshot恢复后,可能会导致数据丢失。
我看到修改IP的帖子也是你贡献的:
如果是迁移式的恢复,不需要停掉源库的5个节点,直接在线传snapshot就行。
但是目标库恢复快照一样要停掉吧,并且按照你说的,节点不一样,part的数据还会丢。。。
是的