스토리지 및 PVC 크기 계획

문서 버전을 선택합니다.

스토리지 부족으로 인한 데이터베이스 다운타임과 데이터 손실을 방지하려면 AlloyDB Omni 데이터베이스 클러스터 (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 리소스)에만 백업 저장소 포드와 해당 BackupRepoDisk PVC를 프로비저닝합니다.

다음 표에서는 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 볼륨의 현재 디스크 공간 사용량을 확인하려면 다음 명령어를 실행합니다.

  1. 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: 데이터베이스 클러스터의 이름입니다.
  2. 데이터베이스 컨테이너 내에서 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
  3. 백업을 로컬에 저장하도록 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를 검사하고 크기를 조정하려면 다음 단계를 따르세요.

  1. 데이터베이스 클러스터의 네임스페이스에서 PVC를 나열하여 현재 용량과 StorageClass 리소스를 확인합니다.

    kubectl get pvc -n NAMESPACE

    NAMESPACE을 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   10m
    
  2. PVC에서 사용하는 StorageClass 리소스가 볼륨 확장을 지원하는지 확인합니다.

    kubectl get storageclass STORAGE_CLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'

    STORAGE_CLASS_NAME을 이전 출력의 STORAGECLASS 열에 있는 스토리지 클래스 이름 (예: standard-rwo)으로 바꿉니다. 명령어가 true을 반환하는지 확인합니다.

  3. 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: 영구 볼륨에서 사용하는 Kubernetes StorageClass 리소스의 이름입니다(예: standard-rwo). 클러스터를 만들 때 storageClass 필드를 생략한 경우 연산자가 클러스터의 기본 StorageClass을 사용하도록 계속 생략할 수 있습니다.
  4. 업데이트된 DBCluster 매니페스트를 적용합니다.

    kubectl apply -f DB_CLUSTER_MANIFEST.yaml

    DB_CLUSTER_MANIFEST을 DBCluster 매니페스트 파일의 경로로 바꿉니다.

  5. PVC 및 DBCluster 상태가 확장된 크기를 반영하는지 확인합니다.

    kubectl get pvc -n NAMESPACE

    DBCluster 리소스에서 allocatedResources.disks 상태 필드를 검사할 수도 있습니다.

    kubectl get dbcluster DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.allocatedResources.disks}{"\n"}'

    다음을 바꿉니다.

    • NAMESPACE: 데이터베이스 클러스터의 네임스페이스입니다.
    • DB_CLUSTER_NAME: 데이터베이스 클러스터의 이름입니다.

컴퓨팅 및 스토리지 리소스 크기 조정에 대한 자세한 내용은 Kubernetes 기반 데이터베이스 클러스터 크기 조절을 참고하세요.

다음 단계