Replicação de banco PostgreSQL entre datacenters: streaming, logical e síncrona | Tutoriais Toda Solução

9 min de leitura Banco de Dados

Introdução

A replicação de bancos de dados PostgreSQL entre datacenters é uma estratégia crucial para garantir alta disponibilidade, recuperação de desastres e distribuição de carga. Neste tutorial, abordaremos três modalidades de replicação: streaming, logical e síncrona, cada uma com suas características e casos de uso específicos.

A replicação streaming permite a cópia em tempo real dos dados de um servidor primário para um ou mais servidores secundários, garantindo que as alterações sejam refletidas rapidamente. A replicação logical, por sua vez, possibilita a replicação de dados em nível de tabela, permitindo maior flexibilidade na escolha das informações a serem replicadas. Já a replicação síncrona assegura que as transações sejam confirmadas em todos os servidores antes de serem consideradas concluídas, oferecendo um nível mais elevado de consistência.

Ao longo deste tutorial, forneceremos instruções passo-a-passo para configurar cada tipo de replicação, garantindo que você possa implementar a solução que melhor atende às suas necessidades. Vamos começar!

Pré-requisitos

Antes de iniciar a configuração da replicação de bancos PostgreSQL entre datacenters, é importante garantir que você atenda aos seguintes pré-requisitos:

  1. Ambientes PostgreSQL: Certifique-se de que o PostgreSQL esteja instalado e em execução nas duas instâncias (primária e secundária). As versões devem ser compatíveis, preferencialmente a mesma versão.
  2. Conexão de Rede: Verifique se há conectividade de rede entre os datacenters. O firewall deve permitir a comunicação nas portas padrão do PostgreSQL (5432).
  3. Configurações de Segurança: Assegure-se de que as configurações de pg_hba.conf e postgresql.conf estejam corretamente ajustadas para permitir conexões remotas e a replicação.
  4. Autenticação: Configure a autenticação apropriada (por exemplo, usando senhas ou certificados) para permitir que o servidor secundário se conecte ao servidor primário.
  5. Backup: Realize um backup completo do banco de dados primário antes de iniciar a replicação. Isso garantirá que você tenha uma cópia de segurança em caso de falhas.

Após garantir que todos esses pré-requisitos estão atendidos, você estará pronto para prosseguir com a configuração da replicação.

Configuração Streaming

Para configurar a replicação streaming entre datacenters, siga os passos abaixo:

  1. Configurar o servidor primário:
    sudo nano /etc/postgresql//main/postgresql.conf
    wal_level = replica
    max_wal_senders = 5
    wal_keep_segments = 64
    listen_addresses = '*'
    • Edite o arquivo postgresql.conf no servidor primário:
    • Ative as seguintes configurações:
  2. Configurar o arquivo pg_hba.conf:
    host    replication     all             /32         md5
    • Adicione a linha abaixo para permitir conexões do servidor secundário:
    • Salve e saia do editor.
  3. Reiniciar o PostgreSQL:
    sudo systemctl restart postgresql
  4. Configurar o servidor secundário:
    pg_basebackup -h  -D /var/lib/postgresql//main -U  -P -R
    sudo nano /var/lib/postgresql//main/recovery.conf
    standby_mode = 'on'
    primary_conninfo = 'host= port=5432 user= password='
    trigger_file = '/tmp/MY_TRIGGER_FILE'
    • Crie um backup do servidor primário:
    • Edite o arquivo recovery.conf no servidor secundário:
    • Adicione as seguintes linhas:
  5. Iniciar o servidor secundário:
    sudo systemctl start postgresql

Após concluir esses passos, a replicação streaming estará configurada entre os datacenters.

Configuração Logical

A replicação lógica permite replicar dados de forma mais granular, possibilitando a replicação de tabelas específicas. Para configurar a replicação lógica entre datacenters, siga os passos abaixo:

