<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><category>pcsoft.br.windev</category><copyright>Copyright 2026, PC SOFT</copyright><lastBuildDate>23 Sep 2025 05:00:27 Z</lastBuildDate><pubDate>23 Sep 2025 04:51:13 Z</pubDate><description>Manual &#13;
&#13;
PostgreSQL Physical Replication:Complete Guide with Examples&#13;
&#13;
Sumário&#13;
	1.	O que é replicação física&#13;
	2.	Quando usar replicação física&#13;
	3.	Terminologia e componentes principais&#13;
	4.	Tipos de replicação física&#13;
	5.	Pré-requisitos&#13;
	6.	Configuração passo a passo&#13;
	7.	Monitoramento e manutenção&#13;
	8.	Failover / switchover&#13;
	9.	Problemas comuns e soluções&#13;
	10.	Segurança&#13;
	11.	Boas práticas&#13;
&#13;
⸻&#13;
&#13;
1. O que é replicação física&#13;
&#13;
A replicação física no PostgreSQL consiste em copiar todos os blocos de dados (nível de disco, WAL) de um servidor principal (primary ou master) para um ou mais servidores standby (standby ou replica), para que eles sejam réplicas idênticas do cluster de dados. Inclui tudo: dados, índices, etc. É oposta à replicação lógica, que opera no nível de operações (inserções, atualizações, deleções) ou por objeto (tabelas), com mais flexibilidade, porém menos “idêntica”.&#13;
&#13;
Vantagens comuns:&#13;
	•	Alta disponibilidade: se o primary cair, promover o standby para assumir.&#13;
	•	Recuperação de desastres (disaster recovery).&#13;
	•	Possibilidade de usar réplicas para leituras (“read replicas”) ou para offloading de queries pesadas.&#13;
	•	Proteção de dados: menos risco de inconsistência se for bem efetuada.&#13;
&#13;
Limitações:&#13;
	•	Réplicas são basicamente cópias do primary — não há filtragem de dados/objetos; tudo que está no primary estará na réplica.&#13;
	•	Menos flexível para cenários onde se quer replicar apenas parte do banco ou versões diferentes.&#13;
	•	Escrita só no primary; standby (em modo streaming / hot standby) pode só ler.&#13;
&#13;
⸻&#13;
&#13;
2. Quando usar replicação física&#13;
&#13;
Alguns cenários típicos:&#13;
	•	Para manter cópias de segurança em servidores geograficamente distintos.&#13;
	•	Para garantir alta disponibilidade, com recuperação rápida em caso de falha no primary.&#13;
	•	Para separar workloads de leitura do de escrita, usando réplicas para queries de leitura.&#13;
	•	Em arquiteturas de failover automático ou manual.&#13;
	•	Quando se quer minimizar perda de dados (RPO baixo).&#13;
&#13;
Não tão adequado:&#13;
	•	Quando se precisa replicar apenas parte do banco.&#13;
	•	Quando se precisa replicar para versões muito diferentes do PostgreSQL — replicação física requer compatibilidade de versão e binária.&#13;
	•	Em ambientes onde a latência de escrita for crítico e a rede entre primary e standby for instável.&#13;
&#13;
⸻&#13;
&#13;
3. Terminologia e componentes principais&#13;
	•	Primary: servidor que recebe todas as gravações (escritas).&#13;
	•	Standby / Replica: servidor que aplica o WAL vindo do primary; pode estar em modo somente leitura (hot standby).&#13;
	•	WAL (Write-Ahead Log): log de tudo que foi alterado no banco. Fundamental para replicação e recuperação.&#13;
	•	WAL Sender: processo no primary que envia os registros de WAL para o standby.&#13;
	•	WAL Receiver: no standby, recebe os WAL do primary.&#13;
	•	Base backup: cópia inicial dos dados do primary para iniciar o standby.&#13;
	•	Recovery / recovery.conf (ou parâmetros equivalentes nas versões mais recentes): configurações no standby para restaurar/seguir o primary.&#13;
	•	Synchronous vs Asynchronous: modos de replicação quanto à garantia de que o commit no primary aguarda confirmação do standby.&#13;
&#13;
⸻&#13;
&#13;
4. Tipos de replicação física&#13;
&#13;
Dentro da replicação física do PostgreSQL, podemos distinguir:&#13;
	•	Streaming Replication: envia de forma contínua os WALs assim que disponíveis, mantendo a réplica bastante próxima do estado do primary.&#13;
	•	Log Shipping + arquivamento (archive-mode): os WALs são arquivados no primary e copiados/aplicados ao standby periodicamente. Pode haver atraso maior.&#13;
	•	Hot standby: standby configurado para aceitar conexões de leitura enquanto aplica WALs.&#13;
