Please enable Javascript to view the contents

FoundationDB 数据备份与恢复

 ·  ☕ 1 分钟

1. 设置环境变量

  • 设置 foundationdb 集群名称和版本
1
2
3
4
5
export CLUSTER_NAME=
export NAMESPACE=
export DEPLOY_NAME=${CLUSTER_NAME}-deployment
export SECRET_NAME=fdb-backup-secret
export VERSION=7.1.26
  • 设置 S3 备份存储桶和凭证
1
2
3
4
5
export BUCKET=
export HOST=s3.us-west-2.amazonaws.com
export AK=x
export SK=x
export S3_BACKUP_URI="blobstore://${AK}:${SK}@${HOST}/fdb-backup?bucket=${BUCKET}&sc=0"

2. 创建凭证

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: ${SECRET_NAME}
  namespace: ${NAMESPACE}
type: Opaque
stringData:
  credentials: |
    {
      "accounts": {
        "${BUCKET}@${HOST}": {
          "access_key": "${AK}",
          "secret": "${SK}",
          "endpoint": "${HOST}"
        }
      }
    }
EOF

3. 创建备份负载

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
kubectl apply -f - <<EOF
apiVersion: apps.foundationdb.org/v1beta2
kind: FoundationDBBackup
metadata:
  name: ${CLUSTER_NAME}
  namespace: ${NAMESPACE}
spec:
  version: ${VERSION}
  clusterName: ${CLUSTER_NAME}
  snapshotPeriodSeconds: 3600
  blobStoreConfiguration:
    accountName: ${BUCKET}@${HOST}
    urlParameters:
    - "secure_connection=0"
  podTemplateSpec:
    spec:
      volumes:
        - name: backup-credentials
          secret:
            secretName: ${SECRET_NAME}
      containers:
        - name: foundationdb
          env:
            - name: FDB_BLOB_CREDENTIALS
              value: /var/backup-credentials/credentials
          volumeMounts:
            - name: backup-credentials
              mountPath: /var/backup-credentials
  sidecarContainer:
      imageConfigs:
        - baseImage: registry.cn-beijing.aliyuncs.com/opshub/foundationdb-foundationdb-kubernetes-sidecar
          tag: ${VERSION}-1
  mainContainer:
    imageConfigs:
      - baseImage: registry.cn-beijing.aliyuncs.com/opshub/foundationdb-foundationdb
        tag: ${VERSION}
EOF
  • 删除备份负载
1
kubectl delete foundationdbbackups.apps.foundationdb.org ${CLUSTER_NAME}

4. 备份 FoundationDB 数据

4.1 进入备份容器

1
kubectl -n ${NAMESPACE} exec -it deployment/${CLUSTER_NAME}-backup-agents -- bash

4.2 备份到 S3 存储桶

1
2
3
4
5
fdbbackup start \
  --destcontainer "${S3_BACKUP_URI}" \
  --cluster-file "$FDB_CLUSTER_FILE" \
  --knob_http_verbose_level=3 \
  --log -t ${NAMESPACE}-${CLUSTER_NAME}-1 -w
1
fdbbackup status --cluster-file "$FDB_CLUSTER_FILE" -t ${NAMESPACE}-${CLUSTER_NAME}-1

4.3 备份到本地磁盘

  • 备份
1
2
3
4
fdbbackup start \
  --destcontainer "file:///data/fdb-backup" \
  --cluster-file "$FDB_CLUSTER_FILE" \
  -t local-test
  • 查看备份状态
1
fdbbackup status --cluster-file "$FDB_CLUSTER_FILE" -t s3-test-3
BackupUID: e698f34883432d9bd4a4c436bc0c21bb
BackupURL: file:///data/fdb-backup/backup-2025-06-09-06-52-04.909367
  • 打包
1
tar -czvf backup-2025-06-09.tar.gz -C /data/fdb-backup

5. 恢复数据

5.1 清空数据

如果是不同实例之间备份恢复,需要先清空一下待恢复的实例数据。

  • 查看数据
1
fdbcli --exec "getrange '' \xFF"
  • 清空数据
1
fdbcli --exec "writemode on; clearrange '' \xFF"

5.2 恢复数据

1
2
3
4
5
fdbrestore start \
  -r "${S3_BACKUP_URI}" \
  --dest-cluster-file "$FDB_CLUSTER_FILE" \
  --knob_http_verbose_level=3 \
  --log -t default-fdb-deploy-test-1 -w

-r 参数指定备份的存储位置,可以是 S3 存储桶或本地磁盘。


微信公众号
作者
微信公众号