Replicação de dados síncrona com Postgres

Neste artigo mostrarei como fazer uma replicação assíncrona com banco de dados Postgres na versão 9.5 em um Ubuntu 16.10.

[ Hits: 13.206 ]

Por: Vítor Soares Vian em 08/10/2017 | Blog: https://www.linkedin.com/in/vitor-soares-vian/


Introdução sobre replicação de dados



Replicação de dados é uma técnica muita conhecida em banco de dados, trata-se de uma espelhamento de dados e objetos de um banco de dados para outro, mantendo assim um espelho de uma para o outro, com isso temos como benefícios a tolerância à falhas, redundância de dados e se necessário um balanceamento de carga.

Nesse artigo iremos explorar a replicação do tipo Master-Slave onde teremos um servidor principal (master) e os demais que receberão a cópia desse servidor (slaves).

Vamos iniciar a configuração!

Configurando o servidor master

Edite o arquivo postgresql.conf, que na versão 9.5 encontra-se em: /etc/postgres/9.5/main/postgresql.conf

Edite a linha contendo o seguinte texto "listen_addresses", que caso esteja comentada apenas remova o '#' da frente da linha e adicione o caractere "*" no lugar do localhost. Este parâmetro indica a que IP o postgres está escutando, neste caso colocaremos para escutar qualquer IP.

A linha deverá ficar assim:

listen_addresses = '*'

Agora precisamos mudar o parâmetro "wal_level", trocar de minimal para hot_standby, para que sejam adicionadas informações de leitura de consultas no servidor de espera.

wal_level = hot_standby

Trocaremos também a variável "wal_keep_segments", que especifica a quantia de segmentos de arquivo de logs passados.

wal_keep_segments = 10

Trocaremos também a "max_wal_senders" para o número de replicadores que teremos, que no nosso exemplo será apenas 1.

max_wal_senders = 1

Colocaremos o hot_standby para on, edite a seguinte linha, trocando off por on.

hot_standby=on

Agora edite o arquivo pg_hba.conf, que na versão 9.5 encontra-se em: /etc/postgres/9.5/main/pg_hba.conf

No final do arquivo adicione a seguinte linha:

host replication replicador x.x.x.x trust

Onde:
  • replicador = nome de usuário que será criado
  • x.x.x.x = ip slave
  • trust = sem pedir senha

Agora reinicie o postgresql:

# service postgresql restart

    Próxima página

Páginas do artigo
   1. Introdução sobre replicação de dados
   2. Criando usuário de replicação
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

PostgreSQL no Slackware - Importando e Exportando arquivos TXT e CSV

Programando PostgreSQL + PHP

Autenticação no PostgreSQL - com exemplos

PostgreSQL 9.4 - O conceito de Role

PgBouncer - Instalação no Debian 6.0 Squeeze

  
Comentários
[1] Comentário enviado por hrcerq em 08/10/2017 - 16:33h

Excelente tutorial. Muito obrigado.

---

Atenciosamente,
Hugo Cerqueira

[2] Comentário enviado por danniel-lara em 09/10/2017 - 16:23h

Muito bom mesmo , e simples de fazer
Parabéns

[3] Comentário enviado por oliveiraelemos em 19/03/2018 - 09:54h

Bom dia,

Como faço para replicar uma base específica e não o servidor todo?

abraços


[4] Comentário enviado por andremferreira em 17/11/2018 - 10:20h

Em resposta a pergunta anterior.
Prezado Oliveira, acredito que seja mais fácil dividir a pasta "/data" em data-1 e data-2 e configurar a replicação onde achar necessário atribuindo na configuração no "postgresql.conf" em portas destintas (data-1: 5432 | data-2: 5433) e para finalizar será necessário criar um novo novo serviço de inicialização para cada pasta data, modificando o arquivo: /etc/rc.d/init.d/postgresql-xx nas linhas (88-90)

PGPORT=PPPP
PGDATA=/var/lib/pgsql/XX/data-Y
PGLOG=/var/lib/pgsql/XX/pgstartup-Y.log

• Y - número da sua pasta data.
• P - porta de conexão
• X - versão postgres

[5] Comentário enviado por C4rl em 29/11/2018 - 06:51h

Muito bom o seu tutorial, é simples, bem explicado e direto ao ponto. Tenho uma dúvida e um pedido de correção, vou começar pelo segundo.

O título está incorreto e deveria ser "Replicação de dados assíncrona com Postgres", pois até onde sei, posso estar engando, não há suporte para replicação síncrona neste SGBD, de qualquer modo o tutorial deixa claro que trata-se de replicação assíncrona.

Quanto a dúvida, qual a diferença entre usar o rsync - que vejo em muitos artigos pela web - do pg_basebackup?

Um abraço


Contribuir com comentário