wal_level = logical
sudo systemctl restart postgresql
CREATE PUBLICATION minha_publicacao FOR TABLE minha_tabela;
CREATE SUBSCRIPTION minha_assinatura CONNECTION 'host=IP_DO_SERVIDOR_PRIMARIO dbname=NOME_DO_BANCO user=USUARIO password=SENHA' PUBLICATION minha_publicacao;
SELECT * FROM pg_stat_subscription;
  1. Ative o módulo de replicação lógica no PostgreSQL. Edite o arquivo postgresql.conf no servidor primário:
  2. Reinicie o serviço do PostgreSQL para aplicar as mudanças:
  3. Crie uma publicação no servidor primário para as tabelas que deseja replicar:
  4. No servidor secundário, crie uma assinatura para a publicação criada:
  5. Verifique se a assinatura foi criada com sucesso:

Nota: A replicação lógica pode ter um impacto na performance do servidor primário, portanto monitore o desempenho após a configuração.

Configuração Síncrona

A replicação síncrona no PostgreSQL garante que as transações sejam confirmadas em todos os nós antes de serem finalizadas. Para configurar a replicação síncrona, siga os passos abaixo:

sudo nano /etc/postgresql//main/postgresql.conf
sudo nano /etc/postgresql//main/pg_hba.conf
sudo systemctl restart postgresql
sudo nano /etc/postgresql//main/postgresql.conf
sudo systemctl restart postgresql
  1. Edite o arquivo postgresql.conf no servidor primário:
    synchronous_commit = on
    synchronous_standby_names = 'nome_do_replica'
    • Ative a replicação síncrona ajustando as seguintes configurações:
  2. Edite o arquivo pg_hba.conf para permitir a replicação:
    host    replication     all             IP_do_replica/32          md5
    • Adicione a linha abaixo, substituindo IP_do_replica pelo IP do servidor secundário:
  3. Reinicie o serviço PostgreSQL para aplicar as mudanças:
  4. No servidor secundário, edite o arquivo postgresql.conf para habilitar a replicação:
    hot_standby = on
    • Adicione a seguinte configuração:
  5. Reinicie o serviço PostgreSQL no secundário:

Com isso, a replicação síncrona entre os datacenters estará configurada.

Verificação

Após configurar a replicação do PostgreSQL, é fundamental verificar se tudo está funcionando conforme o esperado. Siga os passos abaixo para validar cada tipo de replicação.

  1. Verificação da Replicação Streaming:
    SELECT * FROM pg_stat_replication;
    • Conecte-se ao servidor primário e execute o comando:
    • Verifique se há entradas correspondentes aos servidores secundários e se o estado está como "streaming".
  2. Verificação da Replicação Logical:
    SELECT * FROM pg_subscription;
    • Conecte-se ao servidor secundário e execute:
    • Confirme se as assinaturas estão ativas e os dados estão sendo replicados corretamente.
  3. Verificação da Replicação Síncrona:
    SELECT * FROM pg_stat_replication;
    • No servidor primário, execute:
    • Cheque se a coluna sync_state indica "sync" para os servidores que devem ser síncronos.

Se algum dos comandos retornar resultados inesperados, revise as configurações e logs do PostgreSQL para identificar possíveis problemas.

Conclusão

A replicação de bancos de dados PostgreSQL entre datacenters é uma estratégia poderosa para garantir a alta disponibilidade e a integridade dos dados. Ao longo deste tutorial, abordamos as três modalidades principais de replicação: streaming, logical e síncrona. Cada uma delas possui suas particularidades e pode ser escolhida com base nas necessidades específicas do seu ambiente.

É fundamental realizar testes periódicos para garantir que a replicação está funcionando conforme esperado e para evitar surpresas em situações de falha. Além disso, a manutenção e monitoramento contínuos são essenciais para assegurar a performance e a segurança dos dados replicados.

Recomenda-se que você:

  1. Documente sua configuração e procedimentos de recuperação.
  2. Implemente um sistema de monitoramento para verificar a saúde da replicação.
  3. Considere as implicações de latência e largura de banda ao escolher a modalidade de replicação.

Com uma configuração adequada e um bom planejamento, sua infraestrutura de banco de dados estará preparada para suportar altas demandas e garantir a continuidade dos seus serviços.

Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000
WhatsApp