본문으로 건너뛰기

MinIO R2 백업 DR

조사된 증거에는 단일 중단 기록이 아닌 2026년 4월 15일의 설계 수정 순서가 나와 있습니다. 최종 상태는 MinIO 버킷에 대한 변경이 불가능하고 타임스탬프가 지정된 R2 스냅샷 흐름과 별도로 예약된 infra-db에 대한 CNPG 기본 백업입니다.

소스 경로

  • lumie-infra/bootstrap/minio/manifests/r2-snapshot-cronjob.yaml
  • lumie-infra/bootstrap/minio/manifests/r2-barman-vss.yaml
  • lumie-infra/storage/infra-db/manifests/scheduled-backup.yaml
  • lumie-infra/storage/infra-db/manifests/r2-barman-vss.yaml
  • lumie-infra/observability/prometheus/helm-values.yaml

달라진 점

커밋변경최종 디자인으로 남지 않은 이유
a920ac08R2에 대한 MinIO 서버 측 복제R2는 MinIO가 기대하는 전체 S3 복제 계약을 충족하지 못했습니다.
112bf594복제를 위한 버킷별 R2 대상접두사 대상이 지원되지 않았으며 복제 경로가 여전히 R2 의미 체계에 의해 차단되었습니다
e2e842eamc mirror 15분마다 CronJob복제보다 낫지만 여전히 변경 가능한 경로에 다시 기록됨
3385be4evault 제거, zot 유지, 메모리 증가zot 목록은 비용이 많이 들었고 vault에는 다른 내구성 의미가 필요했습니다.
851e2e6fzot 제거, vault 유지, 메모리 감소비용과 복원 가치의 균형이 다시 변경되었습니다
06253107미러 범위에서 vault를 제거했습니다.Vault는 정상 작동 중에 규정 준수 잠금
945cd24a타임스탬프가 있는 스냅샷으로 전환 및 04:00 KST 백업 의도 정렬현재 저장소와 일치하는 모양입니다
34d35077CNPG CRON_TZ를 일반 UTC로 변환CNPG 입학은 시간대가 앞에 붙은 일정을 거부

최종 repo 관리 계약

현재 MinIO DR 경로는 minio-r2-snapshot라는 CronJob입니다.

spec:
timeZone: "Asia/Seoul"
schedule: "0 4,16 * * *"
...
BUCKETS="lumie lumie-dev vault"
...
TARGET="r2/lumie-dr/snapshots/$b/$TS/"
mc mirror --quiet "local/$b" "$TARGET"

출처: lumie-infra/bootstrap/minio/manifests/r2-snapshot-cronjob.yaml

이 디자인은 기존 R2 객체를 덮어쓰는 것을 방지합니다. 모든 실행은 Vault와 같은 변경 가능한 저장소에서도 규정 준수 잠금과 호환되는 새로운 타임스탬프 접두사를 작성합니다.

infra-db 측은 별도이며 의도적으로 CNPG ScheduledBackup를 사용합니다.

spec:
# 04:00 KST = 19:00 UTC (CNPG ScheduledBackup does not accept CRON_TZ prefix)
schedule: "0 0 19 * * *"

출처: lumie-infra/storage/infra-db/manifests/scheduled-backup.yaml

두 경로 모두 동일한 Vault 경로에 의존하며 네임스페이스 로컬 r2-barman-creds 비밀로 렌더링됩니다.

destination:
create: true
name: r2-barman-creds

출처: lumie-infra/storage/infra-db/manifests/r2-barman-vss.yaml

현재 저장소에 남아 있는 교훈

  • 여기에서는 Cloudflare R2를 드롭인 MinIO 복제 피어가 아닌 변경 불가능한 스냅샷 대상으로 취급합니다.
  • 덮어쓰기 기반 미러 설계에서 Vault 객체 스토리지를 유지합니다. 타임스탬프가 있는 스냅샷은 체크인된 매니페스트에서 호환되는 패턴입니다.
  • CNPG ScheduledBackup에는 일반 UTC cron 표현식이 필요합니다. 체크인된 KST 의도는 댓글에만 존재합니다.
  • MinIO 버킷 및 PostgreSQL에 대한 백업은 하나의 공유 컨트롤러가 아닌 병렬 DR 표면입니다.

염두에 두어야 할 관측 가능성 드리프트

현재 Prometheus 규칙은 여전히 이전 디자인을 설명합니다.

- name: minio-replication.rules
...
- alert: MinIOReplicationLag
...
- alert: MinIOReplicationFailed

출처: lumie-infra/observability/prometheus/helm-values.yaml

이는 더 이상 활성 minio-r2-snapshot CronJob과 일치하지 않습니다. 백업 메커니즘이 이제 r2-barman-creds를 사용하여 타임스탬프가 지정된 스냅샷이더라도 검사된 저장소는 여전히 복제 지향 규칙 이름과 설명을 전달합니다.

확인

kubectl get cronjob -n minio minio-r2-snapshot
kubectl get jobs -n minio | rg minio-r2-snapshot
kubectl get scheduledbackup.postgresql.cnpg.io -n infra-db infra-db-daily -o yaml
kubectl get secret -n minio r2-barman-creds
kubectl get secret -n infra-db r2-barman-creds

성공은 스냅샷 CronJob이 존재하고, 최근 작업이 존재하며, infra-db-daily가 UTC 19:00 일정을 렌더링하고, 이를 사용하는 네임스페이스에 공유 R2 자격 증명 비밀이 존재함을 의미합니다.

관련 페이지

  • MinIO 작업 참조
  • 인프라 DB 운영 참고서
  • 프로메테우스 작전 참조