一、前言
在上一篇文章中,讲述了如何安装 NebulaGraph,安装的几种方式,以及不同的适用场景,但软件的安装只是软件使用的开始 ,在整个使用的周期中还涉及其他很多操作,NebulaGraph 作为一款图数据库,他的备份以及恢复,也是使用中的重要一环,这篇文章将在安装文章后,继续为大家带来 NebulaGraph 备份管理的相关内容,希望帮助大家快速上手使用。
二、备份
2.1、备份工具介绍以及安装
官方提供备份工具 BR,可以使用该工具对 NebulaGraph 数据进行备份还原,我本地安装的几个环境是 3.6.0,目前查看版本和备份工具的对应关系,还有写明可以支持 3.6.0,我们使用最新版的 BR 工具进行尝试:
# 下载 BR
wget https://github.com/vesoft-inc/nebula-br/releases/download/v3.5.0/br-3.5.0-linux-amd64
# 重命名并放入系统 PATH,放入系统 PATH 后可以直接执行命令,不用./
sudo mv br-3.5.0-linux-amd64 /usr/local/bin/br
# 赋权 755,使用 BR 命令可以正常使用
sudo chmod 755 /usr/local/bin/br
# 查看版本
BR version
安装完毕
要正常使用 BR 工具还需要在每台机器上安装 Agent 才能正常使用,Agent 以二进制形式存在各个机器的安装目录中,通过 RPC 协议对 BR 工具提供服务。
本地单机安装环境安装 Agent 方式
# 下载 Agent
wget https://github.com/vesoft-inc/nebula-agent/releases/download/v3.6.1/agent-3.6.1-linux-amd64
# 重命名并放入系统 PATH,放入系统 PATH 后可以直接执行命令,不用./
sudo mv agent-3.6.1-linux-amd64 /usr/local/bin/agent
# 赋权 755,使用 BR 命令可以正常使用
sudo chmod 755 /usr/local/bin/agent
# 启动 Agent,务必要写成 127.0.0.1,原因会在小结中给出,此处有小坑
sudo nohup agent --agent="127.0.0.1:8888" --meta="127.0.0.1:9559" > nebula_agent.log 2>&1 &
启动完成
连接服务,查看 Agent 状态
补充:连接服务需要使用客户端工具,安装很容易不在废话,直接参考官方文档
2.2、备份
单机环境备份
sudo br backup full --meta "127.0.0.1:9559" --storage "local:///opt/backup"
备份完成
2.3、备份计划以及定时备份
2023 年了都,不会还有人天天手工备份吧,我们可以制定一个备份计划,例如每天晚上 1 点进行备份,然后通过 Linux 的定时任务完成自动备份
# 添加备份任务
sudo crontab -e
# 内容如下
0 1 * * * br backup full --meta "127.0.0.1:9559" --storage "local:///opt/backup"
三、还原
3.1、还原操作
# 查看备份
sudo br show --storage "local:///opt/backup"
# 恢复数据
sudo br restore full --meta "127.0.0.1:9559" --storage "local:///opt/backup" --name BACKUP_2023_12_05_03_09_35
四、小结
4.1、测试当中遇到了一些小问题。
比如注册时使用的必须是 IP 127.0.0.1,否则会有如下报错。
- 报错一:
Error: parse cluster response failed: response is not successful, code is E_LIST_CLUSTER_NO_AGENT_FAILURE
原因也很简单(虽然我找了半天。。。)就是注册上去的服务地址都是 127.0.0.1(应该是可以通过配置文件修改的),如果使用其他的 IP,会导致服务任务对应的节点没有 Agent 导致报错。
- 报错二:
Error: there is no meta files in backup info
这个报错是因为还没有数据,所以没法备份(别问我怎么知道的。。。我是 fw)。
4.2、我没能解决的问题
我目前安装了三套环境:一套单机,一套 Docker-Compose 部署,一套 K8s 部署,目前只根据官方文档,实现了单机备份,尚未解决 Docker-Compose 以及 K8s 环境的备份。
我的思路:Docker-Compose 部署方式要进行备份,需要保证 Agent 的注册 IP 和其他服务的注册 IP 一致才能进行备份,是否使用 Docker 的 host 网络去部署所有服务就可以解决,但是 host 网络会存在端口冲突等问题,所以还没有解决办法。。。
K8s 部署方式要进行备份,估计要改动 yaml 文件,每个服务中注入一个新的 container 运行 Agent,然后制作一个 rb 的镜像,应该就可以实现备份的功能,受限于时间,还没有测试,我的错我的错。。。
最后,实践才是检验的真标准,不要看过文档就觉得很简单, 很多细节问题要自己发现。
本文正在参加 NebulaGraph 技术社区年度征文活动,征文详情:https://discuss.nebula-graph.com.cn/t/topic/13970
如果你觉得本文对你有所启发,记得给我点个 ,谢谢你的鼓励