Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update BR #749

Merged
merged 11 commits into from
Aug 9, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions docs-2.0/7.data-security/2.backup-restore/1.what-is-br.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,21 @@ Backup&Restore(简称BR)是一款命令行界面(CLI)工具,可以帮

## 功能

- 支持备份一个或多个图空间的数据。
- 支持基于本地磁盘(SSD或HDD)、Hadoop分布式文件系统(HDFS)、阿里云对象存储(Alibaba Cloud OSS)或亚马逊对象存储(Amazon S3)中的备份文件恢复数据。
- 一键操作备份和恢复数据。
- 支持基于以下备份文件恢复数据:
- 本地磁盘(SSD或HDD)
- Hadoop分布式文件系统(HDFS)
- 阿里云对象存储(Alibaba Cloud OSS)
- 亚马逊对象存储(Amazon S3)(TODO)
- 支持备份整个 Nebula Graph 集群或指定图空间数据。(TODO)

## 限制

- Nebula Graph版本需要为v2.0.0-RC或更新版本
- Nebula Graph版本需要为v{{ nebula.release }}
- 数据备份仅支持全量备份,不支持增量备份。
- Nebula Listeners 暂时不支持备份。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
- 备份数据到本地磁盘,备份的文件将会放置在每个服务器的本地路径中。推荐做法是在该路径上挂载 NFS 文件系统,以便将备份数据还原到不同的主机上。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
- 备份单个或多个 space 只能恢复到原集群,不能跨集群恢复。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
- 数据备份过程中,指定图空间中的DDL和DML语句将会阻塞,我们建议您在业务低峰期进行操作,例如凌晨2点至5点。
- 数据恢复仅支持在相同拓扑的集群上进行,即原集群和目标集群的主机数量必须相同。
- 数据恢复需要删除数据并重启,建议离线进行。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -23,12 +31,14 @@ Backup&Restore(简称BR)是一款命令行界面(CLI)工具,可以帮
为了备份数据,BR会发送备份请求给leader的metad进程,触发备份。详细说明如下:

1. 验证BR访问Meta服务器和Storage服务器的SSH登录信息。

!!! Note

如果必须使用云存储,例如Alibaba Cloud OSS或Amazon S3,还需要验证它们的客户端安装和配置。

2. BR发起请求创建备份文件。
3. leader的metad进程被锁定。

!!! Note

从此时起至第9步结束,您无法在指定图空间内执行任何nGQL的DDL语句。
Expand Down Expand Up @@ -61,6 +71,7 @@ Backup&Restore(简称BR)是一款命令行界面(CLI)工具,可以帮

10. BR通过SSH登录至leader所在的Meta服务器和所有Storage服务器,然后备份文件。
11. 如果使用的是Alibaba Cloud OSS或Amazon S3,BR会调用命令将备份文件上传至云存储中。

!!! Note

本步骤会大量读取磁盘,建议使用万兆网络保证速率。如果上传过程中出现网络错误,备份会失败,必须重新执行备份操作。目前备份过程不支持断点续传。
Expand All @@ -77,11 +88,14 @@ Backup&Restore(简称BR)是一款命令行界面(CLI)工具,可以帮

### 恢复

>**警告**:恢复过程中,目标集群上已有的数据会被删除,然后替换为备份文件中的数据。建议您提前备份目标集群上的数据。
!!! danger

恢复过程中,目标集群上已有的数据会被删除,然后替换为备份文件中的数据。建议您提前备份目标集群上的数据。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved

恢复过程的详细说明如下:

1. 验证BR访问Meta服务器和Storage服务器的SSH登录信息。

!!! Note

如果必须使用云存储,例如Alibaba Cloud OSS或Amazon S3,还需要验证它们的客户端安装和配置。
Expand Down
18 changes: 13 additions & 5 deletions docs-2.0/7.data-security/2.backup-restore/2.compile-br.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,35 @@

## 准备工作

