로컬 백업을 사용하여 단일 서버에서 데이터베이스 클러스터 클론

이 페이지에서는 로컬 백업을 사용하여 단일 서버에서 데이터베이스 클러스터를 클론하는 방법을 보여줍니다.

이 페이지의 단계에서는 소스 Kubernetes 데이터베이스 클러스터가 Google Kubernetes Engine에서 생성되고 백업 디스크가 Compute Engine 영구 디스크라고 가정합니다. 또한 대상 AlloyDB Omni 단일 서버가 Compute Engine 가상 머신 (VM)에 설치되어 있다고 가정합니다.

다른 환경을 사용하는 경우 각 문서를 참고하여 환경에서 이러한 단계를 복제하세요.

다음 워크플로는 클론 단계를 설명합니다.

  1. 소스 데이터베이스 클러스터 백업 디스크의 영구 볼륨 이름, Compute Engine 영구 디스크 핸들러와 같은 백업 디스크 정보를 식별합니다.
  2. 소스 데이터베이스 클러스터의 백업 디스크를 대상 서버에 마운트합니다.
  3. pgBackRest 명령어를 사용하여 소스 백업에 액세스할 수 있는지 확인합니다.
  4. pgBackRest 명령어를 사용하여 백업을 대상 데이터베이스 클러스터에 복원합니다.

시작하기 전에

  • 소스 데이터베이스 클러스터 백업이 저장된 백업 디스크에 액세스할 수 있는지 확인합니다.
  • 단일 서버 대상 AlloyDB Omni 데이터베이스 클러스터가 생성됩니다. Kubernetes에 AlloyDB Omni를 설치하는 방법에 관한 자세한 내용은 AlloyDB Omni 설치를 참고하세요.
  • postgres 사용자로 데이터베이스에 로그인했는지 확인합니다.

소스 백업 디스크 정보 가져오기

복원 프로세스의 일환으로 소스 데이터베이스 클러스터의 백업 디스크 영구 볼륨 클레임 (PVC) 이름을 확인합니다. PVC는 Kubernetes 내에서 애플리케이션의 영구 스토리지를 관리하는 데 사용됩니다.

