Cloud Storage 백업을 사용하여 Kubernetes에서 데이터베이스 클러스터 클론

이 페이지에서는 AlloyDB Omni 데이터베이스 클러스터의 Cloud Storage 백업을 사용하여 Kubernetes에서 데이터베이스 클러스터를 클론하는 방법을 보여줍니다.

다음 워크플로는 클론하는 데 사용되는 단계를 설명합니다.

  1. livenessProbe 매개변수를 사용 중지한 상태에서 대상 데이터베이스 클러스터에 DBCluster 매니페스트 파일을 만들고 적용합니다.
  2. Cloud Storage 백업에 액세스할 pgbackrest.conf 파일을 만들고 구성합니다.
  3. pgBackRest 명령어를 사용하여 소스 백업에 액세스할 수 있는지 확인합니다.
  4. pgBackRest 명령어를 사용하여 백업을 대상 데이터베이스 클러스터에 복원합니다.

시작하기 전에

  • 소스 데이터베이스 클러스터 백업이 저장된 Cloud Storage 버킷의 전체 경로에 액세스할 수 있는지 확인합니다. 이 경로는 소스 데이터베이스 클러스터의 BackupPlan 리소스를 만들 때 사용한 경로와 동일합니다.
  • 대상 AlloyDB Omni 데이터베이스 클러스터를 만듭니다. Kubernetes에 AlloyDB Omni를 설치하는 방법에 관한 자세한 내용은 데이터베이스 클러스터 만들기를 참고하세요.
  • postgres 사용자로 데이터베이스에 로그인했는지 확인합니다.

대상 데이터베이스 클러스터에 데이터베이스 클러스터 만들기

livenessProbe 매개변수를 일시적으로 사용 중지하여 데이터베이스 클러스터를 만듭니다. 복원이 완료되면 livenessProbe 매개변수를 다시 구성합니다.

  1. DBCluster 리소스 매니페스트 파일을 만듭니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: db-pw-DB_CLUSTER_NAME
      type: Opaque
      data:
        DB_CLUSTER_NAME: "ENCODED_PASSWORD"
      ---
      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: DBCluster
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        primarySpec:
          availabilityOptions:
            livenessProbe: "Disabled"
          adminUser:
            passwordRef:
              name: db-pw-DB_CLUSTER_NAME
          resources:
            cpu: CPU_COUNT
            memory: MEMORY_SIZE
            disks:
            - name: DataDisk
              size: DISK_SIZE
              storageClass: standard
    

    다음을 바꿉니다.

    • DB_CLUSTER_NAME: 이 데이터베이스 클러스터의 이름입니다(예: my-db-cluster).

    • ENCODED_PASSWORD: 기본 postgres 사용자 역할의 데이터베이스 로그인 비밀번호로, base64 문자열로 인코딩됩니다(예: ChangeMe123의 경우 Q2hhbmdlTWUxMjM=).

    • CPU_COUNT: 이 데이터베이스 클러스터의 각 데이터베이스 인스턴스에서 사용할 수 있는 CPU 수입니다.

    • MEMORY_SIZE: 이 데이터베이스 클러스터의 데이터베이스 인스턴스당 메모리 양입니다. CPU당 8GB로 설정하는 것이 좋습니다. 예를 들어 이 매니페스트에서 이전에 cpu2로 설정한 경우 memory16Gi로 설정하는 것이 좋습니다.

    • DISK_SIZE: 데이터베이스 인스턴스당 디스크 크기입니다(예: 10Gi).

  2. 매니페스트 파일을 적용합니다.

      kubectl apply -f DBCLUSTER_FILENAME

    다음을 바꿉니다.

    • DBCLUSTER_FILENAME: 이전 단계에서 만든 DBCluster 매니페스트 파일의 이름입니다.

kubectl describe 명령어를 사용하여 데이터베이스 클러스터 리소스가 READY 상태인지 확인합니다.

pgBackRest 파일 구성

