Skip to content

Commit

Permalink
[wip]Operator br (#2585)
Browse files Browse the repository at this point in the history
* add operator-br

* add operator-br

* more details
  • Loading branch information
abby-cyber authored Feb 14, 2023
1 parent 31bc2d5 commit 3e373b9
Showing 3 changed files with 242 additions and 19 deletions.
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

- 图计算:

0 comments on commit 3e373b9

Please sign in to comment.