&#13;
Também modos de replicação física síncrona ou assíncrona:&#13;
	•	Assíncrona: o primary não aguarda confirmação do standby para completar commits. É mais rápido, mas há risco de perda de dados se o primary cair.&#13;
	•	Síncrona: ao menos um standby confirma o recebimento dos WAL antes que o primary confirme o commit. Maior garantia, mas impacto de latência.&#13;
&#13;
⸻&#13;
&#13;
5. Pré-requisitos&#13;
&#13;
Antes de iniciar:&#13;
	•	Versão do PostgreSQL compatível com streaming replication (geralmente versões modernas: 9.x em diante, idealmente 12, 13, 14, 15, etc.).&#13;
	•	Ambiente de rede estável entre primary e standby.&#13;
	•	Espaço de disco suficiente no primary para armazenar WALs que ainda não foram consumidos pelos standbys.&#13;
	•	Permissões de sistema operacional: acesso para copiar arquivos, reiniciar serviços, etc.&#13;
	•	Usuário com privilégios de replicação.&#13;
	•	Chaves SSH ou outros métodos seguros para comunicação se usar rede insegura ou internet.&#13;
&#13;
⸻&#13;
&#13;
6. Configuração – passo a passo&#13;
&#13;
Aqui está um guia geral para configurar replicação física via streaming:&#13;
&#13;
Os comandos podem variar conforme a versão do PostgreSQL; adapte-se.&#13;
&#13;
6.1. Configurar o servidor primary&#13;
&#13;
No postgresql.conf:&#13;
	•	wal_level = replica (ou hot_standby / logical dependendo da versão; para replicação física “replica” costuma bastar).&#13;
	•	max_wal_senders — número de conexões que irão enviar WALs para standbys.&#13;
	•	wal_keep_size ou wal_keep_segments — conservar WALs suficientes para manter os standbys sincronizados.&#13;
	•	listen_addresses — deve permitir conexões do standby.&#13;
	•	archive_mode = on (se quiser usar arquivamento além de streaming).&#13;
	•	archive_command — comando para arquivar os WALs, se aplicável.&#13;
&#13;
No pg_hba.conf:&#13;
	•	Adicionar regra para permitir que o standby se conecte via usuário de replicação ao banco de dados postgres (ou outro definido) usando host/hostssl etc.&#13;
&#13;
Criar usuário de replicação:&#13;
&#13;
CREATE ROLE replicador WITH REPLICATION LOGIN PASSWORD 'senha_segura';&#13;
&#13;
6.2. Obter base inicial do primary&#13;
&#13;
No servidor standby:&#13;
	•	Pare o serviço do PostgreSQL (se já estiver rodando).&#13;
	•	Use pg_basebackup para copiar os dados do primary:&#13;
&#13;
pg_basebackup -h primary_host -D /caminho/do/data_directory_standby -U replicador --wal-method=stream --checkpoint=fast&#13;
&#13;
Esse comando copia todos os dados + WALs atuais necessários.&#13;
&#13;
6.3. Configuração do standby&#13;
&#13;
No postgresql.conf do standby:&#13;
	•	hot_standby = on (para permitir leituras).&#13;
	•	Outros ajustes de performance conforme desejar.&#13;
&#13;
Arquivo de recuperação (nas versões antigas: recovery.conf; nas versões mais novas, são parâmetros no postgresql.conf ou um arquivo standby.signal):&#13;
	•	Configurar conexão com primary (host, usuário, senha, porta).&#13;
	•	Definir primary_conninfo com string de conexão.&#13;
	•	Se usar slots de replicação: primary_slot_name = 'nome_do_slot'.&#13;
&#13;
Criar o sinal de standby (versões modernas) para ativar o standby mode: colocar arquivo standby.signal no diretório de dados.&#13;
&#13;
6.4. Iniciar os servidores&#13;
	•	Reiniciar o primary depois de alterar sua configuração.&#13;
	•	Iniciar o standby; ele irá conectar, pegar a base de dados inicial, aplicar WALs e seguir o primary.&#13;
&#13;
6.5. Verificar funcionamento&#13;
&#13;
No primary:&#13;
&#13;
SELECT * FROM pg_stat_replication;&#13;
&#13;
Isso mostra replicas conectadas, quão atrasadas elas estão, etc.&#13;
&#13;
No standby:&#13;
&#13;
SELECT pg_is_in_recovery();&#13;
&#13;
Retorna true se estiver em modo standby.&#13;
&#13;
Também verificar logs para eventuais erros de conexão ou atraso.&#13;
&#13;
⸻&#13;
&#13;
7. Monitoramento e manutenção&#13;
&#13;
Manter replicação física exige monitorar:&#13;
	•	Lag (atraso): quanto o standby está “atrasado” comparado ao primary. Em streaming, isso pode ser medido via LSN ou via diferenças de WAL pendente.&#13;
	•	Espaço em disco do primary: WALs não podem ser descartados enquanto réplicas não os consumirem; caso contrário, risco de lotar disco ou de replica ficar pendente demais.&#13;
	•	Número de conexões de WAL Sender vs demanda.&#13;
	•	Uso de CPU / I/O em standby, para garantir que o replay do WAL não cause lentidão excessiva.&#13;
	•	integridade dos dados: verificar que os dados foram aplicados corretamente, fazer testes de leitura.&#13;
