이 문서에서는 다음을 가정합니다.
- 소스 및 대상 데이터베이스 클러스터가 Google Kubernetes Engine에서 생성되고 백업 디스크는 Compute Engine 영구 디스크입니다.
- 데이터베이스에서 백업 디스크로 사용되는 Compute Engine 영구 디스크는 다른 데이터베이스 클러스터에서 사용되지 않습니다.
데이터베이스 클러스터를 클론할 때는 다음 단계를 따릅니다.
- 소스 데이터베이스 클러스터 백업 디스크의 영구 볼륨 이름 및 Compute Engine 영구 디스크 핸들러와 같은 백업 디스크 정보를 식별합니다. 소스 데이터베이스 클러스터에 백업 기능을 사용 설정했고 성공한 백업이 하나 이상 있는지 확인합니다. 이러한 조건을 충족하지 않으면 백업 사용 설정 및 예약의 안내를 따르세요.
- 대상 데이터베이스 클러스터에서 기존 백업 디스크를 사용하여 소스 데이터베이스 클러스터의 백업 디스크에 액세스할 수 있도록 PersistentVolume리소스를 만듭니다.
- livenessProbe파라미터가 중지되고 백업 디스크 정보가 추가된 상태에서 대상 데이터베이스 클러스터에- DBCluster리소스 매니페스트 파일을 만들고 적용합니다.
- pgBackRest명령어를 사용하여 소스 백업에 액세스할 수 있는지 확인합니다.
- pgBackRest명령어를 사용하여 백업을 대상 데이터베이스 클러스터에 복원합니다.
시작하기 전에
- 소스 데이터베이스 클러스터 백업이 저장된 백업 디스크에 액세스할 수 있는지 확인합니다.
- 소스 데이터베이스 클러스터 백업 디스크를 대상 데이터베이스 클러스터에 마운트할 수 있어야 합니다. 자세한 내용은 영구 볼륨을 참조하세요. 기본 스토리지 백엔드가 ReadOnlyMany(ROX) 액세스를 지원하지 않는 경우, 백업 디스크가 소스 클러스터의 포드에서 사용되지 않도록 확인합니다.
- 소스 백업 디스크가 대상 데이터베이스 클러스터에 마운트되므로 pgBackRest.conf파일이 그대로 재사용됩니다.
- postgres사용자로 데이터베이스에 로그인했는지 확인합니다.
소스 백업 디스크 정보 가져오기
복원 프로세스의 일환으로 소스 데이터베이스 클러스터의 백업 디스크 영구 볼륨 설정(PVC) 이름을 확인합니다. PVC는 Kubernetes 내에서 애플리케이션의 영구 스토리지를 관리하는 데 사용됩니다.
다음 샘플 명령어는 기본 PV 이름과 Compute Engine 영구 디스크 핸들러를 찾는 데 도움이 됩니다. 이 예시에서 모든 백업 디스크는 Compute Engine 영구 디스크이며, 디스크 핸들러 식별자를 사용하여 Compute Engine VM에서 액세스할 수 있습니다.
- 대상 데이터베이스 클러스터에 연결하여 PVC 이름을 찾습니다. - kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backuprepodisk- 다음을 바꿉니다. - DB_CLUSTER_NAMESPACE: 이 백업 계획의 Kubernetes 네임스페이스입니다. 데이터베이스 클러스터의 네임스페이스와 일치해야 합니다.
- DB_CLUSTER_NAME: 이 데이터베이스 클러스터의 이름입니다(예:- my-db-cluster).
 - 다음은 샘플 응답입니다. - backuprepodisk-my-db-cluster-br-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21h
- 이전 단계의 백업 디스크 PVC 이름(예: - backuprepodisk-my-db-cluster-br-0)을 사용하여 기본 PV 이름과 Compute Engine 영구 디스크 핸들러를 찾습니다.- kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAMESPACE -o jsonpath={.spec.volumeName}- 다음을 바꿉니다. - PVC_NAME: 이전 단계의 응답에 있는 백업 디스크의 PVC 이름입니다(예:- backuprepodisk-my-db-cluster-br-0).
 
- PV 이름을 기반으로 구성을 변수로 내보내 후속 섹션에서 사용합니다. - export BACKUP_DISK_SIZE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.capacity.storage}") export FS_TYPE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.fsType}") export VOLUME_HANDLER=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.volumeHandle}") export STORAGE_CLASS=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.storageClassName}")- 다음을 바꿉니다. - PV_NAME: 이전 단계의 응답에 있는 백업 디스크의 PV 이름입니다. 예를 들어 'backupDiskVolume'입니다.
 
