使用 BR(企业版)备份数据¶
用户可以通过 BR 企业版工具备份 NebulaGraph 企业版数据。支持增量和全量备份,支持备份数据至本地及兼容亚马逊对象存储(Amazon S3)服务接口的云存储服务中。本文介绍如何备份数据。
背景信息¶
- 全量备份是指将数据库中的所有数据进行备份。
- 增量备份是指备份上一次备份后变化或者修改过的数据。上一次备份可以是全量备份或者增量备份。
- 关于 NebulaGraph 的数据目录结构,参见(默认)路径
usr/local/nebula-ent/data
。
注意事项¶
- 全量备份时,如果数据库中的数据量较大,可能会耗费较长时间。
- 数据备份过程中,指定图空间中的 DDL 和 DML 语句将会阻塞,建议在业务低峰期进行操作。
- 执行增量备份的集群和指定的上一次备份的集群需为同一个,并且和指定的上一次备份的(存储桶)路径需相同。
- 确保每次增量备份距离上一次备份的时间小于一个
wal_ttl
的时间。 - 确保 Agent 有对应 NebulaGraph 安装目录和备份目录的读写权限。
准备工作¶
- 已启动 NebulaGraph 服务。
- 已安装 BR 企业版工具和 Agent 插件并在集群中的每个机器上运行 Agent。
- 如果在本地保存备份目录,需要在 Meta 服务器、Storage 服务器和 BR 机器上创建绝对路径相同的目录,并记录绝对路径,同时需要保证账号对该目录有写权限。
全量备份¶
全量备份数据至云存储服务¶
Note
只支持备份数据至兼容亚马逊 S3 协议的云存储服务中。
在 BR 企业版工具安装目录下执行以下命令备份整个集群数据至云存储服务:
./br backup full --meta <ip_address:port> --s3.access_key <access_key> --s3.secret_key <secret_key> --s3.region <region_name> --storage s3://<storage_path> --s3.endpoint <endpoint_url>
例如,对 Meta 服务的地址为192.168.8.129:9559
的整个集群进行全量备份操作,并将备份目录保存至 Amazon S3 服务nebula-br-test
存储桶的/
路径下。
./br backup full --meta 192.168.8.129:9559 --s3.access_key QImbbGDjfQExxx --s3.secret_key dVSJZfl7tnoFq7Z5zt6sfxxxx --s3.region us-east-1 --storage s3://nebula-br-test/ --s3.endpoint http://192.168.8.xxx:9000/
全量备份数据至本地¶
Caution
在生产环境中,建议用户将 NFS(Network File System)共享存储设备挂载到 Meta 服务器、Storage 服务器和 BR 机器上进行本地备份,或者使用 Alibaba Cloud OSS、Amazon S3 进行远程备份。否则当需要通过本地文件恢复数据前,必须手动将这些备份目录移动到指定目录。
备份至本地时,只备份 leader metad 和 leader partition 的数据,因此当未使用共享存储且有多个 metad 或 partition 的 replica 数大于 1 时,需要手动将备份后的 leader metad 的目录(路径为<storage_path>/meta
)拷贝并覆盖其他 follower metad 节点的对应目录,并将 leader partition 的目录中对应的分片数据(路径为<storage_path>/<partition_id>
)拷贝至其他 follower partition 对应的目录中。不建议用户进行手动拷贝操作。
在 BR 企业版工具安装目录下执行以下命令备份整个集群数据至本地:
Note
确保备份目录的路径存在。
./br backup full --meta <ip_address:port> --storage local://<storage_path>
例如:对 Meta 服务的地址为192.168.8.129:9559
的整个集群进行全量备份操作,并将备份目录保存到本地的/backup/
路径下。
./br backup full --meta "192.168.8.129:9559" --storage "local:///backup/"
目录结构¶
全量备份会备份全量的 leader metad 和 leader partition 的数据。备份目录中,结构如下:
├── BACKUP_2022_08_12_08_41_19.meta(备份元信息)
├── data(storage 数据的备份目录)
│ ├── 1(图空间 ID)
│ │ ├── 1(分片 ID)
│ │ │ ├── data
│ │ │ │ ├── 000033.sst
│ │ │ │ ├── 000035.sst
│ │ │ │ ├── 000037.sst
│ │ │ │ ├── 000039.sst
│ │ │ │ ├── CURRENT
│ │ │ │ ├── MANIFEST-000004
│ │ │ │ └── OPTIONS-000007
│ │ │ └── wal
│ │ │ ├── 0000000000000000001.wal
│ │ │ ├── 0000000000000000267.wal
│ │ │ ├── 0000000000000000324.wal
│ │ │ └── commitlog.id
│ │ ├── 10(分片 ID)
...
└── meta(meta 数据的备份目录)
...
增量备份¶
Caution
进行增量备份前,确保上一次的全量备份或者增量备份目录中的数据无修改,否则可能造成增量备份失败。
增量备份数据至云存储服务¶
Note
只支持备份数据至兼容亚马逊 S3 协议的云存储服务中。
在 BR 企业版工具安装目录下执行以下命令备份增量数据至云存储服务:
./br backup incr --meta <ip_address:port> --s3.access_key <access_key> --s3.secret_key <secret_key> --s3.region <region_name> --storage s3://<storage_path> --s3.endpoint <endpoint_url> --base <backup_file_name>
例如,对 Meta 服务的地址为192.168.8.129:9559
的整个集群基于备份目录BACKUP_2022_08_11_09_11_07
进行增量备份操作,并将备份目录保存至 Amazon S3 服务nebula-br-test
存储桶的/
路径下。
./br backup incr --meta 192.168.8.129:9559 --s3.access_key QImbbGDjfQExxx --s3.secret_key dVSJZfl7tnoFq7Z5zt6sfxxxx --s3.region us-east-1 --storage s3://nebula-br-test/ --s3.endpoint http://192.168.8.xxx:9000/ --base BACKUP_2022_08_11_09_11_07
增量备份数据至本地¶
在 BR 企业版工具安装目录下执行以下命令备份增量数据至本地:
Note
确保备份目录的路径存在。
./br backup incr --meta <ip_address:port> --storage local://<storage_path> --base <backup_file_name>
例如:对 Meta 服务的地址为192.168.8.129:9559
的整个集群基于备份目录BACKUP_2022_08_11_09_11_07
进行增量备份操作,并将备份目录保存到本地的/backup/
路径下。
./br backup incr --meta "192.168.8.129:9559" --storage "local:///backup/" --base BACKUP_2022_08_11_09_11_07
目录结构¶
增量备份除了备份 leader meta 外,对于已有的图空间(以下代码中的图空间 ID 1
)的 leader partition 数据,只备份wal
目录;而对新增加的图空间(以下代码中的图空间 ID 4
)中 leader partition 数据, 备份其全量的data
和wal
目录数据。因此相较全量备份的数据结构,增量备份目录结构可能会有所不同。
增量备份目录结构示例如下:
├── BACKUP_2022_08_12_08_58_23.meta
├── data(storage 数据的备份目录)
│ ├── 1 (图空间 ID)
│ │ ├── 1 (分片 ID)
│ │ │ └── wal (wal 目录)
│ │ │ ├── 0000000000000000671.wal
│ │ │ ├── 0000000000000000700.wal
│ │ │ └── commitlog.id
...
│ └── 4 (图空间 ID)
│ ├── 1
│ │ ├── data(data 目录)
│ │ │ ├── 000009.sst
│ │ │ ├── CURRENT
│ │ │ ├── MANIFEST-000004
│ │ │ └── OPTIONS-000007
│ │ └── wal
│ │ ├── 0000000000000000001.wal
│ │ └── commitlog.id
└── meta(meta 数据的备份目录)
...
参数说明¶
参数 | 数据类型 | 是否必需 | 默认值 | 说明 |
---|---|---|---|---|
-h ,--help |
- | 否 | 无 | 查看帮助。 |
--debug |
- | 否 | 无 | 查看更多日志信息。 |
--log |
string | 否 | "br.log" |
日志路径。 |
--concurrency |
int | 否 | 无 | 用来控制数据备份时,上传文件的并发数量。默认值5 。 |
--meta |
string | 是 | 无 | 集群中任一 Meta 服务的地址和端口号。 |
--storage |
string | 是 | 无 | 备份数据存储位置,格式为:<schema>://<storage_path> 。schema :可选值s3 和local 。选择 s3 时,需要填写s3.access_key 、s3.endpoint 、s3.region 和s3.secret_key 。<storage_path> :存储位置的路径。 |
--s3.access_key |
string | 否 | 无 | 用于标识用户。 |
--s3.endpoint |
string | 否 | 无 | S3 对外服务的访问域名的 URL,指定 http 或 https。 |
--s3.region |
string | 否 | 无 | 数据中心所在物理位置。 |
--s3.secret_key |
string | 否 | 无 | 用户用于加密签名字符串和用来验证签名字符串的密钥,必须保密。 |
--base |
string | 是 | 无 | 之前任一备份的目录名。基于此备份,进行增量备份。 |
查看备份进度¶
在安装目录内可以查看 BR 的日志文件br.log
。日志文件会记录备份进度,内容类似:
{"level":"info","msg":"full upload storaged partition finished, progress: 1/20","time":"2023-03-15T02:13:20.946Z"}
{"level":"info","msg":"full upload storaged partition finished, progress: 2/20","time":"2023-03-15T02:13:21.154Z"}
{"level":"info","msg":"full upload storaged partition finished, progress: 3/20","time":"2023-03-15T02:13:21.537Z"}
下一步¶
备份目录生成后,可以将备份目录的数据恢复到 NebulaGraph 中。具体操作,参见恢复数据。
Caution
请勿修改备份目录的名称及路径,否则会导致数据恢复失败。