&#13;
Ferramentas úteis:&#13;
	•	pg_stat_replication no primary.&#13;
	•	pg_stat_wal_receiver no standby.&#13;
	•	Logs do PostgreSQL.&#13;
	•	Métodos de alerta (scripts, monitoramento externo).&#13;
&#13;
⸻&#13;
&#13;
8. Failover e switchover&#13;
	•	Failover: quando o primary falha, promove-se o standby a novo primary. Deve ter procedimentos definidos: como promover, redirecionar aplicações, garantir que não haja “split-brain” (dois primaries simultâneos).&#13;
	•	Switchover: trocar manualmente qual servidor é primary, sem perda de dados, para manutenção etc.&#13;
&#13;
Passos típicos:&#13;
	1.	Validar que standby está sincronizado ou suficientemente atualizado.&#13;
	2.	Promover o standby:&#13;
&#13;
# dependendo da versão&#13;
pg_ctl promote -D /caminho/do/data_directory_standby&#13;
&#13;
ou criar sinal para promoção.&#13;
	3.	Redirecionar conexões das aplicações para o novo primary.&#13;
	4.	Reconfigurar antigos primaries como standby, se necessário, iniciando replicação a partir do novo primary.&#13;
&#13;
⸻&#13;
&#13;
9. Problemas comuns e como resolvê-los&#13;
&#13;
Problema	Causa típica	Solução sugerida&#13;
&#13;
Standby muito atrasado	Alta carga no primary, rede lenta, WALs acumulados	Aumentar max_wal_senders, melhorar rede, ajustar wal_keep_size ou usar archive para garantir que réplicas possam pegar WAL antigos.&#13;
&#13;
WALs removidos antes que standby os consuma	Sem espaço suficiente, sem configuração de retenção, ou replica offline	aumentar retenção, monitorar réplicas, garantir que standby volte a se conectar, ajustar archive_mode.&#13;
&#13;
Standby não aceita conexões de leitura	hot_standby desligado ou configuração de autenticação incorreta	ativar hot_standby; revisar postgresql.conf e pg_hba.conf.&#13;
&#13;
Desempenho do primary degradado	Escritas síncronas, muitos standbys, latências de rede	usar replicação assíncrona se tolerável, limitar número de réplicas síncronas, otimizar configuração de rede.&#13;
&#13;
Failover causa corrompimentos ou “split brain”	falta de coordenação, primary ainda ativo ou replicação desalinhada	ter processo de failover bem definido, usar fencing ou IP flutuante, monitorar estado antes de promoção.&#13;
&#13;
&#13;
⸻&#13;
&#13;
10. Segurança&#13;
	•	Usuário de replicação com privilégios limitados; use autenticação segura (senha forte, chaves, SSL).&#13;
	•	Conexões criptografadas (via SSL/TLS) entre primary e standby se a rede for insegura.&#13;
	•	Proteção dos arquivos de backup e WAL arquivados: acesso restrito.&#13;
	•	Monitoramento de quem está conectando, auditoria.&#13;
&#13;
⸻&#13;
&#13;
11. Boas práticas&#13;
	•	Fazer backup regular inicial + WALs; testar restaurar a partir do backup + WALs.&#13;
	•	Testar failover periodicamente para garantir que tudo funciona.&#13;
	•	Monitorar métricas: latência, uso de recursos, espaço em disco, estado das réplicas.&#13;
	•	Usar versionamento compatível entre primary e standby (especialmente para físicas). Atualização coordenada.&#13;
	•	Limitar o número de réplicas síncronas para evitar gargalos.&#13;
	•	Automatizar processos de promoção/failover com ferramentas (Patroni, repmgr, etc.), se for ambiente de produção crítico.&#13;
&#13;
⸻&#13;
&#13;
Perfeito, Adriano 👊&#13;
Vou transformar esse manual em algo ainda mais completo, com mais detalhes técnicos, exemplos de comandos reais, comparações, diagramas de funcionamento e até dicas de automação. Assim você terá um guia de referência prática sobre replicação física no PostgreSQL.&#13;
&#13;
⸻&#13;
&#13;
📘 Manual Completo de Replicação Física no PostgreSQL&#13;
&#13;
⸻&#13;
&#13;
🔹 1. Conceito Geral&#13;
&#13;
A replicação física funciona no nível de blocos e WAL (Write Ahead Log).&#13;
Cada alteração feita no primary é registrada no WAL. Esse log é enviado ao standby, que o aplica exatamente na mesma ordem, mantendo os dois bancos idênticos.&#13;
&#13;
Diferença chave para replicação lógica:&#13;
	•	Física = byte a byte, cluster inteiro.&#13;
	•	Lógica = nível de instruções (DML), filtrável por tabela/coluna.&#13;
&#13;
⸻&#13;
&#13;
🔹 2. Arquiteturas Possíveis&#13;
&#13;
A) Primary + Standby Único&#13;
&#13;
[ Primary ] ---&gt; [ Standby ]&#13;
&#13;
B) Primary + Múltiplos Standbys&#13;
&#13;
              +--&gt; [ Standby 1 ]&#13;
[ Primary ] --+--&gt; [ Standby 2 ]&#13;
              +--&gt; [ Standby 3 ]&#13;
&#13;
C) Cascading Replication&#13;
&#13;
[ Primary ] ---&gt; [ Standby 1 ] ---&gt; [ Standby 2 ]&#13;
&#13;
D) Synchronous vs Asynchronous&#13;
	•	Síncrona: commit só confirma quando standby recebe/aplica WAL.&#13;
	•	Assíncrona: primary confirma commit sem esperar standby.&#13;
&#13;
⸻&#13;
&#13;
🔹 3. Pré-requisitos Técnicos&#13;
	•	PostgreSQL ≥ 12 (as versões modernas usam standby.signal em vez de recovery.conf).&#13;
	•	Rede confiável (idealmente latência &lt; 50ms).&#13;
	•	Usuário dedicado à replicação com privilégio REPLICATION.&#13;
	•	Espaço em disco suficiente para manter WALs até que todos os standbys os recebam.&#13;
	•	Configuração consistente de timezone, locale e versão binária do PostgreSQL.&#13;
&#13;
⸻&#13;
&#13;
🔹 4. Configurações no Primary&#13;
&#13;
Editar postgresql.conf:&#13;
&#13;
listen_addresses = '*'&#13;
wal_level = replica&#13;
max_wal_senders = 10&#13;
wal_keep_size = 512MB&#13;
archive_mode = on&#13;
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'&#13;
&#13;
Editar pg_hba.conf:&#13;
&#13;
# Permitir conexões de replicação&#13;
host replication replicador 192.168.0.100/32 md5&#13;
&#13;
Criar usuário:&#13;
&#13;
CREATE ROLE replicador WITH REPLICATION LOGIN PASSWORD 'senha_super_segura';&#13;
&#13;
Reiniciar PostgreSQL:&#13;
&#13;
systemctl restart postgresql&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 5. Preparando o Standby&#13;
	1.	Parar o serviço PostgreSQL no standby:&#13;
&#13;
systemctl stop postgresql&#13;
&#13;
	2.	Zerar diretório de dados:&#13;
