1. 设置环境变量
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
|
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 存储桶或本地磁盘。