排程備份
為 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 時區。
- 如果資源受限,請錯開備份時間。
- 定期監視備份成功情況。
- 每月測試還原程序。
- 記錄排程及其依據。
- 為備份失敗設定警示。