-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add operator-br * add operator-br * more details
- Loading branch information
1 parent
31bc2d5
commit 3e373b9
Showing
3 changed files
with
242 additions
and
19 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
216 changes: 216 additions & 0 deletions
216
docs-2.0/nebula-operator/10.backup-restore-using-operator.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,216 @@ | ||
# 使用 NebulaGraph Operator 备份和恢复数据 | ||
|
||
本文介绍如何对 Kubernetes 上的 NebulaGraph 集群进行数据备份和数据恢复。 | ||
|
||
!!! enterpriseonly | ||
|
||
仅支持备份和恢复 Kubernetes 上的企业版 NebulaGraph 集群。 | ||
|
||
## 原理介绍 | ||
|
||
[NebulaGraph BR(企业版)](../backup-and-restore/nebula-br-ent/1.br-ent-overview.md)工具是 NebulaGraph 企业版数据备份和恢复的命令行工具。NebulaGraph Operator 基于 BR 工具来实现 Kubernetes 上的 NebulaGraph 集群数据的备份和恢复。 | ||
|
||
备份数据时,NebulaGraph Operator 会创建一个 Job,然后将 NebulaGraph 集群中的数据备份到指定的存储服务上。 | ||
|
||
恢复数据时,NebulaGraph Operator 会根据 NebulaRestore 资源对象定义的信息检查指定的备份 NebulaGraph 集群是否存在、远端存储的访问是否正常,并且会创建一个新的集群,然后将备份数据恢复到新创建的 NebulaGraph 集群中。更多信息参见[恢复流程图](https://github.com/vesoft-inc/nebula-operator/blob/v{{operator.release}}/doc/user/br_guide.md#restore-nebulagraph-cluster)。 | ||
|
||
|
||
## 前提条件 | ||
|
||
使用 NebulaGraph Operator 备份和恢复数据,需要满足以下条件: | ||
|
||
- Nebula Operator 版本 >= 1.4.0。 | ||
- Kubernetes 上部署的企业版 NebulaGraph 集群正在运行。 | ||
- 在创建集群的 YAML 中,设置了`spec.enableBR`为`true`。详细信息参见[]()。 | ||
- 只支持使用 S3 协议的存储服务(例如 AWS S3,Minio 等)备份和恢复数据。 | ||
- 集群中有足够的计算资源以恢复数据。 | ||
|
||
## 备份数据 | ||
|
||
### 备份说明 | ||
|
||
- NebulaGraph Operator 支持全量备份和增量备份。 | ||
- 数据备份过程中,指定图空间中的 DDL 和 DML 语句将会阻塞,我们建议在业务低峰期进行操作,例如凌晨 2 点至 5 点。 | ||
- 执行增量备份的集群和指定的上一次备份的集群需为同一个,并且和指定的上一次备份的(存储桶)路径需相同。 | ||
- 确保每次增量备份距离上一次备份的时间小于一个wal_ttl的时间。 | ||
- 确保 Agent 有对应 NebulaGraph 安装目录和备份目录的读写权限。 | ||
- 不支持备份指定图空间数据。 | ||
|
||
### 全量备份 | ||
|
||
当备份数据至兼容 S3 协议的存储服务上时,需要创建一个备份任务(Job),它会将全量 NebulaGraph 数据备份到指定的存储位置。 | ||
|
||
全量备份任务(Job)的 YAML 示例如下: | ||
|
||
```yaml | ||
apiVersion: batch/v1 | ||
kind: Job | ||
metadata: | ||
name: nebula-full-backup | ||
spec: | ||
parallelism: 1 | ||
ttlSecondsAfterFinished: 60 | ||
template: | ||
spec: | ||
restartPolicy: OnFailure | ||
containers: | ||
- image: vesoft/br-ent:v{{br_ent.release}} | ||
imagePullPolicy: Always | ||
name: backup | ||
command: | ||
- /bin/sh | ||
- -ecx | ||
- exec /usr/local/bin/nebula-br backup full | ||
- --meta $META_ADDRESS:9559 | ||
- --storage s3://$BUCKET | ||
- --s3.access_key $ACCESS_KEY | ||
- --s3.secret_key $SECRET_KEY | ||
- --s3.region $REGION | ||
- --s3.endpoint https://s3.$REGION.amazonaws.com | ||
``` | ||
### 增量备份 | ||
除了`spec.template.spec.containers[0].command`指定的执行命令和 Job 名称不同外,增量备份的 YAML 文件与全量备份的 YAML 文件相同。增量备份的 YAML 示例: | ||
|
||
```yaml | ||
apiVersion: batch/v1 | ||
kind: Job | ||
metadata: | ||
name: nebula-incr-backup | ||
spec: | ||
parallelism: 1 | ||
ttlSecondsAfterFinished: 60 | ||
template: | ||
spec: | ||
restartPolicy: OnFailure | ||
containers: | ||
- image: vesoft/br-ent:v{{br_ent.release}} | ||
imagePullPolicy: Always | ||
name: backup | ||
command: | ||
- /bin/sh | ||
- -ecx | ||
- exec /usr/local/bin/nebula-br backup incr | ||
- --meta $META_ADDRESS:9559 | ||
- --base $BACKUP_NAME | ||
- --storage s3://$BUCKET | ||
- --s3.access_key $ACCESS_KEY | ||
- --s3.secret_key $SECRET_KEY | ||
- --s3.region $REGION | ||
- --s3.endpoint https://s3.$REGION.amazonaws.com | ||
``` | ||
|
||
### 参数说明 | ||
|
||
主要参数说明如下: | ||
|
||
| 参数 |默认值| 说明 | | ||
| ------------- | ---- | ---- | | ||
| `spec.parallelism` |1 |并行执行的任务数。 | | ||
| `spec.ttlSecondsAfterFinished` | 60 | 在任务完成后,保留任务信息的时间。 | | ||
| `spec.template.spec.containers[0].image` | `vesoft/br-ent:{{br_ent.release}}`|NebulaGraph BR 企业版工具的镜像地址。 | | ||
| `spec.template.spec.containers[0].command`| - | 备份数据至兼容 S3 协议存储服务的命令。<br/>有关命令中选项的描述,参见[参数说明](../backup-and-restore/nebula-br-ent/3.backup-data.md#_12)。 | | ||
|
||
|
||
有关 Job 的更多设置,参见 [Kubernetes Jobs](https://kubernetes.io/docs/concepts/workloads/controllers/job/)。 | ||
|
||
设置完备份任务(Job)的 YAML 文件后,执行以下命令启动备份任务: | ||
|
||
```bash | ||
kubectl apply -f <backup_file_name>.yaml | ||
``` | ||
|
||
数据备份成功后,会在指定的存储位置生成备份文件,例如`BACKUP_2023_02_12_10_04_16`。 | ||
|
||
## 恢复数据 | ||
|
||
### 恢复说明 | ||
|
||
- 数据恢复执行成功后,会创建一个新的集群,老的集群不会被删除,用户可自行决定是否删除老的集群。 | ||
- 数据恢复会有一段时间的服务不可用,建议在业务低峰期进行操作。 | ||
|
||
<!-- ### 恢复过程 | ||
|
||
恢复数据的过程如下: | ||
|
||
NebulaRestore字段检验,检查指定的nebula集群是否存在,远端存储S3访问是否正常 | ||
|
||
根据backupName下载备份集群的元数据信息,解析后得到备份集群的物理拓扑结构,跟将要恢复集群比对做同构性验证 | ||
|
||
复制备份集群的Spec配置,创建新的集群用于恢复数据,需要确认启动前有充裕的资源可供调度 | ||
|
||
Metad Pod的init容器下载备份数据,下载成功后继续启动Metad容器,全部running后由oparator调用Metad接口加载备份数据 | ||
Storaged Pod的init容器下载备份数据,下载成功由agent容器进行数据回放,成功后继续启动Storaged容器,全部running后继续启动Graphd容器 | ||
|
||
等到集群启动就绪后由operator调用agent接口清除下载的备份数据,同时移除当前集群的init容器配置 --> | ||
|
||
### 恢复过程 | ||
|
||
当恢复备份在兼容 S3 协议服务上的数据时,需要创建一个 Secret,用于存储访问兼容 S3 协议的服务的凭证。然后创建一个恢复数据的资源对象(NebulaRestore),它会告诉 Operator 基于此资源对象定义的信息创建一个新的 NebulaGraph 集群,将备份数据恢复到新创建的集群中。 | ||
|
||
基于备份文件`BACKUP_2023_02_12_10_04_16`恢复数据的 YAML 示例: | ||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Secret | ||
metadata: | ||
name: aws-s3-secret | ||
type: Opaque | ||
data: | ||
access-key: QVNJQVE0WFlxxx | ||
secret-key: ZFJ6OEdNcDdxenMwVGxxx | ||
--- | ||
apiVersion: apps.nebula-graph.io/v1alpha1 | ||
kind: NebulaRestore | ||
metadata: | ||
name: restore1 | ||
spec: | ||
br: | ||
clusterName: nebula | ||
backupName: "BACKUP_2023_02_12_10_04_16" | ||
concurrency: 5 | ||
s3: | ||
region: "us-west-2" | ||
bucket: "nebula-br-test" | ||
endpoint: "https://s3.us-west-2.amazonaws.com" | ||
secretName: "aws-s3-secret" | ||
``` | ||
|
||
### 参数说明 | ||
|
||
- Secret | ||
|
||
|参数|默认值|说明| | ||
|:---|:---|:---| | ||
|`metadata.name`|-|Secret 的名称。| | ||
|`type`|`Opaque`|Secret 的类型。参见[Types of Secret](https://kubernetes.io/docs/concepts/configuration/secret/#secret-types)。| | ||
|`data.access-key`|-|访问兼容 S3 协议的存储服务的 AccessKey。| | ||
|`data.secret-key`|-|访问兼容 S3 协议的存储服务的 SecretKey。| | ||
|
||
- NebulaRestore | ||
|
||
|参数|默认值|说明| | ||
|:---|:---|:---| | ||
|`metadata.name`|-|资源对象 NebulaRestore 的名称。| | ||
|`spec.br.clusterName`|-|备份集群的名称。| | ||
|`spec.br.backupName`|-|备份文件的名称。基于这个备份文件恢复数据。| | ||
|`spec.br.concurrency`|`5`|用来控制数据恢复时下载文件的并发数量。默认值`5`。| | ||
|`spec.br.s3.region`|-| S3 存储桶所在的地理区域。| | ||
|`spec.br.s3.bucket`|-|存储备份数据的 S3 存储桶路径。| | ||
|`spec.br.s3.endpoint`|-|S3 存储桶的访问地址。| | ||
|`spec.br.s3.secretName`|-|用于访问 S3 存储桶的凭证的 Secret 的名称。| | ||
|
||
设置完恢复数据的 YAML 文件后,执行以下命令启动恢复数据的任务: | ||
|
||
```bash | ||
kubectl apply -f <restore_file_name>.yaml | ||
``` | ||
|
||
执行以下命令查看 NebulaRestore 对象的状态。 | ||
|
||
```bash | ||
kubectl get rt <NebulaRestore_name> -w | ||
``` | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters