DBCluster). Utilizza questi consigli sul dimensionamento per configurare i volumi durante il deployment su Kubernetes utilizzando l'operatore Kubernetes di AlloyDB Omni.
Quando crei una risorsa personalizzata DBCluster,
l'operatore AlloyDB Omni esegue il provisioning dei PVC Kubernetes in base ai dischi
che definisci nei seguenti campi:
- Istanze principali e in standby ad alta disponibilità (HA): configurate nel campo
spec.primarySpec.resources.disksdella risorsa personalizzataDBCluster. Se attivi l'alta affidabilità configurando il campospec.availability.numberOfStandbys, ogni replica di standby utilizza la stessa configurazione del disco dell'istanza principale. - Istanze del pool di lettura: configurate in
spec.resources.diskssu ogniDBInstancerisorsa personalizzata in cuiinstanceTypeè impostato suReadPool. Se ometti la sezionespec.resourcesin una risorsaDBInstance, l'istanza del pool di lettura eredita la configurazione del disco dal campospec.primarySpec.resourcesdella risorsaDBClusterpadre.
Volumi PVC supportati
L'operatore AlloyDB Omni non esegue il provisioning di tutti i volumi PVC contemporaneamente:
- Sempre sottoposto a provisioning: l'operatore esegue sempre il provisioning di
DataDisk,ObsDisk,BackupDiskeLogDiskper tutti i pod delle istanze di database principali, in standby HA e del pool di lettura. Devi specificare esplicitamenteDataDiske le relative dimensioni nel file manifest. La specifica diObsDisk,BackupDiskeLogDisknel manifest è facoltativa. Se li ometti, come mostrato nel file manifest di installazione di base, l'operatore provisiona comunque questi PVC utilizzando le dimensioni predefinite. - Non viene eseguito il provisioning per impostazione predefinita: l'operatore non esegue il provisioning del volume
BackupRepoDiskquando crei una risorsaDBClusterautonoma o quando memorizzi i backup in Cloud Storage o Amazon S3. Esegue il provisioning del pod del repository di backup e del relativo PVCBackupRepoDisksolo quando crei una risorsaBackupPlanper archiviare i backup localmente sul tuo cluster Kubernetes (ovvero una risorsaBackupPlansenza un campobackupLocationremoto).
La tabella seguente descrive i volumi permanenti gestiti dall'operatore AlloyDB Omni:
| Nome disco | Percorso montaggio | Pod di destinazione | Configurazione del manifest | Comportamento di provisioning | Finalità |
|---|---|---|---|---|---|
DataDisk |
/mnt/disks/pgsql |
Pod del database | Obbligatorio | Sempre sottoposto a provisioning per ogni pod di database. | Archivia la directory del cluster di database PostgreSQL
(PGDATA), tabelle, indici, file temporanei e segmenti
di log write-ahead (WAL) attivi. |
ObsDisk |
/obs |
Pod del database | (Facoltativo, valore predefinito: 2Gi) |
Sempre sottoposto a provisioning per ogni pod di database. | Archivia i dati di osservabilità, inclusi i log del server PostgreSQL
(postgresql.log), i log pgAudit
(postgresql.audit), i log interni
(postgresql.internal) e gli archivi dei log .gz ruotati. |
BackupDisk |
/backup |
Pod del database | (Facoltativo, valore predefinito: 10Gi) |
Sempre sottoposto a provisioning per ogni pod di database. | Fornisce una directory di staging locale per le operazioni di backup sul pod del database. |
LogDisk |
/archive |
Pod del database | (Facoltativo, valore predefinito: 2Gi) |
Sempre sottoposto a provisioning per ogni pod di database. | Fornisce una destinazione di archivio WAL dedicata per i sidecar di backup personalizzati o di terze parti. Se non utilizzi un sidecar di archiviazione WAL personalizzato, puoi omettere questo disco dal manifest e lasciarlo con le dimensioni predefinite di 2Gi. |
BackupRepoDisk |
/backup |
Pod del repository di backup | (Facoltativo, valore predefinito: 10Gi) |
Non viene eseguito il provisioning per impostazione predefinita. Eseguito il provisioning solo quando una risorsa BackupPlan archivia i backup localmente (non viene eseguito il provisioning quando non è configurato alcun BackupPlan o quando i backup utilizzano Cloud Storage o Amazon S3). |
Fornisce un volume dedicato che archivia i backup fisici del database, i backup incrementali e i backup differenziali e i file WAL archiviati quando utilizzi i backup dell'archiviazione locale. |
Suggerimenti per il dimensionamento dei volumi persistenti
Utilizza le seguenti linee guida per dimensionare ogni volume PVC in base al tuo workload, alla configurazione di logging e alla strategia di backup.
DataDisk volume per lo spazio di archiviazione del database principale
L'operatore AlloyDB Omni esegue sempre il provisioning del volume DataDisk per ogni pod di database e devi specificarne esplicitamente le dimensioni nel manifest. Per
stimare la capacità minima per DataDisk, utilizza la seguente formula:
DataDisk capacity = (initial_dataset_size + projected_growth + max_wal_size) * 1.30
Quando dimensiona il volume DataDisk, tieni conto dei seguenti fattori:
- Overhead dell'indice: gli indici PostgreSQL e le tabelle del catalogo di sistema in genere richiedono un ulteriore 20-50% di spazio di archiviazione oltre ai dati della tabella non elaborati.
- Spazio libero WAL attivo: le transazioni di scrittura a velocità effettiva elevata accumulano file WAL
nella directory
pg_walfino al completamento dei checkpoint. Alloca spazio di archiviazione sufficiente per ospitare il parametro del databasemax_wal_sizeconfigurato (in genere da diversi gigabyte a decine di gigabyte, a seconda del workload). Per visualizzare o modificare i parametri del database, ad esempiomax_wal_size, consulta Configurare i parametri del database. - File temporanei e operazioni di vacuum: l'ordinamento delle query, la creazione di indici, la reindicizzazione e le operazioni di autovacuum richiedono spazio su disco temporaneo aggiuntivo.
- Regola generale per il dimensionamento: alloca da 1,5 a 2 volte le dimensioni del database non elaborato, incluso un buffer di sicurezza di almeno il 30%.
Volume ObsDisk per i log di controllo e diagnostica
L'operatore AlloyDB Omni esegue sempre il provisioning del volume ObsDisk per ogni pod di database (con le dimensioni predefinite 2Gi se lo ometti dal manifest). Se
il volume ObsDisk si riempie, PostgreSQL non può scrivere nuove voci di log e la rotazione dei log
può bloccarsi. Per informazioni su come configurare le impostazioni di rotazione e conservazione dei log per il volume ObsDisk, consulta Configurare la rotazione dei log.
Quando dimensiona il volume ObsDisk, considera le seguenti linee guida:
- Logging standard: un volume da 4 GB a 10 GB è sufficiente per il logging operativo standard con le impostazioni di rotazione dei log predefinite (soglia di rotazione di 200 MB e conservazione di 7 giorni).
- Audit logging (pgAudit): quando attivi l'audit logging con pgAudit, l'audit logging genera un volume di log notevolmente superiore. Alloca da 20 GiB a 50 GiB o più, a seconda della frequenza delle query e del livello di dettaglio delle regole di controllo.
Volume BackupRepoDisk per il repository di backup locale
A differenza dei dischi del pod di database, BackupRepoDisk non viene sottoposto a provisioning per impostazione predefinita.
L'operatore AlloyDB Omni esegue il provisioning del pod del repository di backup e del relativo
PVC BackupRepoDisk solo quando crei una
risorsa BackupPlan per archiviare i backup localmente
sul tuo cluster Kubernetes senza un campo backupLocation remoto. Se ometti
questo disco dal manifest DBCluster, viene utilizzata la dimensione predefinita di 10Gi.
Se non configuri una risorsa BackupPlan o se la risorsa BackupPlan utilizza Cloud Storage con il tipo GCS o Amazon S3 con il tipo S3, l'operatore non esegue il provisioning di BackupRepoDisk. Per ulteriori informazioni sulla
configurazione dei piani di backup e sul ridimensionamento dello spazio di archiviazione dei backup, vedi
Backup e ripristino in Kubernetes e
Ridimensionare un disco di backup.
Quando memorizzi i backup localmente, il volume BackupRepoDisk memorizza i backup completi, differenziali e incrementali compressi insieme ai file WAL archiviati. Lo spazio di archiviazione totale richiesto dipende dalle dimensioni del database, dalla velocità di modifica giornaliera dei dati, dalla pianificazione dei backup definita in backupSchedules e dal periodo di conservazione impostato da backupRetainDays:
- Compressione dei backup: i backup compressi in genere utilizzano il 37-38% delle dimensioni del database non compresso, il che rappresenta una riduzione delle dimensioni del 62-63%. Ad esempio, un database da 50 GiB viene compresso a circa 18,5 GiB.
- Pianificazione e conservazione dei backup: la combinazione di backup completi settimanali con backup incrementali o backup differenziali giornalieri richiede molto meno spazio di archiviazione rispetto all'esecuzione di backup completi giornalieri.
La seguente tabella mostra l'utilizzo dello spazio di archiviazione di picco di riferimento e le dimensioni BackupRepoDisk consigliate (incluso un buffer del 20%) in diversi programmi di backup per un database da 100 GiB con un tasso di modifica giornaliero dei dati del 10% e il periodo di conservazione predefinito di 14 giorni (backupRetainDays: 14):
Pianificazione del backup (backupSchedules) |
Picco di backup completi | Backup differenziali | Backup incrementali | File WAL archiviati | Picco di spazio di archiviazione utilizzato | Dimensioni consigliate di BackupRepoDisk (+ buffer del 20%) |
|---|---|---|---|---|---|---|
| Settimanale completo + incrementale giornaliero | 148,0 GiB | 0 GiB | 66,6 GiB | 155,4 GiB | 370,0 GiB | 444 GiB (~4,4 volte le dimensioni del database) |
| Settimanale completo + differenziale di metà settimana + incrementale giornaliero | 148,0 GiB | 22,2 GiB | 44,4 GiB | 155,4 GiB | 370,0 GiB | 444 GiB (~4,4 volte le dimensioni del database) |
| Settimanale completo + differenziale giornaliero | 148,0 GiB | 155,4 GiB | 0 GiB | 155,4 GiB | 458,8 GiB | 551 GiB (~5,5 volte le dimensioni del database) |
| Solo giornaliero completo (programma predefinito) | 592,0 GiB | 0 GiB | 0 GiB | 111,0 GiB | 703,0 GiB | 844 GiB (~8,4 volte le dimensioni del database) |
Volume BackupDisk per la gestione temporanea del backup dei pod di database
L'operatore AlloyDB Omni esegue sempre il provisioning del volume BackupDisk per ogni
pod del database con una dimensione predefinita di 10 GiB (10Gi).
AlloyDB Omni utilizza il volume BackupDisk come directory di gestione temporanea locale
durante le operazioni di backup. Poiché la dimensione predefinita di 10 GB è sufficiente
per le operazioni standard, puoi omettere BackupDisk dal manifest DBCluster
per utilizzare la dimensione predefinita.
LogDisk volume per l'archiviazione WAL personalizzata
L'operatore AlloyDB Omni esegue sempre il provisioning del volume LogDisk per ogni pod del database con una dimensione predefinita di 2 GiB (2Gi). Devi specificare una dimensione personalizzata per il volume LogDisk solo se implementi un container sidecar personalizzato o di terze parti che archivia i file WAL nella directory /archive. Per le implementazioni standard
dell'operatore AlloyDB Omni che utilizzano i backup integrati, puoi
omettere LogDisk dal manifest DBCluster e lasciare la dimensione
2Gi predefinita.
Riferimento per il dimensionamento in base alle dimensioni del set di dati
La tabella seguente fornisce le dimensioni dei PVC consigliate per le dimensioni dei set di dati non elaborati comuni:
| Dimensione dei dati non elaborati | Dimensioni consigliate per DataDisk |
Dimensioni consigliate per ObsDisk |
Dimensioni consigliate di BackupRepoDisk (provisioning
solo per i backup locali) |
Dimensioni consigliate per BackupDisk |
Dimensioni consigliate per LogDisk |
|---|---|---|---|---|---|
| 50 GiB | 100 GiB | 4 GiB (da 10 a 20 GiB con pgAudit) | 150 GB | 10 GiB (valore predefinito) | 2 GiB (valore predefinito) |
| 200 GB | 400 GiB | 10 GiB (da 20 a 50 GiB con pgAudit) | 600 GiB | 10 GiB (valore predefinito) | 2 GiB (valore predefinito) |
| 500 GiB | 1000 GiB (1 TiB) | 15 GiB (da 30 a 60 GiB con pgAudit) | 1500 GiB (1,5 TiB) | 10 GiB (valore predefinito) | 2 GiB (valore predefinito) |
| 1 TiB | 2000 GiB (2 TiB) | 20 GiB (da 50 a 100 GiB con pgAudit) | 3000 GiB (3 TiB) | 10 GiB (valore predefinito) | 2 GiB (valore predefinito) |
Monitora l'utilizzo del disco e le metriche di I/O
Puoi monitorare l'utilizzo del disco in tempo reale direttamente all'interno dei pod del repository di database e backup utilizzando kubectl o raccogliendo le metriche Prometheus esportate da AlloyDB Omni.
Controlla l'utilizzo del disco utilizzando kubectl
Per controllare l'utilizzo attuale dello spazio su disco dei volumi PVC montati all'interno del pod del database e del pod del repository di backup, esegui i seguenti comandi:
Recupera il nome del pod del database per la risorsa
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}')Sostituisci quanto segue:
NAMESPACE: lo spazio dei nomi Kubernetes in cui è distribuito il cluster di database.DB_CLUSTER_NAME: il nome del cluster di database.
Esegui
df -hall'interno del container del database per visualizzare la capacità e l'utilizzo dei volumiDataDisk(/mnt/disks/pgsql),ObsDisk(/obs),BackupDisk(/backup) eLogDisk(/archive):kubectl exec -n NAMESPACE "${DB_POD}" -c database -- df -h /mnt/disks/pgsql /obs /backup /archiveSe hai configurato una risorsa
BackupPlanper archiviare i backup localmente, recupera il nome del pod del repository di backup ed eseguidf -hper visualizzare la capacità e l'utilizzo del volumeBackupRepoDisk(/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
Monitora le metriche di archiviazione utilizzando Prometheus
AlloyDB Omni esporta le metriche di archiviazione e I/O del disco sul servizio
al-INSTANCE_ID-DB_CLUSTER_NAME-monitoring-system (porta 9187). Per scoprire come estrarre ed eseguire query su queste metriche, consulta
Monitora AlloyDB Omni. Per un
elenco completo delle metriche disponibili, consulta
Metriche di AlloyDB Omni.
Monitora le seguenti metriche del disco:
- Utilizzo dello spazio di archiviazione e capacità: monitora le metriche
alloydb_omni_node_storage_usage_per_disk_byteealloydb_omni_node_storage_limit_per_disk_byte, che indicano l'utilizzo dello spazio di archiviazione utilizzato e la capacità totale in byte per ogni volume utilizzando l'etichettadisk(ad esempio,DataDisk,ObsDiskoBackupDisk). Configura avvisi quando l'utilizzo del disco raggiunge l'80% e il 90% della capacità, in modo da poter espandere i volumi prima che lo spazio si esaurisca. - Throughput e operazioni di I/O del disco: monitora le metriche
alloydb_omni_node_storage_read_bytes_count_totalealloydb_omni_node_storage_write_bytes_count_totalper il throughput di lettura e scrittura del disco e le metrichealloydb_omni_node_storage_read_ops_count_totalealloydb_omni_node_storage_write_ops_count_totalper le operazioni di I/O di lettura e scrittura.
Ridimensionare i PVC per un DBCluster esistente
Se hai già creato una risorsa DBCluster seguendo la procedura descritta in
Creare un cluster di database, il tuo
manifest iniziale probabilmente specificava solo il volume DataDisk (ad esempio 10Gi), mentre
l'operatore AlloyDB Omni ha eseguito il provisioning dei volumi ObsDisk (2Gi), BackupDisk
(10Gi) e LogDisk (2Gi) con le dimensioni predefinite. Puoi espandere uno qualsiasi di questi PVC aggiornando il manifest DBCluster.
Prima di ridimensionare un PVC, esamina i seguenti requisiti e limitazioni:
- Espansione del volume StorageClass: puoi aumentare le dimensioni di un disco solo se la risorsa Kubernetes
StorageClassimpostaallowVolumeExpansion: true. Per saperne di più, consulta Espansione delle rivendicazioni di volumi permanenti. - Nessuna riduzione o modifica di StorageClass: non puoi ridurre le dimensioni di un disco
e non puoi modificare il campo
storageClassdi una PVC esistente dopo il provisioning. - Ridimensionamento dei dischi di dimensioni predefinite: per espandere un disco che hai omesso in precedenza dal manifest (ad esempio il volume
ObsDisko il volumeBackupRepoDisk), aggiungi una voce per quel disco al campospec.primarySpec.resources.diskscon un camposizepiù grande della sua capacità predefinita attuale. Mantieni sempreDataDiske qualsiasi altra voce del disco esistente nell'elencodisksquando aggiorni il manifest. - Comportamento di riavvio del pod: quando modifichi il campo
resources.disks, l'operatore AlloyDB Omni aggiorna la PVC sottostante e riavvia il pod dell'istanza del database per applicare la nuova specifica delle risorse. Esegui l'espansione dello spazio di archiviazione durante un periodo di manutenzione pianificato o configura l'alta affidabilità per ridurre al minimo i tempi di inattività.
Per esaminare e ridimensionare i PVC per il tuo DBCluster:
Elenca i PVC nello spazio dei nomi del cluster di database per verificarne le capacità attuali e la risorsa
StorageClass:kubectl get pvc -n NAMESPACESostituisci
NAMESPACEcon lo spazio dei nomi in cui hai eseguito il deployment diDBCluster(ad esempio,default).L'output è simile al seguente per un cluster denominato
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 10mVerifica che la risorsa
StorageClassutilizzata dai tuoi PVC supporti l'espansione del volume:kubectl get storageclass STORAGE_CLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Sostituisci
STORAGE_CLASS_NAMEcon il nome della classe di archiviazione della colonnaSTORAGECLASSdell'output precedente (ad esempio,standard-rwo). Verifica che il comando restituiscatrue.Aggiorna il campo
spec.primarySpec.resources.disksnel manifestDBClusterper aumentare il valoresizedel volumeDataDiske aggiungi i dischi di dimensioni predefinite che devi espandere (ad esempio il volumeObsDisko il volumeBackupRepoDisk).Il seguente manifest di esempio espande il volume
DataDiska400Gi, espande il volumeObsDiskdal valore predefinito2Gia10Gie configura il volumeBackupRepoDiska600Giper un workload di 200 GiB: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_NAMESostituisci quanto segue:
DB_CLUSTER_NAME: il nome del cluster di database, ad esempiomy-db-cluster.NAMESPACE: lo spazio dei nomi del cluster di database.STORAGE_CLASS_NAME: il nome della risorsa KubernetesStorageClassutilizzata dai volumi permanenti, ad esempiostandard-rwo. Se hai omesso il campostorageClassquando hai creato il cluster, puoi continuare a ometterlo in modo che l'operatore utilizzi ilStorageClasspredefinito del cluster.
Applica il manifest
DBClusteraggiornato:kubectl apply -f DB_CLUSTER_MANIFEST.yamlSostituisci
DB_CLUSTER_MANIFESTcon il percorso del file manifestDBCluster.Verifica che i PVC e lo stato di
DBClusterriflettano le dimensioni espanse:kubectl get pvc -n NAMESPACEPuoi anche esaminare il campo di stato
allocatedResources.disksnella risorsaDBCluster:kubectl get dbcluster DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.allocatedResources.disks}{"\n"}'Sostituisci quanto segue:
NAMESPACE: lo spazio dei nomi del cluster di database.DB_CLUSTER_NAME: il nome del cluster di database.
Per saperne di più sul ridimensionamento delle risorse di calcolo e archiviazione, consulta Ridimensionare il cluster di database basato su Kubernetes.
Passaggi successivi
- Installa AlloyDB Omni utilizzando l'orchestratore di container
- Gestire e monitorare AlloyDB Omni
- Configurare la rotazione dei log
- Backup e ripristino in Kubernetes
- Gestire l'alta affidabilità in Kubernetes
- Crea un'istanza del pool di lettura in Kubernetes