이 페이지에서는 AlloyDB Omni 데이터베이스 클러스터의 Cloud Storage 백업을 사용하여 Kubernetes에서 데이터베이스 클러스터를 클론하는 방법을 보여줍니다.
다음 워크플로는 클론하는 데 사용되는 단계를 설명합니다.
livenessProbe
매개변수를 사용 중지한 상태에서 대상 데이터베이스 클러스터에DBCluster
매니페스트 파일을 만들고 적용합니다.- Cloud Storage 백업에 액세스할
pgbackrest.conf
파일을 만들고 구성합니다. pgBackRest
명령어를 사용하여 소스 백업에 액세스할 수 있는지 확인합니다.pgBackRest
명령어를 사용하여 백업을 대상 데이터베이스 클러스터에 복원합니다.
시작하기 전에
- 소스 데이터베이스 클러스터 백업이 저장된 Cloud Storage 버킷의 전체 경로에 액세스할 수 있는지 확인합니다. 이 경로는 소스 데이터베이스 클러스터의
BackupPlan
리소스를 만들 때 사용한 경로와 동일합니다. - 대상 AlloyDB Omni 데이터베이스 클러스터를 만듭니다. Kubernetes에 AlloyDB Omni를 설치하는 방법에 관한 자세한 내용은 데이터베이스 클러스터 만들기를 참고하세요.
postgres
사용자로 데이터베이스에 로그인했는지 확인합니다.
대상 데이터베이스 클러스터에 데이터베이스 클러스터 만들기
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: 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로 설정하는 것이 좋습니다. 예를 들어 이 매니페스트에서 이전에cpu
를2
로 설정한 경우memory
를16Gi
로 설정하는 것이 좋습니다.DISK_SIZE
: 데이터베이스 인스턴스당 디스크 크기입니다(예:10Gi
).
매니페스트 파일을 적용합니다.
kubectl apply -f DBCLUSTER_FILENAME
다음을 바꿉니다.
- DBCLUSTER_FILENAME: 이전 단계에서 만든
DBCluster
매니페스트 파일의 이름입니다.
- DBCLUSTER_FILENAME: 이전 단계에서 만든
kubectl describe
명령어를 사용하여 데이터베이스 클러스터 리소스가 READY
상태인지 확인합니다.
pgBackRest
파일 구성
대상 데이터베이스 클러스터가 소스 백업이 있는 Cloud Storage 버킷에 액세스할 수 있도록 pgBackRest
파일을 구성합니다.
대상 데이터베이스 클러스터에서 데이터베이스 클러스터 포드 세부정보를 찾습니다.
kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=<var>DB_CLUSTER_NAME</var>, alloydbomni.internal.dbadmin.goog/task-type=database"
응답에는 클러스터 데이터베이스 포드의 이름이 포함됩니다.
포드에 로그인합니다.
kubectl exec -ti DATABASE_POD_NAME -- /bin/bash
다음을 바꿉니다.
- DATABASE_POD_NAME: 이전 단계의 데이터베이스 클러스터 포드의 이름입니다.
pgBackRest
구성 파일을 업데이트하기 전에 pod를 중지합니다.supervisorctl.par stop postgres
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"}}}}'