Kubernetes에서 백업 및 복원

이 페이지에서는 AlloyDB Omni Kubernetes 연산자를 사용하여 AlloyDB Omni 데이터를 백업하고 복원하는 방법을 설명합니다. 이를 위해서는 매니페스트 파일과 kubectl 명령줄 도구를 사용하여 Kubernetes 클러스터를 업데이트하는 방법에 관한 기본적인 지식이 필요합니다. Kubernetes 클러스터에 AlloyDB Omni를 설치하고 실행하는 방법에 관한 자세한 내용은 Kubernetes에 AlloyDB 설치를 참고하세요.

AlloyDB Omni 지속적 백업 및 복구를 사용 설정하려면 각 데이터베이스 클러스터에 대한 백업 계획을 만들어야 합니다. 백업은 backupPlan 리소스에 정의된 백업 일정에 따라 수행됩니다. 백업 계획에 백업 일정이 정의되지 않은 경우 기본적으로 매일 연속 백업이 실행됩니다. 복구 기간의 모든 타임스탬프에서 초 단위로 백업을 복원하거나 클론할 수 있습니다.

Kubernetes가 아닌 배포에서 AlloyDB Omni 데이터를 백업하고 복원하는 방법에 관한 자세한 내용은 Barman 설치 및 구성을 참고하세요.

백업 사용 설정 및 예약

지속적인 백업은 데이터베이스 클러스터의 백업 계획 리소스를 만들 때 사용 설정됩니다. 각 데이터베이스 클러스터에 backupPlan 리소스를 만들어야 해당 클러스터의 연속 백업을 사용 설정할 수 있습니다. 이 백업 계획 리소스는 다음 매개변수를 정의합니다.

  • AlloyDB Omni 운영자가 백업을 저장하는 위치입니다. Kubernetes 클러스터 또는 Cloud Storage 버킷에 로컬로 저장할 수 있습니다.

  • full, incremental, differential 백업을 자동으로 만드는 여러 백업 일정을 설정하는 옵션입니다. 백업 계획을 처음 정의할 때를 포함하여 언제든지 이 일정을 일시중지할 수 있습니다. 백업 계획이 일시중지되면 예약된 백업이 생성되지 않지만 수동으로 백업을 만들 수는 있습니다.

    백업 일정을 지정하지 않으면 기본값은 '0 0 * * *'으로, 매일 자정(현지 시간)에 전체 백업을 한 번 실행합니다.

  • 저장된 백업의 보관 기간 이 기간은 최소 1일에서 최대 90일까지 설정할 수 있습니다. 기본값은 14입니다.

데이터베이스 클러스터에는 각각 고유한 이름과 구성이 있는 여러 백업 계획이 있을 수 있습니다. 데이터베이스 클러스터에 백업 일정이 다른 backupPlan 리소스를 여러 개 만드는 경우 각 백업 리소스에 고유한 백업 위치를 정의해야 합니다.

로컬에 백업을 저장할 계획 만들기

로컬에 저장되는 백업을 사용 설정하려면 다음 매니페스트를 적용하세요.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: BackupPlan
    metadata:
      name: BACKUP_PLAN_NAME
      namespace: NAMESPACE
    spec:
      dbclusterRef: DB_CLUSTER_NAME
      backupSchedules:
        full: "FULL_CRON_SCHEDULE"
        differential: "DIFF_CRON_SCHEDULE"
        incremental: "INCR_CRON_SCHEDULE"
      backupRetainDays: RETENTION_DAYS
      paused: PAUSED_BOOLEAN