영구 볼륨 리소스 만들기
디스크 핸들러 이름을 사용하여 PersistentVolume 리소스를 만듭니다.
- 대상 Kubernetes 클러스터에서 - PersistentVolume매니페스트 파일을 만듭니다.- apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "${STORAGE_CLASS}" capacity: storage: "${BACKUP_DISK_SIZE}" accessModes: - ReadWriteOnce csi: driver: pd.csi.storage.gke.io volumeHandle: "${VOLUME_HANDLER}" fsType: "${FS_TYPE}"- 다음을 바꿉니다. - PV_NAME: 생성될 PersistentVolume리소스의 이름입니다.
 
- PV_NAME: 생성될 
- 매니페스트 파일을 적용합니다. - kubectl apply -f PV_FILENAME- 다음을 바꿉니다. - PV_FILENAME: 이전 단계에서 만든 PersistentVolume매니페스트 파일의 이름입니다.
 
- PV_FILENAME: 이전 단계에서 만든 
대상 데이터베이스 클러스터 만들기
livenessProbe 파라미터를 일시적으로 중지하여 데이터베이스 클러스터를 만듭니다. 복원이 완료되면 livenessProbe 파라미터를 다시 구성합니다.
- 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: databaseVersion: "15.7.0" primarySpec: availabilityOptions: livenessProbe: "Disabled" adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: cpu: CPU_COUNT memory: MEMORY_SIZE disks: - name: DataDisk size: DATA_DISK_SIZE - name: BackupDisk size: ${BACKUP_DISK_SIZE} storageClass: ${STORAGE_CLASS} volumeName: PV_NAME- 다음을 바꿉니다. - DB_CLUSTER_NAME: 이 데이터베이스 클러스터의 이름입니다(예:- my-db-cluster).
- ENCODED_PASSWORD: 기본- postgres사용자 역할의 데이터베이스 로그인 비밀번호로, base64 문자열로 인코딩됩니다(예:- ChangeMe123의 경우- Q2hhbmdlTWUxMjM=).
- CPU_COUNT: 이 데이터베이스 클러스터의 각 데이터베이스 인스턴스에서 사용할 수 있는 CPU 수입니다.
- MEMORY_SIZE: 이 데이터베이스 클러스터의 데이터베이스 인스턴스당 메모리 양입니다. CPU당 8GB로 설정하는 것이 좋습니다. 예를 들어 CPU_COUNT를- 2로 설정한 경우- memory를- 16Gi로 설정하는 것이 좋습니다.
- DATA_DISK_SIZE: 데이터베이스 인스턴스당 디스크 크기입니다(예:- 10Gi).
 
- 매니페스트 파일을 적용합니다. - kubectl apply -f DBCLUSTER_FILENAME- 다음을 바꿉니다. - DBCLUSTER_FILENAME: 이전 단계에서 만든 DBCluster매니페스트 파일의 이름입니다.
 
- DBCLUSTER_FILENAME: 이전 단계에서 만든 
kubectl describe 명령어를 사용하여 데이터베이스 클러스터 리소스가 READY 상태인지 확인합니다.
대상 데이터베이스 클러스터에서 소스 백업 확인
pgBackRest 명령어를 실행하여 대상 데이터베이스 클러스터에서 소스 데이터베이스 클러스터 백업에 액세스할 수 있는지 확인합니다.
- 대상 데이터베이스 클러스터에서 데이터베이스 클러스터 포드 세부정보를 찾습니다. - kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME, alloydbomni.internal.dbadmin.goog/task-type=database"- 응답에는 클러스터 데이터베이스 포드의 이름이 포함됩니다. 
- 데이터베이스 포드에 로그인합니다. - kubectl exec -ti DATABASE_POD_NAME -- /bin/bash- 다음을 바꿉니다. - DATABASE_POD_NAME: 이전 단계의 데이터베이스 클러스터 포드의 이름입니다.
 
- pgBackRest구성 파일을 업데이트하기 전에 pod를 중지합니다.- supervisorctl.par stop postgres
- pgBackRest구성 파일을 업데이트합니다.- cp /backup/pgbackrest.conf /backup/pgbackrest.conf.bak rm /backup/pgbackrest.conf cat << EOF > /backup/pgbackrest.conf [db] pg1-path=/mnt/disks/pgsql/data pg1-socket-path=/tmp pg1-user=pgbackrest- [global] log-path=/backup/logs log-level-file=info EOF
- 데이터베이스 클러스터 포드에서 소스 백업을 확인합니다. - 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 postgrespostgres 프로세스가 시작되면 기본 인스턴스에 연결하고 쿼리를 실행하여 백업에서 데이터가 복원되었는지 확인할 수 있습니다. 자세한 내용은 Kubernetes에서 실행되는 AlloyDB Omni에 연결을 참조하세요.
데이터베이스 클러스터 구성
데이터베이스 클러스터를 클론한 후 데이터베이스 클러스터 사양을 구성합니다. 다음 명령어를 사용하여 livenessProbe 파라미터를 사용 설정해야 합니다.
    kubectl patch dbcluster DBCLUSTER_FILENAME --type merge -p '{"spec":{"primarySpec":{"availabilityOptions":{"livenessProbe":"Enabled"}}}}'