计划备份
为 IBM Bob 配置和管理自动 PostgreSQL 备份计划,包括 cron 表达式、保留策略、暂停与恢复以及监控。
计划备份可自动保护数据库并降低数据丢失风险。IBM Bob 使用 Kubernetes CronJob 按照备份配置中定义的计划执行备份。
默认情况下,备份使用协调世界时(UTC)运行。
配置备份计划
通过更新备份配置 ConfigMap 中的 schedule 字段来配置备份计划。该值使用标准 cron 语法,决定备份任务的运行频率。
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-postgres-backup-config
namespace: <bob-instance-namespace>
labels:
bob.ibm.com/backup-config: "true"
data:
config.yaml: |
# 备份计划(cron 格式,UTC 时区)
schedule: "0 2 * * *" # 每天 UTC 凌晨 2:00
# ... 其他配置 ...了解 cron 语法
Cron 计划由五个字段组成,定义执行频率。
| 字段 | 取值范围 | 特殊字符 |
|---|---|---|
| 分钟 | 0–59 | *, ,, -, / |
| 小时 | 0–23 | *, ,, -, / |
| 日期 | 1–31 | *, ,, -, / |
| 月份 | 1–12 | *, ,, -, / |
| 星期 | 0–7(0 和 7 均表示星期日) | *, ,, -, / |
请选择与你的恢复点目标(RPO)和业务需求一致的计划。
计划注意事项
时区(UTC)
所有计划均在 UTC 时区运行。请根据 UTC 时间规划计划,而非本地时间。例如:
0 2 * * *= UTC 凌晨 2:00 = CEST(夏季)凌晨 4:00 或 CET(冬季)凌晨 3:00
并发备份
所有已配置的集群按相同计划同时备份。这会成倍增加存储 I/O 负载,并在所有备份之间共享网络带宽。若要在资源受限的环境中错开备份,请使用不同计划创建多个 ConfigMap:
# ConfigMap 1:bob-db 在凌晨 2 点
---
apiVersion: v1
kind: ConfigMap
metadata:
name: bob-db-backup-config
labels:
bob.ibm.com/backup-config: "true"
data:
config.yaml: |
schedule: "0 2 * * *"
clusters:
- name: bob-db
database: bob
secretName: bob-db-app
---
# ConfigMap 2:keycloak-db 在凌晨 3 点
apiVersion: v1
kind: ConfigMap
metadata:
name: keycloak-db-backup-config
labels:
bob.ibm.com/backup-config: "true"
data:
config.yaml: |
schedule: "0 3 * * *"
clusters:
- name: bob-keycloak-db
database: app
secretName: bob-keycloak-db-app备份时长
规划计划时请考虑数据库大小,以避免备份运行之间发生重叠。
| 数据库大小 | 预计时长 |
|---|---|
| 小于 1 GB | 1–5 分钟 |
| 1–5 GB | 5–15 分钟 |
| 5–20 GB | 15–45 分钟 |
| 20–50 GB | 45–120 分钟 |
| 大于 50 GB | 2 小时以上 |
非高峰时段
在使用率低的时段安排备份。避开业务高峰时段,并在备份期间监控数据库性能。
更改计划
要更新备份计划,请编辑备份 ConfigMap:
oc edit configmap bob-postgres-backup-config -n <bob-instance-namespace>更新 schedule 字段并保存。Controller 会自动检测到更改并更新 CronJob。
验证更新后的计划:
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> -o jsonpath='{.spec.schedule}'暂停和恢复备份
如果你需要在维护期间暂停备份但不删除备份配置,请在 Bob 自定义资源中暂停备份:
oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
-p '{"spec":{"postgresBackup":{"suspend":true}}}'暂停备份会保留所有现有备份资源,同时阻止新任务运行。
验证 CronJob 是否已暂停:
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# SUSPEND 列应显示 "True"维护完成后恢复备份:
oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
-p '{"spec":{"postgresBackup":{"suspend":false}}}'监控备份活动
定期监控有助于确保备份任务持续成功运行,并且可以达成恢复目标。
# 列出最近的备份任务
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup \
--sort-by=.metadata.creationTimestamp
# 检查 CronJob 状态
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# 查看上次计划时间
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> \
-o jsonpath='{.status.lastScheduleTime}'
# 查看备份日志
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=100及时调查失败情况,以防止备份覆盖出现缺口。
管理备份保留
保留策略决定在自动删除旧备份之前存储多少个备份副本。
data:
config.yaml: |
# 每个集群保留的备份数量
retention: 7 # 保留最近 7 个备份较高的保留值可提高恢复灵活性,但需要额外的存储空间。
保留行为:
- 每次成功备份后,最旧的备份会自动删除。
- 保留是按集群计算的——每个集群维护自己的计数。
- 清理在备份创建后立即进行。
例如,设置 retention: 7 时:
- 第 1–7 天:累积 7 个备份。
- 第 8 天:创建新备份,删除第 1 天的备份。
- 第 9 天:创建新备份,删除第 2 天的备份。
手动触发备份
要在计划之外手动触发备份:
# 从 CronJob 创建任务
oc create job --from=cronjob/bob-db-backup-cronjob \
manual-backup-$(date +%s) -n <bob-instance-namespace>
# 监控任务
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# 查看任务日志
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>最佳实践
- 在非高峰时段(通常为本地时间凌晨 2–4 点)安排备份。
- 使用一致的计划以保证可预测性。
- 设置计划时记住 UTC 时区。
- 如果资源受限,请错开备份时间。
- 定期监控备份成功情况。
- 每月测试恢复流程。
- 记录计划及其依据。
- 为备份失败设置告警。