대상 데이터베이스 클러스터가 소스 백업이 있는 Cloud Storage 버킷에 액세스할 수 있도록 pgBackRest 파일을 구성합니다.

  1. 대상 데이터베이스 클러스터에서 데이터베이스 클러스터 포드 세부정보를 찾습니다.

      kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=<var>DB_CLUSTER_NAME</var>, alloydbomni.internal.dbadmin.goog/task-type=database"

    응답에는 클러스터 데이터베이스 포드의 이름이 포함됩니다.

  2. 포드에 로그인합니다.

      kubectl exec -ti DATABASE_POD_NAME  -- /bin/bash

    다음을 바꿉니다.

    • DATABASE_POD_NAME: 이전 단계의 데이터베이스 클러스터 포드의 이름입니다.
  3. pgBackRest 구성 파일을 업데이트하기 전에 pod를 중지합니다.

      supervisorctl.par stop postgres
  4. Cloud Storage에 저장된 백업에 액세스할 pgBackRest 구성 파일을 만듭니다.

      cat << EOF > /backup/pgbackrest.conf
      [db]
      pg1-path=/mnt/disks/pgsql/data
      pg1-socket-path=/tmp
      pg1-user=pgbackrest
      [global]
      log-path=/obs/pgbackrest
      log-level-file=info
      repo1-type=gcs
      repo1-gcs-bucket=GCS_SOURCE_BACKUP_BUCKET_NAME
      repo1-path=GCS_SOURCE_BACKUP_BUCKET_PATH
      repo1-storage-ca-file=/etc/ssl/certs/ca-certificates.crt
      repo1-retention-full=9999999
      repo1-gcs-key-type=auto

    다음을 바꿉니다.

    • GCS_SOURCE_BACKUP_BUCKET_NAME: 소스 데이터베이스 클러스터의 BackupPlan 리소스 매니페스트 파일을 만들 때 만든 Cloud Storage 버킷의 이름입니다. 이는 버킷의 전체 URL이 아닙니다. 버킷 이름 앞에 gs://를 붙이지 마세요.
    • GCS_SOURCE_BACKUP_BUCKET_PATH: AlloyDB Omni 운영자가 소스 데이터베이스 클러스터의 Cloud Storage 버킷 내에 백업을 작성하는 디렉터리의 경로입니다. 경로는 /로 시작하는 절대 경로여야 합니다.

    repo1-gcs-key-type는 인스턴스의 서비스 계정을 사용하도록 auto로 설정됩니다. 다른 옵션에 관한 자세한 내용은 GCS 저장소 키 유형 옵션을 참고하세요.

대상 데이터베이스 클러스터에서 소스 백업 확인

pgBackRest 명령어를 실행하여 대상 데이터베이스 클러스터에서 소스 데이터베이스 클러스터 백업에 액세스할 수 있는지 확인합니다.

pgbackrest --config-path=/backup --stanza=db --repo=1 info

다음은 샘플 응답입니다.

  stanza: db
      status: ok
      cipher: none
      db (current)
          wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
          full backup: 20240213-231400F
              timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
              wal start/stop: 000000010000000000000003 / 000000010000000000000003
              database size: 38.7MB, database backup size: 38.7MB
              repo1: backup set size: 4.6MB, backup size: 4.6MB
          incr backup: 20240213-231400F_20240214-000001I
              timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
              wal start/stop: 00000001000000000000000D / 00000001000000000000000D
              database size: 38.7MB, database backup size: 488.3KB
              repo1: backup set size: 4.6MB, backup size: 84.2KB
              backup reference list: 20240213-231400F

응답의 타임스탬프는 전체 백업을 복원하거나 복구 기간의 특정 시점부터 복원하는 데 사용됩니다.

대상 데이터베이스 클러스터에서 백업 복원

백업 또는 복원할 시점을 확인한 후 대상 데이터베이스 클러스터에서 pgBackRest 명령어를 실행합니다. 이러한 명령어에 대한 자세한 내용은 복원 명령어를 참고하세요.

다음은 샘플 pgBackRest 복원 명령어입니다.

  • 백업에서 복원

    pgbackrest --config-path=/backup --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • 특정 시점 데이터 복원

    pgbackrest --config-path=/backup --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info

포드 다시 시작

복원 명령어가 완료되면 postgres 프로세스를 시작할 수 있습니다.

supervisorctl.par start postgres

postgres 프로세스가 시작되면 기본 인스턴스에 연결하고 쿼리를 실행하여 백업에서 데이터가 복원되었는지 확인할 수 있습니다. 자세한 내용은 Kubernetes에서 실행되는 AlloyDB Omni에 연결을 참고하세요.

데이터베이스 클러스터 구성

데이터베이스 클러스터를 클론한 후 데이터베이스 클러스터 사양을 구성합니다. 가장 중요한 것은 다음 명령어를 사용하여 livenessProbe 매개변수를 사용 설정하는 것입니다.

    kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'

다음 단계