- 安装[Go](https://github.com/golang/go "Click to go to GitHub") 1.14或更新版本
- 安装 [Go](https://github.com/golang/go "Click to go to GitHub") 1.14.x或更新版本
- 安装make。

## 操作步骤

1. 克隆`nebula-storage`库至机器。

```bash
git clone https://github.com/vesoft-inc/nebula-storage.git
git clone https://github.com/vesoft-inc/nebula-br.git
```

2. 进入`br`目录。

```bash
cd nebula-storage/util/br
cd nebula-br
```

3. 编译BR。

```bash
make build && make test
make
```

如果BR编译成功,用户可以在`nebula-storage/util/br/bin/`目录内找到二进制文件`br`。
用户可以在命令行输入`bin/br version`,如果返回以下内容,则认为编译成功。

```bash
[nebula-br]$ bin/br version
Nebula Backup And Restore Ultility Tool,V-0.1.0
GitSha: 8e994dc
GitRef: master
please run "help" subcommand for more infomation.
```
124 changes: 29 additions & 95 deletions docs-2.0/7.data-security/2.backup-restore/3.br-backup-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,111 +7,45 @@ BR编译成功后,您可以备份指定图空间的数据,本文介绍如何
- BR编译完成。如何编译BR,请参见[编译BR](2.compile-br.md)。

- 确认Nebula Graph服务正在运行中。

- 确认需要备份的图空间名称。本文示例为`basketballplayer`。

- 确认Nebula Graph的绝对安装路径。本文示例为`/usr/local/nebula/`。

- 确认Meta服务器和Storage服务器的IP和端口。

- 在Nebula Graph的安装路径内查看`nebula-metad.conf`文件(例如`/usr/local/nebula/etc/nebula-metad.conf`),确认Meta服务器的IP和端口。本文示例为`192.168.8.161:9559`。

- 在Nebula Graph的安装路径内查看和`nebula-storaged.conf`文件(例如`/usr/local/nebula/etc/nebula-storaged.conf`),确认Storage服务器的IP和端口。本文示例为`192.168.8.161:9779`。

>**注意**:确保配置文件中使用的是实际的IP地址,而不是`127.0.0.1`。

- BR可以免密登录服务器,即您在BR机器上的账号可以通过SSH免密登录到Meta服务器和Storage服务器。详情请参见[SSH tunnels with keys](http://alexander.holbreich.org/ssh-tunnel-without-password/)。本文示例账号名称为`nebula`。
- BR可以免密登录服务器,即您在BR机器上的账号可以通过SSH免密登录到Meta服务器和Storage服务器。详情请参见[SSH tunnels with keys](http://alexander.holbreich.org/ssh-tunnel-without-password/)。

- 如果您使用Alibaba Cloud OSS或Amazon S3保存备份文件,请确保Meta服务器、Storage服务器和BR机器都已安装相应的客户端。详情请参见[Alibaba Cloud ossutil文档](https://www.alibabacloud.com/help/zh/doc-detail/120075.htm#concept-303829)和[Amazon S3 CLI文档](https://docs.amazonaws.cn/cli/latest/userguide/cli-services-s3.html)。
>**注意**:请创建软链接方便使用ossutil命令。命令为`ln -s /<ossutil_tool_installation_path>/<ossutil64 or ossutil> /usr/local/bin/ossutil`,根据实际路径和系统替换内容。

- 如果您在本地保存备份文件,需要在Meta服务器、Storage服务器和BR机器上创建绝对路径相同的目录,并记录绝对路径,同时需要保证账号对该目录有写权限。本文示例为`/home/user/backup/`。
>**注意**:在生产环境中,我们建议您将NFS (Network File System)存储设备挂载到Meta服务器、Storage服务器和BR机器上进行本地备份,或者使用Alibaba Cloud OSS、Amazon S3进行远程备份。否则当您需要通过本地文件恢复数据时,必须手动将这些备份文件移动到指定目录,会导致数据冗余和某些问题。更多信息,请参见[使用BR恢复数据](4.br-restore-data.md)。
!!! Note

请创建软链接方便使用ossutil命令。命令为`ln -s /<ossutil_tool_installation_path>/<ossutil64 or ossutil> /usr/local/bin/ossutil`,根据实际路径和系统替换内容。

- 如果您在本地保存备份文件,需要在Meta服务器、Storage服务器和BR机器上创建绝对路径相同的目录,并记录绝对路径,同时需要保证账号对该目录有写权限。

!!! Note

在生产环境中,我们建议用户将NFS (Network File System)存储设备挂载到Meta服务器、Storage服务器和BR机器上进行本地备份,或者使用Alibaba Cloud OSS、Amazon S3进行远程备份。否则当您需要通过本地文件恢复数据时,必须手动将这些备份文件移动到指定目录,会导致数据冗余和某些问题。更多信息,请参见[使用BR恢复数据](4.br-restore-data.md)。

## 操作步骤

1. 在`nebula-storage/util/br/config`目录内创建配置文件`backup.yaml`。您可以参考如下配置,目录内也有示例文件`backup_example.yaml`。

```yaml
meta_nodes:
- # 配置一个Meta服务器的IP和端口
addrs: "192.168.8.161:9559"
# 配置Nebula Graph的绝对安装路径
root: "/usr/local/nebula/"
# 配置metad进程数据目录的绝对路径
data: "/usr/local/nebula/data/meta"
# 配置可以免密登录服务器的账号名称,需要对备份存储目录有读写权限
user: "nebula"
#- # 如果存在多个metad进程,请参考上述配置继续添加
# addrs: "192.168.8.161:9559"
# root: "/usr/local/nebula/"
# data: "/usr/local/nebula/data/meta"
# user: "nebula"
#- addrs: "192.168.8.161:9559"
# root: "/usr/local/nebula/"
# data: "/usr/local/nebula/data/meta"
# user: "nebula"

storage_nodes:
- # 配置一个Storage服务器的IP和端口
addrs: "192.168.8.161:9779"
# 配置Nebula Graph的绝对安装路径
root: "/usr/local/nebula/"
# 配置storaged进程数据目录的绝对路径
data: "/usr/local/nebula/data/storage"
# 配置可以免密登录服务器的账号名称,需要对备份存储目录有读写权限
user: "nebula"
#- # 如果存在多个storaged进程,请参考上述配置继续添加
# addrs: "192.168.8.161:9779"
# root: "/usr/local/nebula/"
# data: "/usr/local/nebula/data/storage"
# user: "nebula"
#- addrs: "192.168.8.161:9779"
# root: "/usr/local/nebula/"
# data: "/usr/local/nebula/data/storage"
# user: "nebula"

# 设置备份文件的存储路径
# 如果在本地存储备份文件,请设置:
backend: "local:///home/user/backup/"
# 如果使用HDFS存储备份文件,请设置:
# hdfs://namenode:port/nebulabackup
# 如果使用Alibaba Cloud OSS存储备份文件,请设置:
# backend: "oss://nebulabackup"
# 如果使用Amazon S3存储备份文件,请设置:
# backend: "s3://nebulabackup"

# 设置要备份的图空间
# 如果需要备份多个图空间,请设置:
# space_names: ["space_name1", "space_name2", ..., "space_name"]
space_name: ["basketballplayer"]
```

2. 切换到`nebula-storage/util/br/bin/`目录。

```bash
cd nebula-storage/util/br/bin/
```

3. 执行如下命令备份数据。

```bash
./br backup full --config "/home/vesoft/nebula-storage/util/br/config/backup.yaml"
```

- `backup full`: 表示备份数据。
- `--config "/home/vesoft/nebula-storage/util/br/config/backup.yaml"`: 填写配置文件的绝对路径,通过配置文件进行备份。

4. (可选)默认情况下,备份完成后,所有快照都会被删除。如果删除过程中出错,您可以执行如下命令手动删除快照。
可以运行以下命令对地址为`192.168.136:9559`,用户名为`foesa.yang`的整个集群进行全量备份操作,并将备份文件保存到本地的 `/home/foesa.yang/backup`。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved

!!! Note

确保本地存储备份文件的路径存在。

```bash
./br cleanup --backup_name [backup file name] --meta 192.168.8.161:9559
```
```bash
$ ./bin/br backup full --meta "192.168.8.136:9559" --storage "local:///home/foesa.yang/backup" --user "foesa.yang" --verbose
```

- `cleanup`: 表示删除Meta服务器和Storage服务器上的所有临时文件,包括快照。
- `--backup_name BACKUP_YY_MM_DD_HH_mm_SS`: 指定要删除的备份文件名称。
- `--meta <IP address:port>`: 指定Meta服务器的IP和端口。
以下列出命令的相关参数。

| 参数 | 是否必需 | 默认值 | 说明 | 数据类型 |
| --- | --- | --- | --- | --- |
| --concurrent | 否 | 5 | 针对阿里云 OSS 最大并发数 | int |
| --connection | 否 | 5 | 最大 ssh 连接数 | int |
| --extra_args | 否 | 无 | 备份存储工具(oss/hdfs/s3)用于备份的参数 | string |
| --log | 否 | "br.log" | 日志路径 | string |
| --meta | 是| 无 | meta 服务的地址和端口号 | string |
| --stroage | 是 | 无 | BR 备份数据存储位置,格式为:\<Schema\>://\<PATH\> <br>Schema:可选值为 `local` 和 `hdfs` <br>PATH:存储位置的路径| string |
| --user | 是 | 无 | 登录到 meta/storage 服务所在主机的用户名 | string |
| --verbose | 否 | 无 | 显示的详细信息 | - |
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
## 下一步

备份文件生成后,您可以使用BR将备份文件的数据恢复到Nebula Graph中。具体操作,请参见[使用BR恢复数据](4.br-restore-data.md)。
Expand Down
Loading