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

Operator br #2585

Merged
merged 3 commits into from
Feb 14, 2023
Merged
Changes from all 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
5 changes: 3 additions & 2 deletions docs-2.0/nebula-operator/1.introduction-to-nebula-operator.md
Original file line number Diff line number Diff line change
@@ -22,6 +22,8 @@ NebulaGraph Operator 已具备的功能如下:

- **集群升级**:支持升级 {{operator.upgrade_from}} 版的 NebulaGraph 集群至 {{operator.upgrade_to}} 版。

- **备份和恢复**:支持备份 NebulaGraph 集群的数据至兼容 S3 协议的存储服务中并支持恢复数据至集群中。更多信息参考[使用 NebulaGraph Operator 备份和恢复数据](10.backup-restore-using-operator.md)

- **故障自愈**:NebulaGraph Operator 调用 NebulaGraph 集群提供的接口,动态地感知服务状态。一旦发现异常,NebulaGraph Operator 自动进行容错处理。更多信息参考[故障自愈](5.operator-failover.md)

- **均衡调度**:基于调度器扩展接口,NebulaGraph Operator 提供的调度器可以将应用 Pods 均匀地分布在 NebulaGraph 集群中。
@@ -34,8 +36,7 @@ NebulaGraph Operator 不支持 v1.x 版本的 NebulaGraph,其与 NebulaGraph

| NebulaGraph 版本 |NebulaGraph Operator 版本 |
| ------------------- | ---------------- |
| 3.0.0 ~ 3.4.0 |1.4.0|
| 3.0.0 ~ 3.3.x |1.3.0|
| 3.0.0 ~ 3.4.0 |1.3.0、1.4.0|
| 3.0.0 ~ 3.3.x |1.0.0、1.1.0、1.2.0|
| 2.5.x ~ 2.6.x |0.9.0|
| 2.5.x |0.8.0|
216 changes: 216 additions & 0 deletions docs-2.0/nebula-operator/10.backup-restore-using-operator.md
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
```


40 changes: 23 additions & 17 deletions mkdocs.yml
Original file line number Diff line number Diff line change
@@ -91,10 +91,13 @@ plugins:
# - graph-computing/use-explorer.md
# - nebula-exchange/use-exchange/ex-ug-export-from-nebula.md
# - nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md
# - nebula-operator/10.backup-restore-using-operator.md
# - synchronization-and-migration/replication-between-clusters.md
# - 20.appendix/8.about-license/
# - nebula-dashboard-ent/4.cluster-operator/operator/scale.md
# - 6.monitor-and-metrics/3.bbox
# - 6.monitor-and-metrics/3.bbox/
# - backup-and-restore/nebula-br-ent/
#
# ent.end
# comm.begin
# comm.end
@@ -504,6 +507,7 @@ nav:
- 安装 BR: backup-and-restore/nebula-br/2.compile-br.md
- 使用 BR 备份数据: backup-and-restore/nebula-br/3.br-backup-data.md
- 使用 BR 恢复数据: backup-and-restore/nebula-br/4.br-restore-data.md
#ent
- NebulaGraph BR(企业版):
- BR(企业版)概述: backup-and-restore/nebula-br-ent/1.br-ent-overview.md
- 安装 BR: backup-and-restore/nebula-br-ent/2.install-tools.md
@@ -701,22 +705,24 @@ nav:
- 导出 NebulaGraph 数据: nebula-exchange/use-exchange/ex-ug-export-from-nebula.md
- Exchange 常见问题: nebula-exchange/ex-ug-FAQ.md

# - NebulaGraph Operator:
# - 什么是 NebulaGraph Operator: nebula-operator/1.introduction-to-nebula-operator.md
# - 使用流程: nebula-operator/6.get-started-with-operator.md
# - 部署 NebulaGraph Operator: nebula-operator/2.deploy-nebula-operator.md
# - 部署 NebulaGraph集群:
# - 使用 Kubectl 部署 NebulaGraph 集群: nebula-operator/3.deploy-nebula-graph-cluster/3.1create-cluster-with-kubectl.md
# - 使用 Helm 部署 NebulaGraph 集群: nebula-operator/3.deploy-nebula-graph-cluster/3.2create-cluster-with-helm.md
# - 配置 NebulaGraph 集群:
# - 自定义 NebulaGraph 集群的配置参数: nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md
# - 回收 PV: nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md
# #ent
# - 均衡扩容后的 Storage 数据: nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md
# - 升级 NebulaGraph 集群: nebula-operator/9.upgrade-nebula-cluster.md
# - 连接 NebulaGraph 数据库: nebula-operator/4.connect-to-nebula-graph-service.md
# - 故障自愈: nebula-operator/5.operator-failover.md
# - 常见问题: nebula-operator/7.operator-faq.md
- NebulaGraph Operator:
- 什么是 NebulaGraph Operator: nebula-operator/1.introduction-to-nebula-operator.md
- 使用流程: nebula-operator/6.get-started-with-operator.md
- 部署 NebulaGraph Operator: nebula-operator/2.deploy-nebula-operator.md
- 部署 NebulaGraph:
- 使用 Kubectl 部署 NebulaGraph 集群: nebula-operator/3.deploy-nebula-graph-cluster/3.1create-cluster-with-kubectl.md
- 使用 Helm 部署 NebulaGraph 集群: nebula-operator/3.deploy-nebula-graph-cluster/3.2create-cluster-with-helm.md
- 配置 NebulaGraph:
- 自定义 NebulaGraph 集群的配置参数: nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md
- 回收 PV: nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md
#ent
- 均衡扩容后的 Storage 数据: nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md
- 升级 NebulaGraph: nebula-operator/9.upgrade-nebula-cluster.md
- 连接 NebulaGraph: nebula-operator/4.connect-to-nebula-graph-service.md
#ent
- 备份与恢复: nebula-operator/10.backup-restore-using-operator.md
- 故障自愈: nebula-operator/5.operator-failover.md
- 常见问题: nebula-operator/7.operator-faq.md

- 图计算: