使用 NebulaGraph Operator 备份和恢复数据¶
本文介绍如何对 Kubernetes 上的 NebulaGraph 集群进行数据备份和数据恢复。
Enterpriseonly
仅支持备份和恢复 Kubernetes 上的企业版 NebulaGraph 集群。
原理介绍¶
NebulaGraph BR(企业版)工具是 NebulaGraph 企业版数据备份和恢复的命令行工具。NebulaGraph Operator 基于 BR 工具来实现 Kubernetes 上的 NebulaGraph 集群数据的备份和恢复。
备份数据时,NebulaGraph Operator 会创建一个 Job,然后将 NebulaGraph 集群中的数据备份到指定的存储服务上。
恢复数据时,NebulaGraph Operator 会根据 NebulaRestore 资源对象定义的信息检查指定的备份 NebulaGraph 集群是否存在、远端存储的访问是否正常,并且会创建一个新的集群,然后将备份数据恢复到新创建的 NebulaGraph 集群中。更多信息参见恢复流程图。
前提条件¶
使用 NebulaGraph Operator 备份和恢复数据,需要满足以下条件:
- Nebula Operator 版本 >= 1.4.0。
- Kubernetes 上部署的企业版 NebulaGraph 集群正在运行。
-
在创建集群的 YAML 中,设置了
spec.enableBR
为true
。// 集群 YAML 文件示例部分内容。 apiVersion: apps.nebula-graph.io/v1alpha1 kind: NebulaCluster metadata: name: nebula spec: enableBR: true // 设置为 true 时,启用备份和恢复功能。 ...
- 只支持使用 S3 协议的存储服务(例如 AWS S3,Minio 等)备份和恢复数据。
- 集群中有足够的计算资源以恢复数据。
备份数据¶
备份说明¶
- NebulaGraph Operator 支持全量备份和增量备份。
- 数据备份过程中,指定图空间中的 DDL 和 DML 语句将会阻塞,我们建议在业务低峰期进行操作,例如凌晨 2 点至 5 点。
- 执行增量备份的集群和指定的上一次备份的集群需为同一个,并且和指定的上一次备份的(存储桶)路径需相同。
- 确保每次增量备份距离上一次备份的时间小于一个
wal_ttl
的时间。 - 不支持备份指定图空间数据。
全量备份¶
当备份数据至兼容 S3 协议的存储服务上时,需要创建一个备份任务(Job),它会将全量 NebulaGraph 数据备份到指定的存储位置。
全量备份任务(Job)的 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:v3.4.0
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 示例:
apiVersion: batch/v1
kind: Job
metadata:
name: nebula-incr-backup
spec:
parallelism: 1
ttlSecondsAfterFinished: 60
template:
spec:
restartPolicy: OnFailure
containers:
- image: vesoft/br-ent:v3.4.0
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:3.4.0 |
NebulaGraph BR 企业版工具的镜像地址。 |
spec.template.spec.containers[0].command |
- | 备份数据至兼容 S3 协议存储服务的命令。 有关命令中选项的描述,参见参数说明。 |
有关 Job 的更多设置,参见 Kubernetes Jobs。
设置完备份任务(Job)的 YAML 文件后,执行以下命令启动备份任务:
kubectl apply -f <backup_file_name>.yaml
数据备份成功后,会在指定的存储位置生成备份文件,例如BACKUP_2023_02_12_10_04_16
。
恢复数据¶
恢复说明¶
- 数据恢复执行成功后,会创建一个新的集群,老的集群不会被删除,用户可自行决定是否删除老的集群。
- 数据恢复会有一段时间的服务不可用,建议在业务低峰期进行操作。
恢复过程¶
当恢复备份在兼容 S3 协议服务上的数据时,需要创建一个 Secret,用于存储访问兼容 S3 协议的服务的凭证。然后创建一个恢复数据的资源对象(NebulaRestore),它会告诉 Operator 基于此资源对象定义的信息创建一个新的 NebulaGraph 集群,将备份数据恢复到新创建的集群中。
基于备份文件BACKUP_2023_02_12_10_04_16
恢复数据的 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。 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 文件后,执行以下命令启动恢复数据的任务:
kubectl apply -f <restore_file_name>.yaml
执行以下命令查看 NebulaRestore 对象的状态。
kubectl get rt <NebulaRestore_name> -w