다음 샘플 명령어는 백업 디스크 PVC 이름을 사용하여 기본 PV 이름과 Compute Engine 영구 디스크 핸들러를 확인하는 데 도움이 됩니다.

  1. AlloyDB Omni 소스 데이터베이스 클러스터를 만든 GKE 클러스터에 연결합니다.

     kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backupdisk

    다음을 바꿉니다.

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

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

    다음은 샘플 응답입니다.

      backupdisk-al-fe8c-dbcluster-sample-0   Bound
      pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a   10Gi       RWO            standard-rwo   5d21h
      ```
  2. 이전 단계의 백업 디스크 이름(예: backupdisk-al-fe8c-dbcluster-sample-0)을 사용하여 기본 PV 이름을 찾습니다.

      kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}

    다음을 바꿉니다.

    • PVC_NAME: 이전 단계의 응답에서 백업 디스크의 PVC 이름입니다(예: backupdisk-al-fe8c-dbcluster-sample-0).
  3. 기본 Compute Engine 영구 디스크 핸들러를 찾습니다.

      kubectl get pv/$PV_NAME -o json | jq -r .spec.csi.volumeHandle

    다음을 바꿉니다.

    • PV_NAME: 이전 단계의 응답에서 백업 디스크의 PV 이름입니다.

    다음은 샘플 응답입니다.

      projects/my-project/zones/us-central1-a/disks/pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3
  4. 백업 디스크 이름을 다음 섹션에서 사용되는 변수로 내보냅니다.

      export BACKUP_DISK=pvc-89f91fba-6cd2-4bfa-84ed-cb5969b446c3

백업 디스크를 대상 서버에 마운트합니다.

타겟 서버가 Compute Engine 가상 머신에 설치된 AlloyDB Omni 서버라고 가정하고 백업 디스크를 서버에 마운트합니다.

  1. gcloud compute instances attach-disk 명령어를 실행하여 디스크를 마운트합니다.

      gcloud compute instances attach-disk GCE_INSTANCE_NAME \
      --disk ${BACKUP_DISK} \
      --zone=$GCE_ZONE

    다음을 바꿉니다.

    • GCE_INSTANCE_NAME: Compute Engine 가상 머신에 타겟 서버가 설치된 인스턴스의 이름입니다.

    • GCE_ZONE: Compute Engine 가상 머신 인스턴스가 있는 영역입니다.

  2. 백업 디스크를 대상 서버에 마운트합니다.

       lsblk
       mkdir -p /mnt/disks/backupdisk
       mount -o discard,defaults /dev/sdb /mnt/disks/backupdisk
  3. /var/alloydb/config 디렉터리의 AlloyDB Omni dataplane.conf 파일에 맞춤 바인드 마운트를 추가합니다.

      PG_BIND_MOUNTS=/mnt/disks/backupdisk:/mnt/disks/backups:rshared

Docker의 바인드 마운트에 관한 자세한 내용은 바인드 마운트를 참고하세요.

  1. 대상 서버를 다시 시작합니다.

Docker

  docker restart CONTAINER_NAME

CONTAINER_NAME을 새 AlloyDB Omni 컨테이너 이름(예: my-omni-1)으로 바꿉니다.

Podman

  podman restart CONTAINER_NAME

CONTAINER_NAME을 새 AlloyDB Omni 컨테이너 이름(예: my-omni-1)으로 바꿉니다.

pgBackRest 구성 파일 업데이트

백업 디스크 디렉터리의 기존 pgBackRest 파일을 새 저장소 경로로 업데이트합니다.

  1. 대상 서버에서 /mnt/disks/backupdisk 디렉터리로 이동합니다.

      cd /mnt/disks/backupdisk
  2. 기존 데이터를 덮어쓰지 않도록 pgbackrest.conf 파일에서 pg1-path 경로를 임시 디렉터리로 업데이트합니다. data-restored 디렉터리는 복원 프로세스의 일부로 자동으로 생성됩니다.

      sudo sed -i 's|.*pg1-path.*|pg1-path=/mnt/disks/pgsql/data-restored|' pgbackrest.conf
  3. pgbackrest.conf 파일에서 임시 디렉터리로 repo1-path 경로를 업데이트합니다.

      sudo sed -i 's|.*repo1-path.*|repo1-path=/mnt/disks/backups/repo|' conf.d/repo1-local-backupplan.conf

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

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

Docker

  sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --stanza=db --repo=1 info

Podman

  sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/backups --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=/mnt/disks/backups --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • 특정 시점 데이터 복원

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

대상 서버에 데이터 복사

복원 명령어가 완료되면 data-restored 임시 디렉터리에서 현재 AlloyDB 데이터 디렉터리로 데이터를 복사할 수 있습니다.

  1. 대상 서버에서 데이터베이스 서비스를 중지합니다.

    Docker

    docker stop CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
  2. 권장사항으로서 현재 데이터 디렉터리의 이름을 다른 이름으로 바꿉니다.

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  3. data-restored 임시 디렉터리의 이름을 현재 데이터 디렉터리로 바꿉니다.

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  4. 복원된 데이터를 로드하도록 postgresql.auto.conf 파일에서 pg1-path 값을 업데이트합니다.

        vim ~/alloydb-data/data/postgresql.auto.conf
        # Verify postgresql.auto.conf.
        # Do not edit this file manually!
        # It will be overwritten by the ALTER SYSTEM command.
        # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11
        restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"'
        recovery_target = 'immediate'
        recovery_target_action = 'promote'
        recovery_target_timeline = 'current'
  5. 대상 서버에서 데이터베이스 서비스를 시작합니다.

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

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

다음 단계