다음을 바꿉니다.

  • BACKUP_PLAN_NAME: 이 백업 계획 리소스의 이름입니다(예: backup-plan-1).

  • NAMESPACE: 이 백업 계획의 Kubernetes 네임스페이스입니다. 데이터베이스 클러스터의 네임스페이스와 일치해야 합니다.

  • DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.

  • FULL_CRON_SCHEDULE: 모든 데이터가 포함된 전체 백업을 만드는 백업 일정으로, cron 형식으로 표현됩니다. 예를 들어 '0 0 * * 0'으로 설정하면 매주 일요일 00:00에 전체 백업이 실행됩니다.

  • DIFF_CRON_SCHEDULE: 처음에는 전체 백업인 백업을 생성하는 백업 일정입니다. 후속 백업은 데이터의 중간 변경사항을 기반으로 하며 cron 형식으로 표현됩니다. 예를 들어 '0 22 * * 3'으로 설정하면 매주 수요일 22:00에 차등 백업이 실행됩니다.

  • INCR_CRON_SCHEDULE: 마지막 전체, 차등 또는 증분 백업에서 변경된 데이터가 포함된 백업을 만드는 백업 일정입니다. cron 형식으로 표현됩니다. 예를 들어 '0 21 * * *'로 설정하면 매일 21:00에 증분 백업이 실행됩니다.

  • RETENTION_DAYS: AlloyDB Omni 운영자가 이 백업을 보관하는 일 수입니다. 1~90 사이의 정수여야 합니다. 기본값은 14입니다.

  • PAUSED_BOOLEAN: 백업 계획이 일시중지되어 있는지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.

    • true: 백업이 일시중지되고 예약된 백업이 생성되지 않습니다.

    • false: AlloyDB Omni Operator가 cronSchedule에 지정된 일정에 따라 백업을 만듭니다. 명시적으로 true로 설정하지 않은 경우 기본값입니다.

    기본값은 false입니다.

Cloud Storage에 백업을 저장하는 계획 만들기

Cloud Storage에 저장되는 백업을 사용 설정하려면 다음 단계를 따르세요.

  1. Cloud Storage 버킷을 만듭니다. 이 버킷에 할당한 이름을 기록해 둡니다. 나중에 필요합니다.

  2. 버킷에 백업을 추가하기 위한 서비스 계정을 만듭니다.

  3. 서비스 계정에 storage.objectAdmin Identity and Access Management 역할을 부여합니다.

  4. 서비스 계정의 키를 만듭니다. 이렇게 하면 비공개 키가 로컬 환경에 다운로드됩니다.

  5. 다운로드한 키 파일 이름을 key.json로 바꿉니다.

  6. 비공개 키가 포함된 Kubernetes 보안 비밀을 만듭니다.

    kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE

    다음을 바꿉니다.

    • SECRET_NAME: 만들려는 Kubernetes 보안 비밀의 이름입니다(예: gcs-key).

    • KEY_PATH: 이전 단계에서 다운로드한 key.json 파일의 로컬 파일 시스템 경로입니다.

    • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

  7. 다음 매니페스트를 적용합니다.

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: BackupPlan
      metadata:
        name: BACKUP_PLAN_NAME
        namespace: NAMESPACE
      spec:
        dbclusterRef: DB_CLUSTER_NAME
        backupSchedules:
          full: "FULL_CRON_SCHEDULE"
          differential: "DIFF_CRON_SCHEDULE"
          incremental: "INCR_CRON_SCHEDULE"
        backupRetainDays: RETENTION_DAYS
        paused: PAUSED_BOOLEAN
        backupLocation:
          type: GCS
          gcsOptions:
            bucket: BUCKET_URL
            key: BACKUP_PATH
            secretRef:
              name: SECRET_NAME
              namespace: NAMESPACE
    

    다음을 바꿉니다.

    • BACKUP_PLAN_NAME: 이 백업 계획 리소스의 이름입니다(예: backup-plan-1).

    • NAMESPACE: 이 백업 계획의 Kubernetes 네임스페이스입니다. 데이터베이스 클러스터의 네임스페이스와 일치해야 합니다.

    • DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.

    • FULL_CRON_SCHEDULE: 모든 데이터가 포함된 전체 백업을 만드는 백업 일정으로, cron 형식으로 표현됩니다. 예를 들어 '0 0 * * 0'으로 설정하면 매주 일요일 00:00에 전체 백업이 실행됩니다.

    • DIFF_CRON_SCHEDULE: 처음에는 전체 백업인 백업을 생성하는 백업 일정입니다. 후속 백업은 데이터의 중간 변경사항을 기반으로 하며 cron 형식으로 표현됩니다. 예를 들어 '0 22 * * 3'으로 설정하면 매주 수요일 22:00에 차등 백업이 실행됩니다.

    • INCR_CRON_SCHEDULE: 마지막 전체, 차등 또는 증분 백업에서 변경된 데이터가 포함된 백업을 만드는 백업 일정입니다. cron 형식으로 표현됩니다. 예를 들어 '0 21 * * *'로 설정하면 매일 21:00에 증분 백업이 실행됩니다.

    • RETENTION_DAYS: AlloyDB Omni 운영자가 이 백업을 보관하는 일 수입니다. 1~90 사이의 정수여야 합니다. 기본값은 14입니다.

    • PAUSED_BOOLEAN: 백업 계획이 일시중지되어 있는지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.

      • true: 백업이 일시중지되고 예약된 백업이 생성되지 않습니다.

      • false: AlloyDB Omni Operator가 cronSchedule에 지정된 일정에 따라 백업을 만듭니다. 명시적으로 true로 설정하지 않은 경우 기본값입니다.

      기본값은 false입니다.

    • BUCKET_URL: 이전 단계에서 만든 Cloud Storage 버킷의 이름입니다. 이는 버킷의 전체 URL이 아닙니다. 버킷 이름 앞에 gs://를 붙이지 마세요.

    • BACKUP_PATH: AlloyDB Omni Operator가 Cloud Storage 버킷 내에서 백업을 쓰는 디렉터리의 경로입니다. 경로는 /로 시작하는 절대 경로여야 합니다.

    • SECRET_NAME: 이전 단계에서 만든 Kubernetes 보안 비밀에 선택한 이름입니다.

