Laboratório em bancada
Laboratório: Replicação Assíncrona de PostgreSQL com Backup Automatizado via pgBackRest
Você terá um cluster PostgreSQL com replicação assíncrona e backup automatizado via pgBackRest, usando duas máquinas virtuais Linux. Tempo estimado: 120 minutos.

- Duração estimada
- 120 min
- Passos
- 13
- Validações
- 4
Este laboratório ensina a implementar replicação assíncrona entre dois servidores PostgreSQL, com configuração de backup automatizado usando pgBackRest. Você vai entender na prática como garantir alta disponibilidade e recuperação de dados em ambientes reais, baseando-se apenas em software livre e documentação oficial.
Topologia
Duas VMs Linux em rede privada: uma como servidor principal (Primary, 192.168.56.10), outra como réplica (Replica, 192.168.56.11). pgBackRest instalado no Primary para backups locais. Replica conecta-se ao Primary via streaming replication.
+-------------------+ +-------------------+
| Primary (PG) |<------->| Replica (PG) |
| 192.168.56.10 | | 192.168.56.11 |
| pgBackRest local | | |
+-------------------+ +-------------------+
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Linux (Primary) | 1 vCPU, 2 GB RAM, 10 GB disco, Ubuntu 22.04 ou CentOS 8 |
| VM Linux (Replica) | 1 vCPU, 2 GB RAM, 10 GB disco, Ubuntu 22.04 ou CentOS 8 |
| PostgreSQL | PostgreSQL License · 15.x |
| pgBackRest | MIT · a versão estável atual |
Roteiro
- Preparar as VMs
Garanta que ambas as VMs estejam na mesma rede privada e possam se pingar mutuamente.
ping 192.168.56.11 ping 192.168.56.10O que você deve ver: Respostas de ping entre as máquinas.
- Instalar PostgreSQL nas duas VMs
Use o repositório oficial para garantir versões recentes e suporte a recursos de replicação.
sudo apt update && sudo apt install postgresql-15 postgresql-client-15 -yO que você deve ver: PostgreSQL instalado sem erros.
- Configurar o Primary para replicação
Ajuste o postgresql.conf para permitir conexões de réplica e definir parâmetros de WAL.
sudo -u postgres nano /etc/postgresql/15/main/postgresql.confO que você deve ver: Parâmetros como wal_level=replica, max_wal_senders=5, archive_mode=on, archive_command configurados.
- Permitir acesso da Replica no Primary
Edite o pg_hba.conf para permitir autenticação da Replica via endereço IP.
sudo -u postgres nano /etc/postgresql/15/main/pg_hba.confO que você deve ver: Linha adicionada: host replication replicator 192.168.56.11/32 md5
- Criar usuário de replicação
Crie o usuário 'replicator' com permissão de replicação.
sudo -u postgres psql -c "CREATE ROLE replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'senhaforte';"O que você deve ver: CREATE ROLE
- Reiniciar o PostgreSQL no Primary
Aplique as alterações de configuração.
sudo systemctl restart postgresqlO que você deve ver: Serviço reiniciado sem erros.
- Instalar pgBackRest no Primary
pgBackRest faz backups consistentes e é recomendado pela comunidade.
sudo apt install pgbackrest -yO que você deve ver: pgBackRest instalado.
- Configurar pgBackRest para backup local
Edite o arquivo de configuração para definir o repositório de backup.
sudo nano /etc/pgbackrest/pgbackrest.confO que você deve ver: Arquivo com seção [demo] e diretório de backup definido.
- Realizar backup inicial com pgBackRest
Garante ponto consistente para a réplica.
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info backupO que você deve ver: Backup concluído sem erros.
- Parar PostgreSQL na Replica
Necessário para restaurar o backup inicial.
sudo systemctl stop postgresqlO que você deve ver: PostgreSQL parado.
- Restaurar backup na Replica
Copia o backup do Primary para a Replica e restaura usando pgBackRest.
sudo -u postgres pgbackrest --stanza=demo --delta restoreO que você deve ver: Restaurado sem erros.
- Configurar recovery.conf na Replica
Define que a Replica deve seguir o Primary via streaming replication.
sudo nano /var/lib/postgresql/15/main/postgresql.auto.confO que você deve ver: primary_conninfo com user=replicator, password e host do Primary.
- Iniciar PostgreSQL na Replica
Replica deve iniciar em modo standby.
sudo systemctl start postgresqlO que você deve ver: Serviço iniciado sem erros.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Verificar status da replicação no Primary | sudo -u postgres psql -c "SELECT client_addr, state FROM pg_stat_replication;" | Replica aparece com state=streaming. |
| Criar tabela no Primary e verificar na Replica | sudo -u postgres psql -c "CREATE TABLE test_replica(id int);" | Tabela aparece na Replica após alguns segundos. |
| Rodar backup incremental com pgBackRest | sudo -u postgres pgbackrest --stanza=demo --type=incr backup | Backup incremental concluído sem erro. |
| Verificar logs de restauração na Replica | sudo tail -20 /var/log/postgresql/postgresql-15-main.log | Mensagens de recuperação e conexão com Primary. |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Replica não aparece em pg_stat_replication | Configuração de pg_hba.conf ou primary_conninfo incorreta | Revise IP, usuário e senha em ambos os arquivos. |
| Erro de autenticação na Replica | Senha do usuário replicator incorreta | Altere a senha e atualize em primary_conninfo. |
| Backup pgBackRest falha com permissão | Permissões do diretório de backup | Ajuste permissões para usuário postgres. |
| Replica não inicia após restore | primary_conninfo ausente ou errado | Edite o arquivo de configuração e reinicie o serviço. |
| Streaming replication desconecta | Firewall bloqueando porta 5432 | Libere a porta TCP 5432 entre as VMs. |
Segurança e hardening
- Use senhas fortes para o usuário de replicação
- Restrinja o acesso ao diretório de backup ao usuário postgres
- Permita acesso de replicação apenas pelo IP da Replica
- Habilite autenticação md5 no pg_hba.conf
- Considere criptografia de disco para o diretório de backup
