Kubernetes에서 백업 및 복원

문서 버전을 선택합니다.

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

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

비Kubernetes 배포에서 AlloyDB Omni 데이터를 백업 및 복원하는 방법에 대한 자세한 내용은 AlloyDB Omni용 Barman 설정AlloyDB Omni용 pgBackRest 설정을 참조하세요.

백업 사용 설정 및 예약

데이터베이스 클러스터에 대해 백업 계획 리소스를 만들면 지속적인 백업이 사용 설정됩니다. 각 데이터베이스 클러스터에 대해 지속적인 백업을 사용 설정하려면 반드시 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 형식으로 표시합니다. 예를 들어 매주 일요일 00:00에 전체 백업을 실행하려면 '0 0 * * 0'으로 설정합니다.

  • DIFF_CRON_SCHEDULE: 처음에 전체 백업을 만드는 백업 일정입니다. 이후에는 변경된 데이터만 포함하는 차등 백업을 수행합니다. cron 형식으로 표시합니다. 예를 들어 매주 수요일 22:00에 차등 백업을 수행하려면 '0 22 * * 3'으로 설정합니다.

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

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

  • PAUSED_BOOLEAN: 백업 계획을 일시중지할지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.

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

    • false: AlloyDB Omni 연산자가 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 형식으로 표시합니다. 예를 들어 매주 일요일 00:00에 전체 백업을 실행하려면 '0 0 * * 0'으로 설정합니다.

    • DIFF_CRON_SCHEDULE: 처음에 전체 백업을 만드는 백업 일정입니다. 이후에는 변경된 데이터만 포함하는 차등 백업을 수행합니다. cron 형식으로 표시합니다. 예를 들어 매주 수요일 22:00에 차등 백업을 수행하려면 '0 22 * * 3'으로 설정합니다.

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

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

    • PAUSED_BOOLEAN: 백업 계획을 일시중지할지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.

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

      • false: AlloyDB Omni 연산자가 cronSchedule에 지정된 일정에 따라 백업을 만듭니다. true로 명시적으로 설정하지 않는 한 이 값이 기본값입니다.

      기본값은 false입니다.

    • BUCKET_URL: 이전 단계에서 만든 Cloud Storage 버킷의 이름입니다. 이는 버킷의 전체 URL이 아닙니다. 버킷 이름에 gs:// 프리픽스를 추가하지 마세요.

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

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

수동으로 백업 만들기

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

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

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               TYPE
backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z       full
manual-backup-1                   Succeeded   2023-10-26T18:15:27Z       full
manual-backup-2                   InProgress                             full

출력 테이블의 각 행은 백업 리소스를 나타내며, 다음 속성을 포함합니다.

  • 백업 이름
  • 백업 상태. 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: 이 매니페스트로 생성되는 데이터 복원 리소스에 사용할 이름입니다(예: restore-1).

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

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

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

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

예를 들어 보관 기간이 14일로 설정된 경우 14일 이전의 데이터는 복구할 수 없습니다. 복구 기간 내에서는 원하는 시점으로 복원할 수 있습니다. AlloyDB Omni 연산자는 지정된 값보다 하루 더 길게 백업과 로그를 보관합니다.

  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: 이 매니페스트로 생성되는 데이터 복원 리소스에 사용할 이름입니다(예: 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 연산자는 백업 계획을 만들 때 지정한 보관 기간보다 오래된 백업을 자동으로 삭제합니다.

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

  • 해당 백업이 백업 계획에 저장된 유일한 백업이 아니어야 합니다. AlloyDB Omni 연산자에는 백업 계획마다 최소 하나 이상의 백업이 있어야 합니다.

  • 해당 백업에 종속된 다른 백업이 없어야 합니다. 예를 들어 차등 또는 증분 백업에 종속된 전체 백업이거나, 차등 백업에 종속된 증분 백업은 삭제할 수 없습니다.

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

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 연산자는 업데이트된 사양을 DBCluster에 즉시 적용합니다.

실행 중인 데이터베이스 클러스터의 백업 디스크를 수정할 때는 다음 제한사항이 적용됩니다.

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

백업 계획 업데이트

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

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

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

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

백업 계획 삭제

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

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

다음을 바꿉니다.

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

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

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