DBCluster). Use estas recomendações de dimensionamento para configurar seus volumes ao implantar no Kubernetes usando o operador do AlloyDB Omni no Kubernetes.
Ao criar um DBCluster recurso personalizado,
o operador do AlloyDB Omni provisiona PVCs do Kubernetes com base nos discos
definidos nos seguintes campos:
- Instâncias principais e em espera de alta disponibilidade (HA): configuradas no campo
spec.primarySpec.resources.disksdo recurso personalizadoDBCluster. Se você ativar a alta disponibilidade configurando o campospec.availability.numberOfStandbys, cada réplica em espera usará a mesma configuração de disco da instância principal. - Instâncias do pool de leitura: configuradas em
spec.resources.disksem cadaDBInstancerecurso personalizado em queinstanceTypeestá definido comoReadPool. Se você omitir a seçãospec.resourcesem um recursoDBInstance, a instância do pool de leitura vai herdar a configuração de disco do campospec.primarySpec.resourcesdo recursoDBClusterprincipal.
Volumes de PVC compatíveis
O operador do AlloyDB Omni não provisiona todos os volumes de PVC ao mesmo tempo:
- Sempre provisionado: o operador sempre provisiona
DataDisk,ObsDisk,BackupDiskeLogDiskpara todos os pods de instância de banco de dados primários, de espera de HA e de pool de leitura. É preciso especificar explicitamenteDataDiske o tamanho dele no manifesto. EspecificarObsDisk,BackupDiskeLogDiskno manifesto é opcional. Se você omitir esses campos, como mostrado no manifesto de instalação básico, o operador ainda vai provisionar esses PVCs usando os tamanhos padrão. - Não provisionado por padrão: o operador não provisiona o volume
BackupRepoDiskquando você cria um recursoDBClusterindependente ou quando armazena backups no Cloud Storage ou no Amazon S3. Ele provisiona o pod do repositório de backup e o PVCBackupRepoDisksomente quando você cria um recursoBackupPlanpara armazenar backups localmente no cluster do Kubernetes (ou seja, um recursoBackupPlansem um campobackupLocationremoto).
A tabela a seguir descreve os volumes permanentes que o operador do AlloyDB Omni gerencia:
| Nome do disco | Caminho de montagem | Pod de destino | Configuração do manifesto | Comportamento de provisionamento | Finalidade |
|---|---|---|---|---|---|
DataDisk |
/mnt/disks/pgsql |
Pod do banco de dados | Obrigatório | Sempre provisionado para cada pod de banco de dados. | Armazena o diretório do cluster de banco de dados PostgreSQL
(PGDATA), tabelas, índices, arquivos temporários e segmentos
ativos do registro prévio de escrita (WAL). |
ObsDisk |
/obs |
Pod do banco de dados | Opcional (padrão: 2Gi) |
Sempre provisionado para cada pod de banco de dados. | Armazena dados de observabilidade, incluindo registros do servidor PostgreSQL (postgresql.log), registros do pgAudit (postgresql.audit), registros internos (postgresql.internal) e arquivos de registros .gz rotacionados. |
BackupDisk |
/backup |
Pod do banco de dados | Opcional (padrão: 10Gi) |
Sempre provisionado para cada pod de banco de dados. | Fornece um diretório de preparo local para operações de backup no pod do banco de dados. |
LogDisk |
/archive |
Pod do banco de dados | Opcional (padrão: 2Gi) |
Sempre provisionado para cada pod de banco de dados. | Fornece um destino de arquivo WAL dedicado para sidecars de backup personalizados ou de terceiros. Se você não usar um sidecar personalizado de arquivamento de WAL, omita esse disco do manifesto e deixe-o no tamanho padrão 2Gi. |
BackupRepoDisk |
/backup |
Pod do repositório de backup | Opcional (padrão: 10Gi) |
Não provisionado por padrão. Provisionado somente quando um recurso BackupPlan armazena backups localmente. Não é provisionado quando nenhum BackupPlan está configurado ou quando os backups usam o Cloud Storage ou o Amazon S3. |
Fornece um volume dedicado que armazena backups físicos de banco de dados, backups incrementais e backups diferenciais e arquivos WAL arquivados quando você usa backups de armazenamento local. |
Recomendações de dimensionamento de PVC
Use as diretrizes a seguir para dimensionar cada volume de PVC com base na sua carga de trabalho, configuração de geração de registros e estratégia de backup.
DataDisk volume para armazenamento do banco de dados principal
O operador do AlloyDB Omni sempre provisiona o volume DataDisk para cada pod de banco de dados, e você precisa especificar explicitamente o tamanho dele no manifesto. Para estimar a capacidade mínima de DataDisk, use a seguinte fórmula:
DataDisk capacity = (initial_dataset_size + projected_growth + max_wal_size) * 1.30
Ao dimensionar o volume do DataDisk, considere os seguintes fatores:
- Sobrecarga de índice: os índices do PostgreSQL e as tabelas de catálogo do sistema geralmente exigem de 20% a 50% de armazenamento extra além dos dados brutos da tabela.
- Margem de WAL ativa: transações de gravação de alta taxa de transferência acumulam arquivos WAL no diretório
pg_walaté que os pontos de verificação sejam concluídos. Alocar armazenamento suficiente para acomodar o parâmetro de banco de dadosmax_wal_sizeconfigurado (normalmente, de vários gigabytes a dezenas de gigabytes, dependendo da sua carga de trabalho). Para conferir ou modificar parâmetros do banco de dados, comomax_wal_size, consulte Configurar parâmetros do banco de dados. - Arquivos temporários e operações de vacuum: a classificação de consultas, a criação de índices, a reindexação e as operações de autovacuum exigem mais espaço em disco temporário.
- Regra geral de dimensionamento: aloque de 1,5 a 2 vezes o tamanho do banco de dados bruto, incluindo pelo menos um buffer de segurança de 30%.
Volume de ObsDisk para registros de diagnóstico e auditoria
O operador do AlloyDB Omni sempre provisiona o volume ObsDisk para cada pod de banco de dados (com o tamanho padrão 2Gi se você o omitir do manifesto). Se o volume ObsDisk ficar cheio, o PostgreSQL não poderá gravar novas entradas de registro, e a rotação de registros poderá ser interrompida. Para informações sobre como configurar as opções de rotação e retenção de registros para o volume ObsDisk, consulte Configurar a rotação de registros.
Ao dimensionar o volume do ObsDisk, considere as seguintes diretrizes:
- Registro padrão: um volume de 4 GiB a 10 GiB é suficiente para o registro operacional padrão nas configurações de rotação de registros padrão (limite de rotação de 200 MB e retenção de sete dias).
- Registro de auditoria (pgAudit): quando você ativa o registro de auditoria com pgAudit, ele gera um volume de registros muito maior. Alocar de 20 GiB a 50 GiB ou mais, dependendo da taxa de consultas e do nível de detalhe das regras de auditoria.
Volume BackupRepoDisk para repositório de backup local
Ao contrário dos discos do pod de banco de dados, o BackupRepoDisk não é provisionado por padrão.
O operador do AlloyDB Omni provisiona o pod do repositório de backup e o
PVC BackupRepoDisk somente quando você cria um
recurso BackupPlan para armazenar backups localmente
no cluster do Kubernetes sem um campo backupLocation remoto. Se você omitir esse disco do manifesto DBCluster, ele usará o tamanho padrão de 10Gi.
Se você não configurar um recurso BackupPlan ou se o recurso BackupPlan
usar o Cloud Storage com o tipo GCS ou o Amazon S3 com o tipo S3, o
operador não vai provisionar BackupRepoDisk. Para mais informações sobre
como configurar planos de backup e redimensionar o armazenamento de backup, consulte
Fazer backup e restauração no Kubernetes e
Redimensionar um disco de backup.
Quando você armazena backups localmente, o volume BackupRepoDisk armazena backups completos, diferenciais e incrementais compactados, além de arquivos WAL arquivados. O armazenamento total necessário depende do tamanho do banco de dados, da taxa diária de mudança de dados, da programação de backup definida no backupSchedules e do período de armazenamento definido pelo backupRetainDays:
- Compactação de backup: os backups compactados geralmente usam de 37% a 38% do tamanho do banco de dados não compactado, o que representa uma redução de 62% a 63%. Por exemplo, um banco de dados de 50 GiB é compactado para aproximadamente 18,5 GiB.
- Programação e retenção de backup: combinar backups completos semanais com backups incrementais ou diferenciais diários exige muito menos armazenamento do que fazer backups completos diários.
A tabela a seguir mostra o uso máximo de armazenamento comparado e o tamanho recomendado de BackupRepoDisk (incluindo um buffer de 20%) em diferentes programações de backup para um banco de dados de 100 GiB com uma taxa de mudança de dados diária de 10% e o período de armazenamento padrão de 14 dias (backupRetainDays: 14):
Programação de backup (backupSchedules) |
Pico de backups completos | Backups diferenciais | Backups incrementais | Arquivos WAL arquivados | Pico de armazenamento usado | Tamanho recomendado de BackupRepoDisk (+ buffer de 20%) |
|---|---|---|---|---|---|---|
| Completo semanal + incremental diário | 148,0 GiB | 0 GiB | 66,6 GiB | 155,4 GiB | 370,0 GiB | 444 GiB (~4,4 vezes o tamanho do banco de dados) |
| Semanal completo + diferencial de meados da semana + incremental diário | 148,0 GiB | 22,2 GiB | 44,4 GiB | 155,4 GiB | 370,0 GiB | 444 GiB (~4,4 vezes o tamanho do banco de dados) |
| Total semanal + diferencial diário | 148,0 GiB | 155,4 GiB | 0 GiB | 155,4 GiB | 458,8 GiB | 551 GiB (~5,5 vezes o tamanho do banco de dados) |
| Diária completa (programação padrão) | 592,0 GiB | 0 GiB | 0 GiB | 111,0 GiB | 703,0 GiB | 844 GiB (~8,4 vezes o tamanho do banco de dados) |
Volume BackupDisk para o preparo do backup do pod de banco de dados
O operador do AlloyDB Omni sempre provisiona o volume BackupDisk para cada
pod de banco de dados com um tamanho padrão de 10 GiB (10Gi).
O AlloyDB Omni usa o volume BackupDisk como um diretório de preparação local
durante as operações de backup. Como o tamanho padrão de 10 GiB é suficiente para operações padrão, você pode omitir BackupDisk do manifesto DBCluster para usar o tamanho padrão.
Volume LogDisk para arquivamento personalizado de WAL
O operador do AlloyDB Omni sempre provisiona o volume LogDisk para cada pod de banco de dados com um tamanho padrão de 2 GiB (2Gi). Só é necessário especificar um tamanho personalizado para o volume LogDisk se você implantar um contêiner secundário personalizado ou de terceiros que arquiva arquivos WAL no diretório /archive. Para implantações padrão do operador do AlloyDB Omni que usam backups integrados, é possível omitir LogDisk do manifesto DBCluster e deixar o tamanho padrão 2Gi.
Referência de dimensionamento por tamanho do conjunto de dados
A tabela a seguir mostra os tamanhos recomendados de PVC para tamanhos comuns de conjuntos de dados brutos:
| Tamanho dos dados brutos | Tamanho recomendado do DataDisk |
Tamanho recomendado do ObsDisk |
Tamanho recomendado de BackupRepoDisk (provisionado apenas para backups locais) |
Tamanho recomendado do BackupDisk |
Tamanho recomendado do LogDisk |
|---|---|---|---|---|---|
| 50 GiB | 100 GiB | 4 GiB (10 a 20 GiB com pgAudit) | 150 GiB | 10 GiB (padrão) | 2 GiB (padrão) |
| 200 GiB | 400 GiB | 10 GiB (20 a 50 GiB com pgAudit) | 600 GiB | 10 GiB (padrão) | 2 GiB (padrão) |
| 500 GiB | 1.000 GiB (1 TiB) | 15 GiB (30 a 60 GiB com pgAudit) | 1.500 GiB (1,5 TiB) | 10 GiB (padrão) | 2 GiB (padrão) |
| 1 TiB | 2.000 GiB (2 TiB) | 20 GiB (50 a 100 GiB com pgAudit) | 3.000 GiB (3 TiB) | 10 GiB (padrão) | 2 GiB (padrão) |
Monitorar o uso do disco e as métricas de E/S
É possível monitorar o uso do disco em tempo real diretamente nos pods do banco de dados e do repositório de backup usando kubectl ou coletando métricas do Prometheus exportadas pelo AlloyDB Omni.
Verifique o uso do disco usando kubectl
Para verificar o uso atual do espaço em disco dos volumes de PVC montados no pod do banco de dados e no pod do repositório de backup, execute os seguintes comandos:
Consiga o nome do pod do banco de dados para seu recurso
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}')Substitua:
NAMESPACE: o namespace do Kubernetes em que o cluster de banco de dados está implantado.DB_CLUSTER_NAME: o nome do cluster de banco de dados.
Execute
df -hno contêiner do banco de dados para conferir a capacidade e o uso dos volumesDataDisk(/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 você configurou um recurso
BackupPlanpara armazenar backups localmente, receba o nome do pod do repositório de backup e executedf -hpara conferir a capacidade e o uso do 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
Monitorar métricas de armazenamento usando o Prometheus
O AlloyDB Omni exporta métricas de armazenamento e E/S de disco no serviço al-INSTANCE_ID-DB_CLUSTER_NAME-monitoring-system (porta 9187). Para saber como extrair e consultar essas métricas, consulte Monitorar o AlloyDB Omni. Para uma lista completa de métricas disponíveis, consulte Métricas do AlloyDB Omni.
Monitore as seguintes métricas de disco:
- Uso e capacidade de armazenamento: monitore as métricas
alloydb_omni_node_storage_usage_per_disk_byteealloydb_omni_node_storage_limit_per_disk_byte, que informam o uso do armazenamento e a capacidade total em bytes de cada volume usando o rótulodisk(por exemplo,DataDisk,ObsDiskouBackupDisk). Configure alertas quando o uso do disco atingir 80% e 90% da capacidade para que você possa expandir os volumes antes que eles fiquem sem espaço. - Taxa de transferência de disco e operações de E/S: monitore as métricas
alloydb_omni_node_storage_read_bytes_count_totalealloydb_omni_node_storage_write_bytes_count_totalpara taxa de transferência de leitura e gravação de disco e as métricasalloydb_omni_node_storage_read_ops_count_totalealloydb_omni_node_storage_write_ops_count_totalpara operações de E/S de leitura e gravação.
Redimensionar PVCs para um DBCluster atual
Se você já criou um recurso DBCluster seguindo
Criar um cluster de banco de dados, seu
manifesto inicial provavelmente especificou apenas o volume DataDisk (por exemplo, 10Gi), enquanto
o operador do AlloyDB Omni provisionou os volumes ObsDisk (2Gi), BackupDisk
(10Gi) e LogDisk (2Gi) com os tamanhos padrão. É possível expandir qualquer uma dessas PVCs atualizando o manifesto DBCluster.
Antes de redimensionar uma PVC, confira os requisitos e as limitações a seguir:
- Expansão de volume da StorageClass: só é possível aumentar o tamanho de um disco se o
recurso
StorageClassdo Kubernetes definirallowVolumeExpansion: true. Para mais informações, consulte Como expandir solicitações de volumes permanentes. - Sem redução ou mudanças de StorageClass: não é possível diminuir o tamanho de um disco nem mudar o campo
storageClassde uma PVC depois que ela é provisionada. - Redimensionamento de discos de tamanho padrão: para expandir um disco que você omitiu anteriormente do manifesto (como o volume
ObsDiskouBackupRepoDisk), adicione uma entrada para esse disco ao campospec.primarySpec.resources.diskscom um camposizemaior que a capacidade padrão atual. Sempre mantenhaDataDiske todas as outras entradas de disco na listadisksao atualizar o manifesto. - Comportamento de reinicialização do pod: quando você modifica o campo
resources.disks, o operador do AlloyDB Omni atualiza o PVC subjacente e reinicia o pod da instância de banco de dados para aplicar a nova especificação de recurso. Faça a expansão do armazenamento durante uma janela de manutenção planejada ou configure a alta disponibilidade para minimizar o tempo de inatividade.
Para inspecionar e redimensionar os PVCs do seu DBCluster, siga estas etapas:
Liste os PVCs no namespace do cluster de banco de dados para verificar as capacidades atuais e o recurso
StorageClass:kubectl get pvc -n NAMESPACESubstitua
NAMESPACEpelo namespace em que você implantou oDBCluster(por exemplo,default).A saída será semelhante a esta para um cluster chamado
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 10mVerifique se o recurso
StorageClassusado pelas PVCs é compatível com a expansão de volume:kubectl get storageclass STORAGE_CLASS_NAME -o jsonpath='{.allowVolumeExpansion}{"\n"}'Substitua
STORAGE_CLASS_NAMEpelo nome da classe de armazenamento da colunaSTORAGECLASSda saída anterior (por exemplo,standard-rwo). Confirme se o comando retornatrue.Atualize o campo
spec.primarySpec.resources.disksno manifestoDBClusterpara aumentar o valorsizedo volumeDataDiske adicione os discos de tamanho padrão que você precisa expandir, como o volumeObsDiskouBackupRepoDisk.O exemplo de manifesto a seguir expande o volume
DataDiskpara400Gi, o volumeObsDiskdo padrão2Gipara10Gie configura o volumeBackupRepoDiskem600Gipara uma carga de trabalho de 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_NAMESubstitua:
DB_CLUSTER_NAME: o nome do cluster de banco de dados, por exemplo,my-db-cluster.NAMESPACE: o namespace do cluster de banco de dados.STORAGE_CLASS_NAME: o nome do recursoStorageClassdo Kubernetes usado pelos seus volumes permanentes. Por exemplo,standard-rwo. Se você omitiu o campostorageClassao criar o cluster, continue omitindo para que o operador use oStorageClasspadrão do cluster.
Aplique o manifesto
DBClusteratualizado:kubectl apply -f DB_CLUSTER_MANIFEST.yamlSubstitua
DB_CLUSTER_MANIFESTpelo caminho do arquivo de manifestoDBCluster.Verifique se os PVCs e o status
DBClusterrefletem os tamanhos expandidos:kubectl get pvc -n NAMESPACETambém é possível inspecionar o campo de status
allocatedResources.disksno recursoDBCluster:kubectl get dbcluster DB_CLUSTER_NAME -n NAMESPACE -o jsonpath='{.status.primary.allocatedResources.disks}{"\n"}'Substitua:
NAMESPACE: o namespace do cluster de banco de dados.DB_CLUSTER_NAME: o nome do cluster de banco de dados.
Para mais informações sobre como redimensionar recursos de computação e armazenamento, consulte Redimensionar o cluster de banco de dados baseado no Kubernetes.
A seguir
- Instalar o AlloyDB Omni usando o orquestrador de contêineres
- Gerenciar e monitorar o AlloyDB Omni
- Configurar a rotação de registro
- Backup e restauração no Kubernetes
- Gerenciar alta disponibilidade no Kubernetes
- Criar uma instância do pool de leitura no Kubernetes