バックアップのスケジューリング

cron 式、保持ポリシー、一時停止と再開、監視を含む、IBM Bob の PostgreSQL バックアップスケジュールの設定と管理。

スケジュールされたバックアップはデータベース保護を自動化し、データ損失のリスクを軽減します。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 時

    # ... その他の設定 ...

cron 構文の理解

cron スケジュールは実行頻度を定義する 5 つのフィールドで構成されます。

フィールド値特殊文字
分0〜59*, ,, -, /
時0〜23*, ,, -, /
日1〜31*, ,, -, /
月1〜12*, ,, -, /
曜日0〜7 (0 と 7 は日曜日を表す)*, ,, -, /

目標復旧時点 (RPO) とビジネス要件に合ったスケジュールを選択してください。

スケジューリングの考慮事項

タイムゾーン (UTC)

すべてのスケジュールは UTC タイムゾーンで実行されます。現地時間ではなく UTC 時間に従ってスケジュールを計画してください。例:

  • 0 2 * * * = UTC 午前 2 時 = CEST (夏時間) 午前 4 時または CET (冬時間) 午前 3 時

同時バックアップ

設定されたすべてのクラスターが同じスケジュールで同時にバックアップされます。これによりストレージ 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 GB5〜15 分
5〜20 GB15〜45 分
20〜50 GB45〜120 分
50 GB 超2 時間以上

オフピーク時間帯

使用量が少ない時間帯にバックアップをスケジュールしてください。ピーク業務時間を避け、バックアップ中のデータベースパフォーマンスを監視してください。

スケジュールの変更

バックアップスケジュールを更新するには、バックアップ ConfigMap を編集します。

oc edit configmap bob-postgres-backup-config -n <bob-instance-namespace>

schedule フィールドを更新して保存してください。コントローラーは変更を自動的に検出して 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 タイムゾーンを忘れずに確認してください。
  • リソースが制限されている場合はバックアップをずらしてください。
  • バックアップの成功を定期的に監視してください。
  • 毎月リストア手順をテストしてください。
  • スケジュールとその理由を文書化してください。
  • バックアップ失敗のアラートを設定してください。
このトピックはいかがですか?