&#13;
rm -rf /var/lib/postgresql/14/main/*&#13;
&#13;
	3.	Criar cópia base usando pg_basebackup:&#13;
&#13;
pg_basebackup -h 192.168.0.10 -D /var/lib/postgresql/14/main \&#13;
-U replicador -P -R --wal-method=stream&#13;
&#13;
⚡ O parâmetro -R já cria o arquivo standby.signal e postgresql.auto.conf com primary_conninfo.&#13;
&#13;
	4.	Iniciar o serviço no standby:&#13;
&#13;
systemctl start postgresql&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 6. Verificação&#13;
&#13;
No primary:&#13;
&#13;
SELECT pid, client_addr, state, sync_state, write_lag, flush_lag, replay_lag&#13;
FROM pg_stat_replication;&#13;
&#13;
No standby:&#13;
&#13;
SELECT pg_is_in_recovery();&#13;
-- true = está como réplica&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 7. Failover Manual&#13;
	1.	Parar o primary (simulação de falha).&#13;
	2.	Promover standby:&#13;
&#13;
pg_ctl promote -D /var/lib/postgresql/14/main&#13;
&#13;
	3.	Agora ele é o novo primary.&#13;
	4.	Reconfigurar os outros standbys para apontar para ele.&#13;
&#13;
⸻&#13;
&#13;
🔹 8. Automação do Failover&#13;
&#13;
Ferramentas recomendadas:&#13;
	•	Patroni (mais usada em produção, integrada com Etcd/Consul/Zookeeper).&#13;
	•	repmgr (leve, apenas para replicação e failover).&#13;
	•	pg_auto_failover (solução oficial da comunidade).&#13;
&#13;
⸻&#13;
&#13;
🔹 9. Monitoramento&#13;
&#13;
Queries úteis:&#13;
	•	No primary:&#13;
&#13;
SELECT application_name, state, sync_state, sent_lsn, write_lsn, flush_lsn, replay_lsn&#13;
FROM pg_stat_replication;&#13;
&#13;
	•	No standby:&#13;
&#13;
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn(),&#13;
       pg_last_xact_replay_timestamp();&#13;
&#13;
Ferramentas externas:&#13;
	•	pg_stat_monitor&#13;
	•	Prometheus + Grafana&#13;
	•	Nagios/Zabbix plugins&#13;
&#13;
⸻&#13;
&#13;
🔹 10. Problemas Frequentes&#13;
&#13;
Problema	Sintoma	Solução&#13;
Standby não conecta	FATAL: no pg_hba.conf entry	Revisar pg_hba.conf e firewall&#13;
Standby atrasado	replay_lag alto	Aumentar wal_keep_size ou usar slots de replicação&#13;
WAL sumiu antes de standby aplicar	Erro de requested WAL not found	Ativar archive_mode e garantir espaço em disco&#13;
Split-brain	Dois primaries ativos	Usar ferramenta de failover automatizado (Patroni, repmgr)&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 11. Segurança&#13;
	•	Habilitar SSL entre primary e standby:&#13;
&#13;
ssl = on&#13;
ssl_cert_file = 'server.crt'&#13;
ssl_key_file  = 'server.key'&#13;
&#13;
	•	Usar senha forte ou autenticação por certificado.&#13;
	•	Isolar replicação em rede privada (VPN ou VLAN).&#13;
&#13;
⸻&#13;
&#13;
🔹 12. Boas Práticas&#13;
	1.	Sempre usar pg_basebackup em vez de copiar manualmente os diretórios.&#13;
	2.	Definir slots de replicação para evitar perda de WALs:&#13;
&#13;
SELECT * FROM pg_create_physical_replication_slot('slot1');&#13;
&#13;
	3.	Testar failover periodicamente.&#13;
	4.	Usar standbys para leitura pesada (reporting, BI).&#13;
	5.	Monitorar constantemente pg_stat_replication.&#13;
&#13;
⸻&#13;
&#13;
🔹 13. Exemplo de Arquitetura Completa (Produção)&#13;
&#13;
          +--&gt; Standby 1 (read replica)&#13;
          |&#13;
[ Primary ]----&gt; Standby 2 (failover)&#13;
          |&#13;
          +--&gt; Standby 3 (relatórios BI)&#13;
&#13;
Com Patroni + etcd, failover automático acontece em segundos.&#13;
&#13;
⸻&#13;
&#13;
Show, 😎&#13;
Vamos turbinar ainda mais o manual, adicionando informações avançadas, exemplos práticos com código, e até cenários reais de uso em produção. Assim você terá um guia definitivo de replicação física no PostgreSQL.&#13;
&#13;
⸻&#13;
&#13;
🐘 Manual Avançado de Replicação Física no PostgreSQL&#13;
&#13;
⸻&#13;
&#13;
🔹 1. Anatomia do Processo de Replicação Física&#13;
&#13;
O fluxo básico é este:&#13;
	1.	Primary escreve no WAL&#13;
	•	Cada transação gera registros no Write-Ahead Log.&#13;
	2.	WAL Sender envia&#13;
	•	Processo walsender transmite os logs ao standby.&#13;
	3.	WAL Receiver recebe&#13;
	•	Processo walreceiver grava os logs recebidos.&#13;
	4.	Apply (replay)&#13;
	•	O standby aplica os WALs na mesma ordem, garantindo consistência.&#13;
&#13;
📌 Isso garante que o standby seja uma cópia byte a byte do primary.&#13;
&#13;
⸻&#13;
&#13;
🔹 2. Modos de Replicação (Exemplos Reais)&#13;
&#13;
2.1. Replicação Assíncrona&#13;
&#13;
synchronous_standby_names = ''&#13;
&#13;
✅ Mais rápida, não trava o primary.&#13;
❌ Pode perder dados recentes se o primary falhar.&#13;
&#13;
2.2. Replicação Síncrona&#13;
&#13;
synchronous_standby_names = 'standby1'&#13;
&#13;
✅ Garantia de zero perda de dados (RPO=0).&#13;
❌ Commit só confirma após standby aplicar o WAL → aumenta latência.&#13;
&#13;
2.3. Replicação Quorum&#13;
&#13;
synchronous_standby_names = 'ANY 2 (standby1, standby2, standby3)'&#13;
&#13;
✅ Exige confirmação de 2 de 3 standbys.&#13;
✅ Balanceia performance + segurança.&#13;
&#13;
⸻&#13;
&#13;
🔹 3. Exemplo Completo de Configuração&#13;
&#13;
3.1. Primary (postgresql.conf)&#13;
&#13;
listen_addresses = '*'&#13;
wal_level = replica&#13;
max_wal_senders = 5&#13;
max_replication_slots = 5&#13;
wal_keep_size = 1024MB&#13;
archive_mode = on&#13;
archive_command = 'rsync -a %p /var/lib/postgresql/archive/%f'&#13;
&#13;
3.2. Primary (pg_hba.conf)&#13;
&#13;
# Permitir replicação a partir de 192.168.56.0/24&#13;
host replication replicador 192.168.56.0/24 md5&#13;
&#13;
3.3. Criar usuário&#13;
&#13;
CREATE ROLE replicador WITH REPLICATION LOGIN PASSWORD 'SenhaTop123';&#13;
&#13;
3.4. Standby (pg_basebackup)&#13;
&#13;
pg_basebackup -h 192.168.56.10 -D /var/lib/postgresql/14/main \&#13;
  -U replicador -P -R --slot=replica1 --wal-method=stream&#13;
&#13;
Isso cria automaticamente:&#13;
	•	standby.signal → deixa o banco em modo réplica&#13;
	•	postgresql.auto.conf com primary_conninfo&#13;
&#13;
3.5. Standby (postgresql.auto.conf)&#13;
&#13;
primary_conninfo = 'host=192.168.56.10 port=5432 user=replicador password=SenhaTop123'&#13;
primary_slot_name = 'replica1'&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 4. Testando e Monitorando&#13;
&#13;
4.1. No Primary&#13;
&#13;
SELECT application_name, state, sync_state, &#13;
       write_lsn, flush_lsn, replay_lsn, &#13;
       write_lag, flush_lag, replay_lag&#13;
FROM pg_stat_replication;&#13;
&#13;
🔍 Mostra status de cada standby conectado.&#13;
&#13;
4.2. No Standby&#13;
&#13;
SELECT pg_is_in_recovery(); -- true = em modo réplica&#13;
SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();&#13;
&#13;
🔍 Mostra até onde a réplica recebeu/aplicou os WALs.&#13;
&#13;
⸻&#13;
&#13;
🔹 5. Exemplo de Failover Manual&#13;
	1.	Simular falha do primary:&#13;
&#13;
systemctl stop postgresql&#13;
&#13;
	2.	Promover o standby:&#13;
&#13;
pg_ctl promote -D /var/lib/postgresql/14/main&#13;
&#13;
	3.	Confirmar:&#13;
&#13;
SELECT pg_is_in_recovery(); -- deve ser false&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 6. Slots de Replicação (Evita Perda de WAL)&#13;
&#13;
Criar slot no primary:&#13;
&#13;
SELECT * FROM pg_create_physical_replication_slot('slot_replica1');&#13;
&#13;
Ver slots ativos:&#13;
&#13;
SELECT * FROM pg_replication_slots;&#13;
&#13;
Excluir slot:&#13;
&#13;
SELECT pg_drop_replication_slot('slot_replica1');&#13;
&#13;
📌 Útil para garantir que WALs não sejam apagados antes do standby consumi-los.&#13;
&#13;
⸻&#13;
&#13;
🔹 7. Monitoramento Avançado&#13;
&#13;
7.1. Último tempo de transação aplicada no standby&#13;
&#13;
SELECT now() - pg_last_xact_replay_timestamp() AS replication_delay;&#13;
&#13;
7.2. Lag em bytes&#13;
&#13;
SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), &#13;
                       pg_last_wal_replay_lsn()) AS bytes_lag;&#13;
&#13;
&#13;
⸻&#13;
&#13;
🔹 8. Automação com Patroni (Exemplo)&#13;
&#13;
Configuração mínima patroni.yml:&#13;
&#13;
scope: postgres-cluster&#13;
name: node1&#13;
restapi:&#13;
  listen: 0.0.0.0:8008&#13;
etcd:&#13;
  host: 127.0.0.1:2379&#13;
postgresql:&#13;
  listen: 0.0.0.0:5432&#13;
  data_dir: /var/lib/postgresql/14/main&#13;
  authentication:&#13;
    replication:&#13;
      username: replicador&#13;
      password: Senha123&#13;
    superuser:&#13;
      username: postgres&#13;
      password: SuperSenha&#13;
&#13;
📌 Patroni + etcd permite failover automático em segundos.&#13;
&#13;
⸻&#13;
&#13;
🔹 9. Checklist de Produção&#13;
&#13;
✅ Primary com wal_level=replica&#13;
✅ Usuário dedicado à replicação&#13;
✅ pg_basebackup para iniciar standbys&#13;
✅ Slots de replicação configurados&#13;
✅ Monitoramento de lag (pg_stat_replication)&#13;
✅ Backup independente da replicação (não confundir réplica com backup!)&#13;
✅ Procedimento documentado de failover e switchover&#13;
&#13;
⸻&#13;
&#13;
🔹 10. Arquiteturas Reais&#13;
&#13;
Arquitetura Simples (HA)&#13;
&#13;
Primary (Escrita) &lt;--&gt; Standby (Leitura + Failover)&#13;
&#13;
Arquitetura Distribuída&#13;
&#13;
Primary (SP) --&gt; Standby RJ&#13;
              --&gt; Standby MG&#13;
              --&gt; Standby EUA&#13;
&#13;
Arquitetura Enterprise&#13;
&#13;
          +--&gt; Standby A (Reporting)&#13;
Primary --+--&gt; Standby B (Backup)&#13;
          +--&gt; Standby C (Failover Automático com Patroni)&#13;
&#13;
&#13;
⸻&#13;
&#13;
Perfeito! Entreguei um kit completo com scripts e exemplos prontos (Bash + SQL) para instalação, configuração, failover e monitoramento — além de amostras para automação com Patroni, repmgr e pg_auto_failover.&#13;
&#13;
📦 Download do pacote&#13;
&#13;
Baixar: pg_replica_kit_v1.zip&#13;
&#13;
Abaixo listados os arquivos &#13;
&#13;
⸻&#13;
&#13;
O que vem no kit&#13;
&#13;
Scripts (Bash)&#13;
	•	scripts/install.sh – instala PostgreSQL 15 e utilitários (Ubuntu/Debian e RHEL).&#13;
	•	scripts/primary-config.sh – configura o Primary (wal_level, wal_keep_size, archive_mode, pg_hba).&#13;
	•	scripts/standby-setup.sh – prepara o Standby com pg_basebackup, standby.signal e slot físico.&#13;
	•	scripts/failover.sh – promove um standby (failover manual) com pg_ctl promote.&#13;
&#13;
SQL&#13;
	•	sql/create_slot.sql – cria e lista slots de replicação física.&#13;
	•	sql/monitoring.sql – consultas úteis para status, lags e métricas.&#13;
&#13;
Configs &amp; Automação&#13;
	•	configs/ssl-snippet.conf – trecho para ativar SSL/TLS no PostgreSQL.&#13;
	•	automation/patroni/patroni-node1.yml – exemplo mínimo para cluster com Patroni.&#13;
	•	automation/repmgr/repmgr-cheatsheet.md – passos e comandos principais do repmgr.&#13;
	•	automation/pg_auto_failover/pg_auto_failover-cheatsheet.md – fluxo essencial do pg_auto_failover.&#13;
&#13;
README&#13;
	•	README.md – guia rápido de uso do pacote ponta a ponta.&#13;
&#13;
⸻&#13;
&#13;
Como executar (fluxo rápido)&#13;
	1.	Instalar PostgreSQL 15&#13;
&#13;
sudo ./scripts/install.sh&#13;
&#13;
	2.	Configurar o Primary&#13;
&#13;
sudo PG_VERSION=15 ./scripts/primary-config.sh&#13;
sudo -u postgres psql -c "CREATE ROLE replicador WITH REPLICATION LOGIN PASSWORD 'SenhaSegura';"&#13;
sudo -u postgres psql -f sql/create_slot.sql     # cria slot 'replica1'&#13;
&#13;
	3.	Configurar o Standby&#13;
&#13;
sudo PRIMARY_HOST=&lt;IP_DO_PRIMARY&gt; SLOT=replica1 PG_VERSION=15 ./scripts/standby-setup.sh&#13;
&#13;
	4.	Monitorar&#13;
&#13;
sudo -u postgres psql -f sql/monitoring.sql&#13;
&#13;
	5.	Failover manual (se precisar)&#13;
&#13;
sudo ./scripts/failover.sh&#13;
&#13;
Observação: os scripts estão prontos para Ubuntu/Debian por padrão (caminhos /etc/postgresql/15/main e /var/lib/postgresql/15/main). Em RHEL/Rocky, ajuste DATA_DIR/CONF_DIR nos scripts ou exporte via variável.&#13;
&#13;
⸻&#13;
&#13;
Recomendações de automação (escolha da ferramenta)&#13;
&#13;
Cenário	Ferramenta	Por quê&#13;
HA simples (1 primary + 1-2 standbys, time pequeno, rápida implantação)	pg_auto_failover	Setup muito simples, monitor próprio, failover automático sem muitas peças externas. Ótimo para começar.&#13;
Cluster distribuído (múltiplos sites, latências diversas, precisa de controle mais fino)	repmgr	Leve, tradicional, bom controle operacional (clone, register, promote, rejoin). Fácil de scriptar.&#13;
Missão crítica (SLO/SLAs apertados, zero-downtime planejado, governança forte)	Patroni	Orquestração robusta com etcd/Consul/ZooKeeper; integra pg_rewind, fencing, sincronismo/ quorum, health checks; padrão de fato em produção.&#13;
&#13;
Resumo prático&#13;
	•	Quer subir rápido e ter failover automático? → pg_auto_failover.&#13;
	•	Quer controle manual/sem muito acoplamento e scripts seus? → repmgr.&#13;
	•	Quer o máximo de robustez e governança em missão crítica? → Patroni.&#13;
&#13;
⸻&#13;
&#13;
Exemplos úteis (copie e cole)&#13;
&#13;
1) Ajustar replicação síncrona com quorum no Primary&#13;
&#13;
# postgresql.conf&#13;
synchronous_standby_names = 'ANY 1 (standby1, standby2)'&#13;
&#13;
2) Medir delay no Standby (tempo e bytes)&#13;
&#13;
-- Tempo&#13;
SELECT now() - pg_last_xact_replay_timestamp() AS replication_delay;&#13;
&#13;
-- Bytes&#13;
SELECT pg_wal_lsn_diff(pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn()) AS bytes_lag;&#13;
&#13;
3) Ver status das réplicas no Primary&#13;
&#13;
SELECT application_name, state, sync_state,&#13;
       sent_lsn, write_lsn, flush_lsn, replay_lsn,&#13;
       write_lag, flush_lag, replay_lag&#13;
FROM pg_stat_replication;&#13;
&#13;
4) Ativar SSL (trecho)&#13;
&#13;
# incluir em postgresql.conf&#13;
ssl = on&#13;
ssl_cert_file = '/etc/ssl/certs/server.crt'&#13;
ssl_key_file  = '/etc/ssl/private/server.key'&#13;
&#13;
--&#13;
Adriano José Boller&#13;
______________________________________________&#13;
Consultor e Representante Oficial da&#13;
PcSoft no Brasil&#13;
+55 (41) 99949 1800&#13;
adrianoboller@gmail.com&#13;
skype: adrianoboller&#13;
http://wxinformatica.com.br/</description><ttl>30</ttl><generator>WEBDEV</generator><language>pt_BR</language><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp</link><title>PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title><managingEditor>moderateur@pcsoft.fr (O moderador)</managingEditor><webMaster>webmaster@pcsoft.fr (O webmaster)</webMaster><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5326/read.awp</comments><pubDate>23 Sep 2025 05:00:27 Z</pubDate><description>#!/usr/bin/env bash&#13;
# Promove o standby a PRIMARY (failover manual)&#13;
# Uso: sudo PG_VERSION=15 ./failover.sh&#13;
set -euo pipefail…</description><guid isPermaLink="true">https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5326/read.awp</guid><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5326/read.awp</link><source url="https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp">PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</source><title>Re: PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5325/read.awp</comments><pubDate>23 Sep 2025 04:58:46 Z</pubDate><description>-- Cria um slot de replicação física (executar no PRIMARY)&#13;
SELECT * FROM pg_create_physical_replication_slot('replica1');&#13;
-- V…</description><guid isPermaLink="true">https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5325/read.awp</guid><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5325/read.awp</link><source url="https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp">PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</source><title>Re: PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5324/read.awp</comments><pubDate>23 Sep 2025 04:52:48 Z</pubDate><description># repmgr - Anotações Rápidas&#13;
&#13;
## Instalação&#13;
- Pacotes: repmgr, repmgr-common (depende da distro).&#13;
- Banco: criar DB `repmgr`…</description><guid isPermaLink="true">https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5324/read.awp</guid><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5324/read.awp</link><source url="https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp">PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</source><title>Re: PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5323/read.awp</comments><pubDate>23 Sep 2025 04:52:21 Z</pubDate><description># pg_auto_failover - Anotações Rápidas&#13;
&#13;
## Conceito&#13;
Orquestra automaticamente primary/standby e failover com um "monitor" (ke…</description><guid isPermaLink="true">https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5323/read.awp</guid><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5323/read.awp</link><source url="https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp">PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</source><title>Re: PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title></item><item><author>Boller</author><category>pcsoft.br.windev</category><comments>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5322/read.awp</comments><pubDate>23 Sep 2025 04:51:41 Z</pubDate><description># Kit de Replicação Física PostgreSQL (v1)&#13;
&#13;
Este pacote contém scripts e exemplos prontos para instalar, configurar, monitorar…</description><guid isPermaLink="true">https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5322/read.awp</guid><link>https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev-5322/read.awp</link><source url="https://forum.pcsoft.fr/pt-BR/pcsoft.br.windev/5321-postgresql-physical-replicationcomplete-guide-with-examples-with-windev/read.awp">PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</source><title>Re: PostgreSQL Physical Replication:Complete Guide with Examples With WX (Windev, Webdev e WindevMobile)</title></item></channel></rss>