수동으로 백업 만들기

언제든지 데이터베이스 클러스터에 이미 적용한 백업 계획을 사용하여 백업 리소스를 수동으로 만들 수 있습니다. AlloyDB Omni Operator는 선택한 백업 계획의 저장소 위치 및 보관 기간을 새 수동 백업에 적용합니다.

백업을 수동으로 만들려면 다음 매니페스트를 적용합니다.

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
  name: BACKUP_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME
  backupPlanRef: BACKUP_PLAN_NAME
  manual: true
  physicalBackupSpec:
    backupType: BACKUP_TYPE

다음을 바꿉니다.

  • BACKUP_NAME: 이 백업의 이름입니다(예: backup-1).

  • NAMESPACE: 이 복원의 Kubernetes 네임스페이스입니다. 데이터베이스 클러스터의 네임스페이스와 일치해야 합니다.

  • BACKUP_PLAN_NAME: 이 백업이 속한 백업 계획 리소스의 이름입니다. 백업 계획을 만들 때 선택한 이름과 일치해야 합니다.

  • DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.

  • BACKUP_TYPE: 만들려는 수동 백업의 유형을 지정합니다. 다음 값 중 하나를 선택합니다.

    • full: 모든 데이터가 포함된 전체 백업을 만듭니다.

    • diff: 마지막 전체 백업에 종속되는 차등 백업을 만듭니다. 후속 백업은 데이터의 중간 변경사항을 기반으로 차등 백업됩니다.

    • incr: 이전 전체 백업 또는 차등 백업에 종속되어 마지막 전체 백업 또는 차등 백업에서 변경된 데이터를 포함하는 증분 백업을 만듭니다.

백업 모니터링 및 나열

백업 계획과 백업은 모두 Kubernetes 클러스터의 리소스입니다. 이에 대한 정보를 보려면 kubectl get 명령어를 사용합니다.

백업 계획 요약 보기

데이터베이스 클러스터의 백업 계획에 관한 정보를 보려면 다음 명령어를 실행합니다.

kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE

NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

다음과 유사한 결과가 출력됩니다.

