一、BR 工具
BR
(Backup
&Restore
)是 NebulaGraph
中一款命令行界面(CLI
)工具,可以帮助备份图空间中的数据和恢复数据。使用 BR
工具备份和恢复 NebulaGraph
时,还需要安装 NebulaGraph Agent
服务。Agent
是集群中每台机器的一个守护进程,用于启停 NebulaGraph
服务和上传、下载备份文件。
支持:
- 一键操作备份和恢复数据。
- 支持基于以下备份文件恢复数据:
- 本地磁盘(
SSD
或HDD
),建议仅在测试环境使用。 - 兼容亚马逊对象存储(
Amazon S3
)云存储服务接口,例如:阿里云对象存储(Alibaba Cloud OSS
)、MinIO
、Ceph RGW
等。
- 本地磁盘(
- 支持备份并恢复整个
NebulaGraph
集群。 - (实验性功能)支持备份指定图空间数据。
限制:
NebulaGraph
版本需要为v3.x
。- 数据备份仅支持全量备份,不支持增量备份。
Listener
暂时不支持备份,且全文索引也不支持备份。- 如果备份数据到本地磁盘,备份的文件将会放置在每个服务器的本地路径中。也可以在本地挂载
NFS
文件系统,以便将备份数据还原到不同的主机上。 - 备份图空间只能恢复到原集群,不能跨集群恢复,并且集群的
Storage
主机数量及IP
需一致。还原指定图空间时将清除集群中其余所有图空间。 - 数据备份过程中,所有图空间中的
DDL
和DML
语句将会阻塞,我们建议在业务低峰期进行操作,例如凌晨2
点至5
点。 - 数据恢复期间有一段时间服务会被停止。
- 不支持在容器部署的
NebulaGraph
集群中使用BR
。
官方介绍地址:https://docs.nebula-graph.com.cn/3.6.0/backup-and-restore/nebula-br/1.what-is-br/
下面通过实验一起学习下如何使用 BR
工具,在开始前需要部署好 NebulaGraph
服务,并保证服务运行良好:
如果不熟悉服务的搭建,可以参考下面这篇文章:
安装 BR
BR
与 NebulaGraph
有版本兼容关系,参考如下表:
NebulaGraph版本 | BR 社区版本 | Agent 版本 |
---|---|---|
3.5.x ~ 3.6.0 | 3.6.0 | 3.6.x ~ 3.7.0 |
3.3.0 ~ 3.4.x | 3.3.0 | 0.2.0 ~ 3.4.0 |
3.0.x ~ 3.2.x | 0.6.1 | 0.1.0 ~ 0.2.0 |
由于我安装的 NebulaGraph
集群是使用的 3.0.0
版本的,因此这里 br
使用 0.6.0
版本,Agent
使用 0.2.0
版本。
可以在任意一台机器中安装,下载 BR
:
wget https://github.com/vesoft-inc/nebula-br/releases/download/v0.6.0/br-0.6.0-linux-amd64
修改文件名称为br
:
mv br-0.6.0-linux-amd64 br
添加可执行权限:
chmod +x br
查看版本:
./br version
安装 Agent
NebulaGraph Agent
需要在每台机器中都要安装。
下载 Agent
:
wget https://github.com/vesoft-inc/nebula-agent/releases/download/v0.2.0/agent-0.2.0-linux-amd64
修改名称为agent
:
mv agent-0.2.0-linux-amd64 agent
添加可执行权限:
chmod +x agent
启动 Agent
:
nohup ./agent --agent="10.234.222.39:8888" --meta="10.234.222.40:9559" --ratelimit=1048576 > nebula_agent.log 2>&1 &
其中:
- –agent:
Agent
所在机器的IP
地址和访问端口。 - –meta:集群中任一 Meta 服务所在机器的
IP
地址和访问端口。 - –ratelimit:可选项,限制文件上传和下载的速度,防止带宽被占满导致其他服务不可用。单位:
Bytes
。
查看 Agent
的运行状态:
SHOW HOSTS AGENT;
二、创建测试空间和数据
在实践备份和恢复前,创建个测试空间和测试数据:
创建空间:
create space test(partition_num=15, replica_factor=1, vid_type=fixed_string(30));
使用空间:
use test;
创建 TAG
:
create tag team(team_name string, persion_num int);
create tag game(name string);
创建关系:
create edge info(num int);
创建索引:
create tag index if not exists team_index on team (team_name (20));
添加测试数据:
insert vertex team(team_name, persion_num) values "team_1":("team_1", 42);
insert vertex team(team_name, persion_num) values "team_2":("team_2", 45);
insert vertex team(team_name, persion_num) values "team_3":("team_3", 60);
insert vertex game(name) values "game_1":("game_1");
insert vertex game(name) values "game_2":("game_2");
insert vertex game(name) values "game_3":("game_3");
insert edge info(num) values "team_1" -> "game_1":(95);
insert edge info(num) values "team_2" -> "game_2":(96);
insert edge info(num) values "team_2" -> "game_3":(97);
insert edge info(num) values "team_3" -> "game_3":(95);
测试查询数据:
match (v:team)-[e:info]->(v1:game) return v,e,v1 limit 10
三、数据备份
使用 br
备份数据:
备份到本地,注意:如果 meta
是部署的集群,最好通过 nfs
共享目录存储备份,或者备份到 Minio
:
./br backup full --meta "10.234.222.40:9559" --spaces "test" --storage "local:///data/nebula/backup/"
或者备份到 Minio
:
./br backup full --meta "10.234.222.40:9559" --s3.endpoint "http://10.234.222.36:9000" --storage="s3://bucket-test/backup/" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default
看到 Backup succeed.
即备份成功,其中 --spaces
指定了备份的空间,如果不指定则备份全部空间。
查看备份信息:
./br show --storage "local:///data/nebula/backup/"
或者查看 minio
上的备份:
./br show --s3.endpoint "http://10.234.222.36:9000" --storage="s3://bucket-test/backup/" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default
其中 NAME
信息在备份时需要使用。
四、恢复
将上面创建的 test
空间删除:
drop space test;
开始恢复:
./br restore full --meta "10.234.222.40:9559" --storage "local:///data/nebula/backup/" --name BACKUP_2024_03_15_15_31_00
或者从 minio
上恢复:
./br restore full --meta "172.25.222.87:9559" --s3.endpoint "http://10.234.222.36:9000" --storage="s3://bucket-test/backup/" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default --name BACKUP_2024_03_17_16_37_07
其中 --name
就是上面备份信息中的 NAME
字段。
看到 Restore succeed.
表示恢复成功,验证是否恢复:
match (v:team)-[e:info]->(v1:game) return v,e,v1 limit 10
恢复后,如果需要删除备份文件可以进行下面操作:
./br cleanup --meta "10.234.222.40:9559" --storage "local:///data/nebula/backup/" --name BACKUP_2024_03_15_15_31_00