이 페이지에서는 AlloyDB Omni Kubernetes 연산자를 사용하여 AlloyDB Omni 데이터를 백업하고 복원하는 방법을 설명합니다. 이를 위해서는 매니페스트 파일과 kubectl
명령줄 도구를 사용하여 Kubernetes 클러스터를 업데이트하는 방법에 관한 기본적인 지식이 필요합니다. Kubernetes 클러스터에 AlloyDB Omni를 설치하고 실행하는 방법에 관한 자세한 내용은 Kubernetes에 AlloyDB 설치를 참고하세요.
AlloyDB Omni 지속적 백업 및 복구를 사용 설정하려면 각 데이터베이스 클러스터에 대한 백업 계획을 만들어야 합니다. 백업은 backupPlan
리소스에 정의된 백업 일정에 따라 수행됩니다. 백업 계획에 백업 일정이 정의되지 않은 경우 기본적으로 매일 연속 백업이 실행됩니다. 복구 기간의 모든 타임스탬프에서 초 단위로 백업을 복원하거나 클론할 수 있습니다.
Kubernetes가 아닌 배포에서 AlloyDB Omni 데이터를 백업하고 복원하는 방법에 관한 자세한 내용은 Barman 설치 및 구성을 참고하세요.
백업 사용 설정 및 예약
지속적인 백업은 데이터베이스 클러스터의 백업 계획 리소스를 만들 때 사용 설정됩니다. 각 데이터베이스 클러스터에 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
형식으로 표현됩니다. 예를 들어 '0 0 * * 0'으로 설정하면 매주 일요일 00:00에 전체 백업이 실행됩니다.DIFF_CRON_SCHEDULE
: 처음에는 전체 백업인 백업을 생성하는 백업 일정입니다. 후속 백업은 데이터의 중간 변경사항을 기반으로 하며cron
형식으로 표현됩니다. 예를 들어 '0 22 * * 3'으로 설정하면 매주 수요일 22:00에 차등 백업이 실행됩니다.INCR_CRON_SCHEDULE
: 마지막 전체, 차등 또는 증분 백업에서 변경된 데이터가 포함된 백업을 만드는 백업 일정입니다.cron
형식으로 표현됩니다. 예를 들어 '0 21 * * *'로 설정하면 매일 21:00에 증분 백업이 실행됩니다.RETENTION_DAYS
: AlloyDB Omni 운영자가 이 백업을 보관하는 일 수입니다.1
~90
사이의 정수여야 합니다. 기본값은14
입니다.PAUSED_BOOLEAN
: 백업 계획이 일시중지되어 있는지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.true
: 백업이 일시중지되고 예약된 백업이 생성되지 않습니다.false
: AlloyDB Omni Operator가cronSchedule
에 지정된 일정에 따라 백업을 만듭니다. 명시적으로true
로 설정하지 않은 경우 기본값입니다.
기본값은
false
입니다.
Cloud Storage에 백업을 저장하는 계획 만들기
Cloud Storage에 저장되는 백업을 사용 설정하려면 다음 단계를 따르세요.
Cloud Storage 버킷을 만듭니다. 이 버킷에 할당한 이름을 기록해 둡니다. 나중에 필요합니다.
버킷에 백업을 추가하기 위한 서비스 계정을 만듭니다.
서비스 계정에
storage.objectAdmin
Identity and Access Management 역할을 부여합니다.서비스 계정의 키를 만듭니다. 이렇게 하면 비공개 키가 로컬 환경에 다운로드됩니다.
다운로드한 키 파일 이름을
key.json
로 바꿉니다.비공개 키가 포함된 Kubernetes 보안 비밀을 만듭니다.
kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE
다음을 바꿉니다.
SECRET_NAME
: 만들려는 Kubernetes 보안 비밀의 이름입니다(예:gcs-key
).KEY_PATH
: 이전 단계에서 다운로드한key.json
파일의 로컬 파일 시스템 경로입니다.NAMESPACE
: 데이터베이스 클러스터의 네임스페이스입니다.
다음 매니페스트를 적용합니다.
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
형식으로 표현됩니다. 예를 들어 '0 0 * * 0'으로 설정하면 매주 일요일 00:00에 전체 백업이 실행됩니다.DIFF_CRON_SCHEDULE
: 처음에는 전체 백업인 백업을 생성하는 백업 일정입니다. 후속 백업은 데이터의 중간 변경사항을 기반으로 하며cron
형식으로 표현됩니다. 예를 들어 '0 22 * * 3'으로 설정하면 매주 수요일 22:00에 차등 백업이 실행됩니다.INCR_CRON_SCHEDULE
: 마지막 전체, 차등 또는 증분 백업에서 변경된 데이터가 포함된 백업을 만드는 백업 일정입니다.cron
형식으로 표현됩니다. 예를 들어 '0 21 * * *'로 설정하면 매일 21:00에 증분 백업이 실행됩니다.RETENTION_DAYS
: AlloyDB Omni 운영자가 이 백업을 보관하는 일 수입니다.1
~90
사이의 정수여야 합니다. 기본값은14
입니다.PAUSED_BOOLEAN
: 백업 계획이 일시중지되어 있는지 여부를 지정합니다. 다음 값 중 하나를 제공합니다.true
: 백업이 일시중지되고 예약된 백업이 생성되지 않습니다.false
: AlloyDB Omni Operator가cronSchedule
에 지정된 일정에 따라 백업을 만듭니다. 명시적으로true
로 설정하지 않은 경우 기본값입니다.
기본값은
false
입니다.
BUCKET_URL
: 이전 단계에서 만든 Cloud Storage 버킷의 이름입니다. 이는 버킷의 전체 URL이 아닙니다. 버킷 이름 앞에gs://
를 붙이지 마세요.BACKUP_PATH
: AlloyDB Omni Operator가 Cloud Storage 버킷 내에서 백업을 쓰는 디렉터리의 경로입니다. 경로는/
로 시작하는 절대 경로여야 합니다.SECRET_NAME
: 이전 단계에서 만든 Kubernetes 보안 비밀에 선택한 이름입니다.
수동으로 백업 만들기
언제든지 데이터베이스 클러스터에 이미 적용한 백업 계획을 사용하여 백업 리소스를 수동으로 만들 수 있습니다. AlloyDB Omni Operator는 선택한 백업 계획의 저장소 위치 및 보관 기간을 새 수동 백업에 적용합니다.
백업을 수동으로 만들려면 다음 매니페스트를 적용합니다.
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
backup-plan-prod-20231026172643 Succeeded 2023-10-26T17:26:53Z
manual-backup-1 Succeeded 2023-10-26T18:15:27Z
manual-backup-2 InProgress
출력 표의 각 행은 다음 속성을 사용하여 백업 리소스를 나타냅니다.
- 백업 이름입니다.
- 백업 상태입니다.
Succeeded
는 복원할 준비가 된 백업을 표시합니다. - 백업이 생성된 타임스탬프입니다.
백업에서 복원
AlloyDB를 사용하면 개별 백업에서 복원하거나 특정 시점의 백업을 사용하여 클러스터를 클론할 수 있습니다.
이름이 지정된 백업에서 복원
백업에서 복원하여 데이터베이스 클러스터의 데이터를 백업의 데이터로 교체하려면 다음 단계를 따르세요.
단계가
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
이전 단계에 나열된 백업 중 하나를 복원할 백업으로 선택합니다. 다음 단계에서 사용할 이름을 기록해 둡니다.
다음 매니페스트를 적용합니다.
apiVersion: alloydbomni.dbadmin.goog/v1 kind: Restore metadata: name: RESTORE_NAME namespace: NAMESPACE spec: sourceDBCluster: DB_CLUSTER_NAME backup: BACKUP_NAME
다음을 바꿉니다.
RESTORE_NAME: 이 매니페스트에서 만드는 data-restore 리소스에 사용할 이름입니다(예:
restore-1
).DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.
BACKUP_NAME: 이전 단계에서 선택한 백업의 이름입니다.
특정 시점에서 클러스터 클론
AlloyDB Omni Operator를 사용하면 복구 기간 내의 특정 시점부터 클러스터의 데이터를 클론할 수 있습니다. 복구 기간의 길이는 보관 기간에 따라 직접 결정됩니다.
예를 들어 보관 기간이 14일로 설정된 경우 14일 이상 된 데이터는 복구할 수 없습니다. 복구 기간 내의 어느 시점으로든 복원할 수 있습니다. AlloyDB Omni Operator는 지정된 값보다 하루 더 오래 백업과 로그를 보관합니다.
복구 기간을 모니터링하여 복원 지점을 확인합니다.
kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
다음은 응답 예시입니다.
recoveryWindow: begin: "2024-01-31T02:54:35Z"
RFC 3339 타임스탬프 형식의 타임스탬프 값은 복원 리소스에 사용됩니다.
다음과 같은 복원 리소스 매니페스트를 만들고 적용합니다.
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: 이 매니페스트에서 만드는 data-restore 리소스에 사용할 이름입니다(예:
restore-1
).DB_CLUSTER_NAME: 데이터베이스 클러스터를 만들 때 할당한 데이터베이스 클러스터의 이름입니다.
DATE_AND_TIME_STAMP: 복원하려는 연속 백업의 분 단위 RFC 3339 타임스탬프입니다(예:
2024-03-05T15:32:10Z
).NEW_DB_CLUSTER_NAME: 새 데이터베이스 클러스터의 이름입니다.
복원 상태 보기
복원 작업 진행 상황 보기
kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE
NAMESPACE
를 데이터베이스 클러스터의 네임스페이스로 바꿉니다.명령어를 연속으로 실행하려면
-Aw
플래그를 추가합니다.다음과 유사한 결과가 출력됩니다.
NAME PHASE COMPLETETIME RESTOREDPOINTINTIME restore-1 RestoreInProgress
출력 테이블의
PHASE
열 값이ProvisionSucceeded
이면 복원이 완료된 것입니다.복원되거나 클론된 데이터베이스 클러스터가 온라인 상태가 되는 진행 상황을 확인합니다.
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 Operator는 백업 계획을 만들 때 지정한 보관 기간보다 오래된 백업을 자동으로 삭제합니다.
백업을 수동으로 삭제하려면 백업이 다음 요구사항을 충족해야 합니다.
이 백업은 백업 계획에 저장된 유일한 백업이 아닙니다. AlloyDB Omni Operator를 사용하려면 백업 계획당 백업이 하나 이상 있어야 합니다.
이 백업에는 이 백업을 사용하는 다른 백업이 없습니다. 예를 들어 전체 백업과 이에 종속된 차등 백업 또는 증분 백업과 이에 종속된 차등 백업이 있습니다.
백업을 삭제하려면 다음 명령어를 실행합니다.
kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE
다음을 바꿉니다.
BACKUP_NAME
: 삭제할 백업의 이름입니다.NAMESPACE
: 데이터베이스 클러스터의 네임스페이스입니다.
백업 계획 업데이트
모든 백업 계획은 Kubernetes 리소스입니다. 구성을 업데이트하려면 다음 중 하나를 수행합니다.
백업 계획의 매니페스트 파일을 수정하고 다시 적용합니다.
kubectl patch
명령어를 사용합니다.
예를 들어 실행 중인 백업 계획을 일시중지하려면 매니페스트의 paused
속성을 true
로 변경한 다음 매니페스트를 다시 적용합니다.
백업 계획 삭제
백업 계획을 삭제하고 모든 백업 리소스를 삭제하려면 다음 명령어를 실행합니다.
kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE
다음을 바꿉니다.
BACKUP_PLAN_NAME
: 삭제할 백업 계획의 이름입니다.NAMESPACE
: 데이터베이스 클러스터의 네임스페이스입니다.
백업 계획을 삭제하지 않고 일시중지하려면 백업 계획 리소스의 paused
속성을 true
로 설정합니다. 일시중지된 백업 계획은 백업을 계속 저장하고 수동 백업 생성을 허용합니다.