NAME               PHASE   LASTBACKUPTIME         NEXTBACKUPTIME
backup-plan-prod   Ready   2023-10-26T17:26:43Z   2023-10-27T00:00:00Z

백업 목록 보기

데이터베이스 클러스터에서 사용할 수 있는 백업 목록을 보려면 다음 명령어를 실행합니다.

kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE

NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

다음과 유사한 결과가 출력됩니다.

NAME                              PHASE       COMPLETETIME
backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
manual-backup-2                   InProgress

출력 표의 각 행은 다음 속성을 사용하여 백업 리소스를 나타냅니다.

  • 백업 이름입니다.
  • 백업 상태입니다. Succeeded는 복원할 준비가 된 백업을 표시합니다.
  • 백업이 생성된 타임스탬프입니다.

백업에서 복원

AlloyDB를 사용하면 개별 백업에서 복원하거나 특정 시점의 백업을 사용하여 클러스터를 클론할 수 있습니다.

이름이 지정된 백업에서 복원

백업에서 복원하여 데이터베이스 클러스터의 데이터를 백업의 데이터로 교체하려면 다음 단계를 따르세요.

  1. 단계가 Succeeded인 모든 백업을 나열합니다.

    kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded

    NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

    적절한 백업 후보가 하나 이상 있는 경우 출력은 다음과 유사합니다.

    backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
    manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
    
  2. 이전 단계에 나열된 백업 중 하나를 복원할 백업으로 선택합니다. 다음 단계에서 사용할 이름을 기록해 둡니다.

  3. 다음 매니페스트를 적용합니다.

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Restore
      metadata:
        name: RESTORE_NAME
        namespace: NAMESPACE
      spec:
        sourceDBCluster: DB_CLUSTER_NAME
        backup: BACKUP_NAME
    

    다음을 바꿉니다.

    • RESTORE_NAME: 이 매니페스트에서 만드는 data-restore 리소스에 사용할 이름입니다(예: restore-1).

    • DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.

    • BACKUP_NAME: 이전 단계에서 선택한 백업의 이름입니다.

특정 시점에서 클러스터 클론

AlloyDB Omni Operator를 사용하면 복구 기간 내의 특정 시점부터 클러스터의 데이터를 클론할 수 있습니다. 복구 기간의 길이는 보관 기간에 따라 직접 결정됩니다.

예를 들어 보관 기간이 14일로 설정된 경우 14일 이상 된 데이터는 복구할 수 없습니다. 복구 기간 내의 어느 시점으로든 복원할 수 있습니다. AlloyDB Omni Operator는 지정된 값보다 하루 더 오래 백업과 로그를 보관합니다.

  1. 복구 기간을 모니터링하여 복원 지점을 확인합니다.

    kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
    

    다음은 응답 예시입니다.

    recoveryWindow:
    begin: "2024-01-31T02:54:35Z"
    

    RFC 3339 타임스탬프 형식의 타임스탬프 값은 복원 리소스에 사용됩니다.

  2. 다음과 같은 복원 리소스 매니페스트를 만들고 적용합니다.

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Restore
    metadata:
      name: RESTORE_NAME
      namespace: NAMESPACE
    spec:
      sourceDBCluster: DB_CLUSTER_NAME
      pointInTime: "DATE_AND_TIME_STAMP"
      clonedDBClusterConfig:
        dbclusterName: NEW_DB_CLUSTER_NAME
    

    다음을 바꿉니다.

    • RESTORE_NAME: 이 매니페스트에서 만드는 data-restore 리소스에 사용할 이름입니다(예: restore-1).

    • DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.

    • DATE_AND_TIME_STAMP: 복원하려는 연속 백업의 분 단위 RFC 3339 타임스탬프입니다(예: 2024-03-05T15:32:10Z).

    • NEW_DB_CLUSTER_NAME: 새 데이터베이스 클러스터의 이름입니다.

