Noções Básicas de Replicação por Streaming
A replicação física por streaming envia registros WAL de um primário para um ou mais standbys em tempo quase real. Os standbys reproduzem o WAL e permanecem somente leitura até serem promovidos.
Receita
Lista de verificação de configuração rápida para um único standby assíncrono no PostgreSQL 18.4.
-- Primário: permitir conexões de replicação
ALTER SYSTEM SET wal_level = 'replica';
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET max_replication_slots = 10;
SELECT pg_reload_conf();
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'change-me';# Standby: backup base do primário, depois iniciar em recuperação
pg_basebackup -h primary.db.internal -D /var/lib/postgresql/18/main \
-U replicator -Fp -Xs -P -RQuando usar isso: Você precisa de um standby quente para failover, escalonamento de leitura ou backups sem adicionar sobrecarga de decodificação lógica.
Exemplo de Trabalho
postgresql.conf e pg_hba.conf do primário, depois criação do standby:
# No host primário - trecho do pg_hba.conf
# host replication replicator 10.0.0.0/8 scram-sha-256
# No host standby
sudo -u postgres pg_basebackup \
-h primary.db.internal \
-p 5432 \
-U replicator \
-D /var/lib/postgresql/18/main \
-Fp -Xs -P -R \
-C -S standby1_slot-- No primário: confirmar que o standby está conectado
SELECT application_name, client_addr, state, sync_state
FROM pg_stat_replication;O que isso demonstra:
wal_level = replicahabilita a replicação física sem o custo total da decodificação lógica.pg_basebackup -Rgravaprimary_conninfoestandby.signalpara recuperação por streaming.-C -S standby1_slotcria um slot de replicação física para que o WAL seja retido para o novo standby.
Análise Profunda
Como Funciona
- O primário grava transações no WAL em disco.
- Processos de envio de WAL no primário leem o WAL e o transmitem para processos receptores de WAL nos standbys.
- Os standbys aplicam o WAL através do processo de inicialização (recuperação); eles atendem a consultas de leitura quando
hot_standby = on. - A promoção encerra a recuperação: remova
standby.signal, executepg_ctl promoteou deixe o Patroni 3.x eleger um novo líder.
Configurações do Primário
| Parâmetro | Valor Típico | Propósito |
|---|---|---|
wal_level | replica | Mínimo para replicação física |
max_wal_senders | 10+ | Conexões de replicação concorrentes |
wal_keep_size | 1GB+ | Fallback se os slots estiverem ausentes |
hot_standby | on | Permitir leituras no standby |
Arquivos do Standby
| Arquivo | Função |
|---|---|
standby.signal | Diz ao PostgreSQL para permanecer em recuperação |
postgresql.auto.conf | Contém primary_conninfo de -R |
recovery.signal | Usado durante PITR (não replicação por streaming normal) |
Armadilhas
- Slot de replicação ausente - Standby offline por muito tempo; o primário recicla o WAL e o standby não consegue acompanhar. Correção: Sempre use um slot físico por standby.
wal_levelmuito baixo -minimalou configuração insuficiente bloqueia a replicação. Correção: Definareplicaoulogical, reinicie se necessário.- Usuário de replicação bloqueado pelo pg_hba - Conexão recusada ou falhas de autenticação. Correção: Adicione a entrada
replicationcomscram-sha-256. - Promoção sem atualização de proxy - Aplicativos ainda apontam para o IP do primário antigo. Correção: Roteie através do HAProxy ou do endpoint REST do Patroni antes de simulações de failover.
- Grande atraso em primários ocupados - Rede ou reprodução lenta no standby. Correção: Monitore
pg_stat_replication.replay_lage dimensione a E/S do standby para corresponder ao primário.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Replicação lógica | Upgrade de versão principal, subconjunto de tabelas, entre bancos de dados | Você precisa de um clone byte a byte e a menor sobrecarga de reprodução |
| pgBackRest / backup base apenas | DR sem réplica ativa | Você precisa de RPO em nível de segundo |
| Réplica de leitura gerenciada (RDS, Cloud SQL) | Equipe de operações é pequena | Você precisa de topologia Patroni/etcd personalizada |
FAQs
A replicação por streaming replica DDL?
Sim. A replicação física reproduz todo o WAL, incluindo DDL, índices e extensões na mesma versão principal.
Os standbys podem aceitar gravações?
Não, até serem promovidos. Use replicação lógica ou bancos de dados separados para padrões bidirecionais.
Quantos standbys por primário?
O PostgreSQL suporta muitos; os limites práticos são largura de banda da rede, max_wal_senders e CPU do primário para os remetentes de WAL.
A replicação é criptografada?
Use sslmode=verify-full em primary_conninfo e TLS no primário. Veja Configuração SSL/TLS.
Quais versões do PostgreSQL devem corresponder?
A replicação física por streaming requer a mesma versão principal no primário e no standby.
Relacionado
- Síncrono vs. Assíncrono - Compromissos de RPO
- Slots de Replicação - Retenção de WAL
- Monitoramento de Replicação - Alertas de atraso
- Noções Básicas de HA - Metas de tempo de atividade
Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.