DBCluster)의 스토리지 및 영구 볼륨 클레임 (PVC) 용량을 적절하게 계획해야 합니다. 이러한 크기 조정 권장사항을 사용하여 AlloyDB Omni Kubernetes 운영자를 통해 Kubernetes에 배포할 때 볼륨을 구성하세요.
DBCluster 커스텀 리소스를 만드는 경우 AlloyDB Omni 연산자는 다음 필드에 정의된 디스크를 기반으로 Kubernetes PVC를 프로비저닝합니다.
- 기본 및 고가용성 (HA) 대기 인스턴스:
DBCluster커스텀 리소스의spec.primarySpec.resources.disks필드에 구성됩니다.spec.availability.numberOfStandbys필드를 구성하여 고가용성을 사용 설정하면 각 대기 복제본이 기본 인스턴스와 동일한 디스크 구성을 사용합니다. - 읽기 풀 인스턴스:
instanceType이ReadPool로 설정된 각DBInstance커스텀 리소스의spec.resources.disks에서 구성됩니다.DBInstance리소스에서spec.resources섹션을 생략하면 읽기 풀 인스턴스가 상위DBCluster리소스의spec.primarySpec.resources필드에서 디스크 구성을 상속합니다.
지원되는 PVC 볼륨
AlloyDB Omni 연산자는 모든 PVC 볼륨을 동시에 프로비저닝하지 않습니다.
- 항상 프로비저닝됨: 연산자는 모든 기본, HA 대기, 읽기 풀 데이터베이스 인스턴스 포드에 대해 항상
DataDisk,ObsDisk,BackupDisk,LogDisk를 프로비저닝합니다. 매니페스트에서DataDisk와 그 크기를 명시적으로 지정해야 합니다. 매니페스트에서ObsDisk,BackupDisk,LogDisk를 지정하는 것은 선택사항입니다. 기본 설치 매니페스트에 표시된 대로 생략하면 작업자는 기본 크기를 사용하여 이러한 PVC를 프로비저닝합니다. - 기본적으로 프로비저닝되지 않음: 독립형
DBCluster리소스를 만들거나 Cloud Storage에 백업을 저장하거나 Amazon S3에 저장할 때 운영자가BackupRepoDisk볼륨을 프로비저닝하지 않습니다. Kubernetes 클러스터에 백업을 로컬로 저장하는BackupPlan리소스를 만드는 경우 (즉, 원격backupLocation필드가 없는BackupPlan리소스)에만 백업 저장소 포드와 해당BackupRepoDiskPVC를 프로비저닝합니다.
다음 표에서는 AlloyDB Omni 운영자가 관리하는 영구 볼륨을 설명합니다.
| 디스크 이름 | 마운트 경로 | 타겟 포드 | 매니페스트 구성 | 프로비저닝 동작 | 목적 |
|---|---|---|---|---|---|
DataDisk |
/mnt/disks/pgsql |
데이터베이스 포드 | 필수 | 각 데이터베이스 포드에 대해 항상 프로비저닝됩니다. | PostgreSQL 데이터베이스 클러스터 디렉터리(PGDATA), 테이블, 색인, 임시 파일, 활성 미리 쓰기 로그 (WAL) 세그먼트를 저장합니다. |
ObsDisk |
/obs |
데이터베이스 포드 | 선택사항 (기본값: 2Gi) |
각 데이터베이스 포드에 대해 항상 프로비저닝됩니다. | PostgreSQL 서버 로그(postgresql.log), pgAudit 로그(postgresql.audit), 내부 로그(postgresql.internal), 순환된 .gz 로그 보관 파일을 비롯한 관찰 가능한 데이터를 저장합니다. |
BackupDisk |
/backup |
데이터베이스 포드 | 선택사항 (기본값: 10Gi) |
각 데이터베이스 포드에 대해 항상 프로비저닝됩니다. | 데이터베이스 포드의 백업 작업을 위한 로컬 스테이징 디렉터리를 제공합니다. |
LogDisk |
/archive |
데이터베이스 포드 | 선택사항 (기본값: 2Gi) |
각 데이터베이스 포드에 대해 항상 프로비저닝됩니다. | 맞춤 또는 서드 파티 백업 사이드카를 위한 전용 WAL 보관 파일 대상을 제공합니다. 맞춤 WAL-archiving 사이드카를 사용하지 않는 경우 매니페스트에서 이 디스크를 생략하고 기본 2Gi 크기로 둘 수 있습니다. |
BackupRepoDisk |
/backup |
백업 저장소 포드 | 선택사항 (기본값: 10Gi) |
기본적으로 프로비저닝되지 않습니다. BackupPlan 리소스가 백업을 로컬에 저장하는 경우에만 프로비저닝됩니다(BackupPlan가 구성되지 않았거나 백업이 Cloud Storage 또는 Amazon S3를 사용하는 경우에는 프로비저닝되지 않음). |
로컬 스토리지 백업을 사용할 때 물리적 데이터베이스 백업, 증분 및 차등 백업, 보관된 WAL 파일을 저장하는 전용 볼륨을 제공합니다. |
PVC 크기 조정 권장사항
다음 가이드라인을 사용하여 워크로드, 로깅 구성, 백업 전략에 따라 각 PVC 볼륨의 크기를 조정합니다.
기본 데이터베이스 스토리지를 위한 DataDisk 볼륨
AlloyDB Omni 연산자는 모든 데이터베이스 포드에 대해 항상 DataDisk 볼륨을 프로비저닝하며 매니페스트에서 크기를 명시적으로 지정해야 합니다. DataDisk의 최소 용량을 추정하려면 다음 공식을 사용하세요.
DataDisk capacity = (initial_dataset_size + projected_growth + max_wal_size) * 1.30
DataDisk 볼륨의 크기를 조정할 때는 다음 요소를 고려하세요.
- 색인 오버헤드: PostgreSQL 색인 및 시스템 카탈로그 테이블에는 일반적으로 원시 테이블 데이터 외에 20~50%의 추가 스토리지가 필요합니다.
- 활성 WAL 여유 공간: 체크포인트가 완료될 때까지 고처리량 쓰기 트랜잭션이
pg_wal디렉터리에 WAL 파일을 누적합니다. 구성된max_wal_size데이터베이스 매개변수를 수용할 만큼 충분한 스토리지를 할당합니다 (일반적으로 워크로드에 따라 수 GB에서 수십 GB).max_wal_size와 같은 데이터베이스 파라미터를 보거나 수정하려면 데이터베이스 파라미터 구성을 참고하세요. - 임시 파일 및 베큠 작업: 쿼리 정렬, 색인 생성, 색인 재작성, autovacuum 작업에는 추가 임시 디스크 공간이 필요합니다.
- 일반적인 크기 조정 규칙: 원시 데이터베이스 크기의 1.5~2배를 할당하고 최소 30% 의 안전 버퍼를 포함합니다.
진단 및 감사 로그용 ObsDisk 볼륨
AlloyDB Omni 연산자는 항상 모든 데이터베이스 포드에 ObsDisk 볼륨을 프로비저닝합니다 (매니페스트에서 생략하면 2Gi 기본 크기 사용). ObsDisk 볼륨이 가득 차면 PostgreSQL에서 새 로그 항목을 쓸 수 없고 로그 순환이 중단될 수 있습니다. ObsDisk 볼륨의 로그 순환 및 보관 설정을 구성하는 방법에 관한 자세한 내용은 로그 순환 구성을 참고하세요.
ObsDisk 볼륨의 크기를 조정할 때는 다음 가이드라인을 고려하세요.
- 표준 로깅: 기본 로그 순환 설정(200MB 순환 기준점 및 7일 보관)에서 표준 운영 로깅에는 4GiB~10GiB 볼륨이 충분합니다.
- 감사 로깅 (pgAudit): pgAudit로 감사 로깅을 사용 설정하면 감사 로깅에서 훨씬 더 많은 로그 볼륨을 생성합니다. 쿼리 비율과 감사 규칙의 상세도에 따라 20GiB~50GiB 이상을 할당합니다.
로컬 백업 저장소용 BackupRepoDisk 볼륨
데이터베이스 포드 디스크와 달리 BackupRepoDisk는 기본적으로 프로비저닝되지 않습니다.
AlloyDB Omni 연산자는 원격 backupLocation 필드 없이 Kubernetes 클러스터에 백업을 로컬로 저장하는 BackupPlan 리소스를 만드는 경우에만 백업 저장소 포드와 해당 BackupRepoDisk PVC를 프로비저닝합니다. DBCluster 매니페스트에서 이 디스크를 생략하면 기본 크기인 10Gi가 사용됩니다.
BackupPlan 리소스를 구성하지 않거나 BackupPlan 리소스가 GCS 유형의 Cloud Storage 또는 S3 유형의 Amazon S3를 사용하는 경우 연산자는 BackupRepoDisk를 프로비저닝하지 않습니다. 백업 계획 구성 및 백업 스토리지 크기 조절에 대한 자세한 내용은 Kubernetes에서 백업 및 복원 및 백업 디스크 크기 조절을 참고하세요.
백업을 로컬에 저장하면 BackupRepoDisk 볼륨에 압축된 전체, 차등, 증분 백업이 보관처리된 WAL 파일과 함께 저장됩니다. 필요한 총 스토리지는 데이터베이스 크기, 일일 데이터 변경률, backupSchedules에 정의된 백업 일정, backupRetainDays에 의해 설정된 보관 기간에 따라 달라집니다.
- 백업 압축: 압축된 백업은 일반적으로 압축되지 않은 데이터베이스 크기의 37~38%를 사용하므로 크기가 62~63% 감소합니다. 예를 들어 50GiB 데이터베이스는 약 18.5GiB로 압축됩니다.
- 백업 일정 및 보관: 주간 전체 백업과 일일 증분 또는 차등 백업을 결합하면 일일 전체 백업을 수행하는 것보다 훨씬 적은 스토리지가 필요합니다.
다음 표에서는 일일 데이터 변경률이 10% 이고 기본 14일 보관 기간 (backupRetainDays: 14)이 있는 100GiB 데이터베이스의 다양한 백업 일정에 따른 벤치마크된 최대 스토리지 사용량과 권장 BackupRepoDisk 크기 (20% 버퍼 포함)를 보여줍니다.
백업 일정 (backupSchedules) |
최대 전체 백업 | 차등 백업 | 증분 백업 | 보관된 WAL 파일 | 최대 스토리지 사용량 | 권장 BackupRepoDisk 크기 (+20% 버퍼) |
|---|---|---|---|---|---|---|
| 주간 전체 + 일일 증분 | 148.0 GiB | 0GiB | 66.6 GiB | 155.4 GiB | 370.0 GiB | 444GiB (~4.4x 데이터베이스 크기) |
| 주간 전체 + 주중 차이 + 일일 증가분 | 148.0 GiB | 22.2 GiB | 44.4 GiB | 155.4 GiB | 370.0 GiB | 444GiB (~4.4x 데이터베이스 크기) |
| 주간 전체 + 일일 차등 | 148.0 GiB | 155.4 GiB | 0GiB | 155.4 GiB | 458.8 GiB | 551GiB (~데이터베이스 크기의 5.5배) |
| 매일 전체만 (기본 일정) | 592.0 GiB | 0GiB | 0GiB | 111.0 GiB | 703.0 GiB | 844GiB (~8.4x 데이터베이스 크기) |
데이터베이스 포드 백업 스테이징을 위한 BackupDisk 볼륨
AlloyDB Omni 연산자는 항상 기본 크기가 10GiB (10Gi)인 모든 데이터베이스 포드에 BackupDisk 볼륨을 프로비저닝합니다. AlloyDB Omni는 백업 작업 중에 BackupDisk 볼륨을 로컬 스테이징 디렉터리로 사용합니다. 기본 10GiB 크기는 표준 작업에 충분하므로 DBCluster 매니페스트에서 BackupDisk를 생략하여 기본 크기를 사용할 수 있습니다.
맞춤 WAL 보관처리용 LogDisk 볼륨
AlloyDB Omni 연산자는 항상 기본 크기가 2GiB (2Gi)인 모든 데이터베이스 포드에 LogDisk 볼륨을 프로비저닝합니다. WAL 파일을 /archive 디렉터리에 보관하는 맞춤 또는 서드 파티 사이드카 컨테이너를 배포하는 경우에만 LogDisk 볼륨의 맞춤 크기를 지정하면 됩니다. 기본 제공 백업을 사용하는 표준 AlloyDB Omni 연산자 배포의 경우 DBCluster 매니페스트에서 LogDisk를 생략하고 기본 2Gi 크기로 유지할 수 있습니다.
데이터 세트 크기별 크기 조정 참조
다음 표에는 일반적인 원시 데이터 세트 크기에 권장되는 PVC 크기가 나와 있습니다.
| 원시 데이터 크기 | 권장 DataDisk 크기 |
권장 ObsDisk 크기 |
권장 BackupRepoDisk 크기 (로컬 백업용으로만 프로비저닝됨) |
권장 BackupDisk 크기 |
권장 LogDisk 크기 |
|---|---|---|---|---|---|
| 50GiB | 100GiB | 4GiB (pgAudit 사용 시 10~20GiB) | 150 GiB | 10GiB (기본값) | 2GiB (기본값) |
| 200GiB | 400 GiB | 10GiB (pgAudit 사용 시 20~50GiB) | 600GiB | 10GiB (기본값) | 2GiB (기본값) |
| 500GiB | 1,000 GiB (1 TiB) | 15GiB (pgAudit 사용 시 30~60GiB) | 1,500 GiB (1.5 TiB) | 10GiB (기본값) | 2GiB (기본값) |
| 1TiB | 2,000 GiB (2 TiB) | 20GiB (pgAudit 사용 시 50~100GiB) | 3,000 GiB (3 TiB) | 10GiB (기본값) | 2GiB (기본값) |
디스크 사용량 및 I/O 측정항목 모니터링
kubectl를 사용하거나 AlloyDB Omni에서 내보낸 Prometheus 측정항목을 수집하여 데이터베이스 및 백업 저장소 포드 내에서 실시간 디스크 사용량을 직접 모니터링할 수 있습니다.
kubectl를 사용하여 디스크 사용량 확인
데이터베이스 포드 및 백업 저장소 포드 내에서 마운트된 PVC 볼륨의 현재 디스크 공간 사용량을 확인하려면 다음 명령어를 실행합니다.
DBCluster리소스의 데이터베이스 포드 이름을 가져옵니다.export DB_POD=$(kubectl get pod -n NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}')다음을 바꿉니다.
NAMESPACE: 데이터베이스 클러스터가 배포된 Kubernetes 네임스페이스입니다.DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름입니다.
데이터베이스 컨테이너 내에서
df -h를 실행하여DataDisk(/mnt/disks/pgsql),ObsDisk(/obs),BackupDisk(/backup),LogDisk(/archive) 볼륨의 용량과 사용량을 확인합니다.kubectl exec -n NAMESPACE "${DB_POD}" -c database -- df -h /mnt/disks/pgsql /obs /backup /archive백업을 로컬에 저장하도록
BackupPlan리소스를 구성한 경우 백업 저장소 포드의 이름을 가져오고df -h를 실행하여BackupRepoDisk볼륨 (/backup)의 용량과 사용량을 확인합니다.export BACKUP_REPO_POD=$(kubectl get pod -n NAMESPACE -l alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/backup-repository -o jsonpath='{.items[0].metadata.name}') kubectl exec -n NAMESPACE "${BACKUP_REPO_POD}" -c backuprepo -- df -h /backup
Prometheus를 사용하여 스토리지 측정항목 모니터링
AlloyDB Omni는 al-INSTANCE_ID-DB_CLUSTER_NAME-monitoring-system 서비스 (포트 9187)에서 스토리지 및 디스크 I/O 측정항목을 내보냅니다. 이러한 측정항목을 스크랩하고 쿼리하는 방법을 알아보려면 AlloyDB Omni 모니터링을 참고하세요. 사용 가능한 측정항목의 전체 목록은 AlloyDB Omni 측정항목을 참고하세요.
다음 디스크 측정항목을 모니터링합니다.
- 스토리지 사용량 및 용량:
disk라벨(예:DataDisk,ObsDisk,BackupDisk)을 사용하여 각 볼륨의 사용된 스토리지와 총 용량을 바이트 단위로 보고하는alloydb_omni_node_storage_usage_per_disk_byte및alloydb_omni_node_storage_limit_per_disk_byte측정항목을 모니터링합니다. 디스크 사용량이 용량의 80% 와 90% 에 도달하면 공간이 부족해지기 전에 볼륨을 확장할 수 있도록 알림을 구성합니다. - 디스크 처리량 및 I/O 작업: 디스크 읽기 및 쓰기 처리량의
alloydb_omni_node_storage_read_bytes_count_total및alloydb_omni_node_storage_write_bytes_count_total측정항목과 읽기 및 쓰기 I/O 작업의alloydb_omni_node_storage_read_ops_count_total및alloydb_omni_node_storage_write_ops_count_total측정항목을 모니터링합니다.
기존 DBCluster의 PVC 크기 조절
데이터베이스 클러스터 만들기에 따라 DBCluster 리소스를 이미 만든 경우 초기 매니페스트는 DataDisk 볼륨 (예: 10Gi)만 지정했을 수 있습니다. AlloyDB Omni 연산자는 기본 크기로 ObsDisk (2Gi), BackupDisk(10Gi), LogDisk (2Gi) 볼륨을 프로비저닝했습니다. DBCluster 매니페스트를 업데이트하여 이러한 PVC를 확장할 수 있습니다.
PVC 크기를 조절하기 전에 다음 요구사항 및 제한사항을 검토하세요.
- StorageClass 볼륨 확장: Kubernetes
StorageClass리소스가allowVolumeExpansion: true를 설정한 경우에만 디스크 크기를 늘릴 수 있습니다. 자세한 내용은 영구 볼륨 클레임 확장을 참고하세요. - 축소 또는 StorageClass 변경 불가: 디스크 크기를 줄일 수 없으며 프로비저닝된 후에는 기존 PVC의
storageClass필드를 변경할 수 없습니다. - 기본 크기 디스크 크기 조절: 이전에 매니페스트에서 누락된 디스크 (예:
ObsDisk볼륨 또는BackupRepoDisk볼륨)를 확장하려면 현재 기본 용량보다 큰size필드를 사용하여 해당 디스크의 항목을spec.primarySpec.resources.disks필드에 추가합니다. 매니페스트를 업데이트할 때는 항상DataDisk와 기타 기존 디스크 항목을disks목록에 유지하세요. - 포드 다시 시작 동작:
resources.disks필드를 수정하면 AlloyDB Omni 연산자가 기본 PVC를 업데이트하고 데이터베이스 인스턴스 포드를 다시 시작하여 새 리소스 사양을 적용합니다. 계획된 유지보수 기간에 스토리지 확장을 실행하거나 고가용성을 구성하여 다운타임을 최소화합니다.
DBCluster의 PVC를 검사하고 크기를 조정하려면 다음 단계를 따르세요.
데이터베이스 클러스터의 네임스페이스에서 PVC를 나열하여 현재 용량과
StorageClass리소스를 확인합니다.kubectl get pvc -n NAMESPACENAMESPACE을DBCluster을 배포한 네임스페이스로 바꿉니다 (예:default).my-db-cluster라는 클러스터의 출력은 다음과 비슷합니다.NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE backupdisk-al-1060-my-db-cluster-0 Bound pvc-45a28be2-a111-40ed-9641-61b9d25f313b 10Gi RWO standard-rwo 10m datadisk-al-1060-my-db-cluster-0 Bound pvc-c23a1ab8-f97c-4449-9072-502b6d9ba869 10Gi RWO standard-rwo 10m logdisk-al-1060-my-db-cluster-0 Bound pvc-f0c41d15-bb13-4d28-b94b-01a28dc67ef6 2Gi RWO standard-rwo 10m obsdisk-al-1060-my-db-cluster-0 Bound pvc-69ea1ca7-a868-4dc9-a9f8-503d5e5f2387 2Gi RWO standard-rwo 10mPVC에서 사용하는
StorageClass리소스가 볼륨 확장을 지원하는지 확인합니다.kubectl get storageclass STORAGE_CLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'STORAGE_CLASS_NAME을 이전 출력의STORAGECLASS열에 있는 스토리지 클래스 이름 (예:standard-rwo)으로 바꿉니다. 명령어가true을 반환하는지 확인합니다.DBCluster매니페스트에서spec.primarySpec.resources.disks필드를 업데이트하여DataDisk볼륨의size값을 늘리고 확장해야 하는 기본 크기의 디스크 (예:ObsDisk볼륨 또는BackupRepoDisk볼륨)를 추가합니다.다음 예시 매니페스트는
DataDisk볼륨을400Gi로 확장하고,ObsDisk볼륨을2Gi기본값에서10Gi로 확장하고, 200GiB 워크로드에 대해600Gi에서BackupRepoDisk볼륨을 구성합니다.apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: DB_CLUSTER_NAME namespace: NAMESPACE spec: databaseVersion: "18.3.0" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: cpu: 4 memory: 32Gi disks: - name: DataDisk size: 400Gi storageClass: STORAGE_CLASS_NAME - name: ObsDisk size: 10Gi storageClass: STORAGE_CLASS_NAME - name: BackupRepoDisk size: 600Gi storageClass: STORAGE_CLASS_NAME다음을 바꿉니다.
DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름입니다(예:my-db-cluster).NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.STORAGE_CLASS_NAME: 영구 볼륨에서 사용하는 KubernetesStorageClass리소스의 이름입니다(예:standard-rwo). 클러스터를 만들 때storageClass필드를 생략한 경우 연산자가 클러스터의 기본StorageClass을 사용하도록 계속 생략할 수 있습니다.
업데이트된
DBCluster매니페스트를 적용합니다.kubectl apply -f DB_CLUSTER_MANIFEST.yamlDB_CLUSTER_MANIFEST을DBCluster매니페스트 파일의 경로로 바꿉니다.PVC 및
DBCluster상태가 확장된 크기를 반영하는지 확인합니다.kubectl get pvc -n NAMESPACEDBCluster리소스에서allocatedResources.disks상태 필드를 검사할 수도 있습니다.kubectl get dbcluster DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.allocatedResources.disks}{"\n"}'다음을 바꿉니다.
NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름입니다.
컴퓨팅 및 스토리지 리소스 크기 조정에 대한 자세한 내용은 Kubernetes 기반 데이터베이스 클러스터 크기 조절을 참고하세요.
다음 단계
- 컨테이너 조정자를 사용하여 AlloyDB Omni 설치
- AlloyDB Omni 관리 및 모니터링
- 로그 순환 구성
- Kubernetes에서 백업 및 복원
- Kubernetes에서 고가용성 관리
- Kubernetes에서 읽기 풀 인스턴스 만들기