백업 스케줄링

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: |
    # Backup schedule in cron format (UTC timezone)
    schedule: "0 2 * * *"  # Daily at 2:00 AM UTC

    # ... other configuration ...

Cron 구문 이해

Cron 스케줄은 실행 빈도를 정의하는 5개의 필드로 구성됩니다.

필드값특수 문자
분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 at 2 AM
---
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 at 3 AM
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: |
    # Number of backups to retain per cluster
    retention: 7  # Keep last 7 backups

보존 값이 높을수록 복구 유연성이 향상되지만 추가 스토리지가 필요합니다.

보존 동작:

  • 각 백업이 성공적으로 완료된 후 가장 오래된 백업이 자동으로 삭제됩니다.
  • 보존은 클러스터별로 적용됩니다 — 각 클러스터는 자체 카운트를 유지합니다.
  • 정리는 백업 생성 직후에 발생합니다.

예를 들어 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 시간대를 기억합니다.
  • 리소스가 제한된 경우 백업을 분산합니다.
  • 백업 성공 여부를 정기적으로 모니터링합니다.
  • 매월 복원 절차를 테스트합니다.
  • 스케줄과 그 이유를 문서화합니다.
  • 백업 실패에 대한 알림을 설정합니다.
이 주제는 어떤가요?