복원 상태 보기

  1. 복원 작업 진행 상황 보기

    kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE

    NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

    명령어를 연속으로 실행하려면 -Aw 플래그를 추가합니다.

    다음과 유사한 결과가 출력됩니다.

    NAME        PHASE               COMPLETETIME   RESTOREDPOINTINTIME
    restore-1   RestoreInProgress
    

    출력 테이블의 PHASE 열 값이 ProvisionSucceeded이면 복원이 완료된 것입니다.

  2. 복원되거나 클론된 데이터베이스 클러스터가 온라인 상태가 되는 진행 상황을 확인합니다.

    kubectl get dbclusters -A -n NAMESPACE

    NAMESPACE를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.

    명령어를 연속으로 실행하려면 -Aw 플래그를 추가합니다.

    다음과 유사한 결과가 출력됩니다.

    NAMESPACE   NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    default     db-cluster-1       10.128.0.55       Ready          DBClusterReady
    

    출력 테이블의 DBCLUSTERPHASE 열 값이 DBClusterReady이면 복원되거나 클론된 데이터베이스 클러스터를 사용할 수 있습니다.

백업 삭제

일반적으로 백업을 수동으로 삭제할 필요는 없습니다. AlloyDB Omni Operator는 백업 계획을 만들 때 지정한 보관 기간보다 오래된 백업을 자동으로 삭제합니다.

백업을 수동으로 삭제하려면 백업이 다음 요구사항을 충족해야 합니다.

  • 이 백업은 백업 계획에 저장된 유일한 백업이 아닙니다. AlloyDB Omni Operator를 사용하려면 백업 계획당 백업이 하나 이상 있어야 합니다.

  • 이 백업에는 이 백업을 사용하는 다른 백업이 없습니다. 예를 들어 전체 백업과 이에 종속된 차등 백업 또는 증분 백업과 이에 종속된 차등 백업이 있습니다.

백업을 삭제하려면 다음 명령어를 실행합니다.

kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE

다음을 바꿉니다.

  • BACKUP_NAME: 삭제할 백업의 이름입니다.

  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

백업 디스크 크기 조절

Kubernetes 클러스터에 백업을 저장하는 로컬 디스크의 크기를 조절하려면 다음 단계를 완료하세요.

  1. 다음과 같이 DBCluster 매니페스트의 resources.disks 필드를 업데이트합니다.

    spec:
      primarySpec:
        resources:
          disks:
            - name: BACKUP_DISK
              size: 10Gi
    

    BACKUP_DISK을 백업을 저장하는 디스크의 이름으로 바꿉니다.

  2. 매니페스트를 적용하여 업데이트를 적용합니다.

    AlloyDB Omni Operator는 업데이트된 사양을 DBCluster에 즉시 적용합니다.

실행 중인 데이터베이스 클러스터의 백업 디스크를 수정하는 경우 다음과 같은 제한사항이 적용됩니다.

  • 지정된 storageClass가 볼륨 확장을 지원하는 경우에만 디스크 크기를 늘릴 수 있습니다.
  • 디스크 크기를 줄일 수는 없습니다.

백업 계획 업데이트

모든 백업 계획은 Kubernetes 리소스입니다. 구성을 업데이트하려면 다음 중 하나를 수행합니다.

  • 백업 계획의 매니페스트 파일을 수정하고 다시 적용합니다.

  • kubectl patch 명령어를 사용합니다.

예를 들어 실행 중인 백업 계획을 일시중지하려면 매니페스트의 paused 속성을 true로 변경한 다음 매니페스트를 다시 적용합니다.

백업 계획 삭제

백업 계획을 삭제하고 모든 백업 리소스를 삭제하려면 다음 명령어를 실행합니다.

kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE

다음을 바꿉니다.

  • BACKUP_PLAN_NAME: 삭제할 백업 계획의 이름입니다.

  • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.

백업 계획을 삭제하지 않고 일시중지하려면 백업 계획 리소스의 paused 속성을 true로 설정합니다. 일시중지된 백업 계획은 백업을 계속 저장하고 수동 백업 생성을 허용합니다.