Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Nota
titlePré-requisitos

Para prosseguir

...

com a

...

A instalação do PostgreSQL foi alterada do caminho default, para unidade /data01.

O arquivo postgresql.conf contém as configurações default ou alteradas do postgresql.

O arquivo postgresql.auto.conf contém as alterações realizadas pelo comando 'ALTER SYSTEM SET', ele é lido ao iniciar o postgresql e substitui as configurações realizadas no arquivo postgresql.conf.

Instalação do Postgresql

/data01/pgsql/15/data

Arquivos de Dados:

/data02

Arquivos de Indices:

/data03

Servidor Primário

  1.  Alterar os seguintes parâmetros diretamente no postgresql.conf ou por linha de comando:

Arquivo de configuração: postgresql.conf

Bloco de código
wal_level: replica
hot_standby: on

Ou diretamente pelo banco de dados, conectado ao psql ou ao pgAdmin:

configuração, assegure-se que:

  • Você possui um servidor principal e um servidor secundário com PostgreSQL instalados;
  • Os servidores de banco de dados possuem conexão estabelecida entre eles;
  • Você possui um usuário designado no servidor principal responsável pela réplica;
  • Não há usuários conectados na base principal.

Como fazer?

No servidor primário

Altere os seguintes parâmetros diretamente no banco de dados, ou no arquivo de configuração postgresql.conf:

Bloco de código
languagesql
titlePelo pgAdmin, psql ou outro conector com o banco de dados

...

ALTER SYSTEM SET wal_level = replica;
ALTER SYSTEM SET hot_standby = on;

 

Nota: Antes de realizar estas alterações, criei uma tabela chamada tabelateste e a populei, conforme os scripts:

CREATE TABLE tabelaTeste (

id serial primary key,

cliente char(20),

dataNasc date,

telefone integer);

DO $$

DECLARE

BEGIN

FOR i IN 1..100 LOOP

INSERT INTO tabelaTeste (cliente,dataNasc,telefone) VALUES ('Cliente ' || i,NOW() - '1 day'::INTERVAL * (RANDOM()::int * 100),random_between(111111111,999999999));

END LOOP;

END;

$$;

 

  1. Realizar a criação do usuário para replicação. Ao criar o usuário para replicação, você pode escolher o nome desejado. Nós o designamos como "repuser".

No Sistema Operacional com a ferramenta psql:

su - postgres

createuser -s repuser -P

Irá solicitar a senha para o usuário e confirmação da senha, e por último a senha do usuário postgres do banco de dados se o método de autenticação exigir senha.

Verificar métodos de autenticação Postgresql.

 

  1. Adicionar o range de IPs com liberação e usuário no arquivo pg_hba.conf:

Como encontrar o arquivo?

No psql, comando 

SHOW hba_file;

Bloco de código
titleArquivo postgresql.conf
wal_level: replica
hot_standby: on

Após isso, dê a permissão para o usuário designado para replicação no arquivo pg_hba.conf. Troque "<usuario-de-replicacao>" pelo usuário que irá fazer a replicação, "<range-de-ip>" pela faixa de IPs ou pelo IP do servidor secundário, e <metodo-de-autenticacao>" pelo método de autenticação que será utilizado pelo usuário de replicação.

Bloco de código
title
pg_hba.conf
host

...

 replication <usuario-de-replicacao> <range-de-ip> <metodo-de-autenticacao>

Após as alterações, reinicie o servidor do banco de dados:

Bloco de código
sudo systemctl restart 

...

No exemplo fornecido, o endereço IP do servidor réplica é 10.171.214.57. Ao liberarmos o acesso para a faixa 10.171.214.1/24, permitimos abertamente o acesso a qualquer endereço IP dentro desse intervalo.

  1. Para que as alterações fiquem válidas, reinicie o Serviço do Postgresql.

Sistema Operacional

...

postgresql-15.service

Servidor Secundário

É crucial lembrar que o comando a seguir apaga 'tudo no path indicado'. Certifique-se de estar no path correto, pois o comando não solicitará nenhuma confirmação.

 

  1. Para o banco de Dados Secundário:

No servidor secundário

Antes de iniciar, pare o serviço de banco de dados:

Bloco de código
sudo systemctl stop 

...

postgresql-15.service

 

Com o usuário postgres,

...

execute o comando a seguir. Assegure-se de trocar cada item pelo correspondente em sua base:

...

  • <host-

...

rm -rf /data01/*

rm -rf /data02/*

rm -rf /data03/*

  • Os servidores precisam ter comunicação estabelecida. Caso contrário, você irá se deparar com o erro: “No route to host” 
  1. Rodar o comando de backup:

su - postgres

pg_basebackup -h 10.171.214.56 -U repuser -p 5432 -D /data01/pgsql/15/data -Fp -Xs -P -R -C -S pgstandby

Documentação sobre o comando: https://www.postgresql.org/docs/current/app-pgbasebackup.html 

# irá solicitar o password

Password: 

# segue o resultado em nosso banco que possui somente um database vazio criado.

31308/31308 kB (100%), 3/3 tablespaces

  1. Para que as alterações fiquem válidas, reinicie o Serviço do Postgresql.

Sistema Operacional

sudo systemctl restart postgresql-15.service

  1. Após realizar o backup. Podemos ver os arquivos exatamente iguais ao server primário.

Comando ls -l no servidor Primário:

Comando ls -l no servidor Secundário:

Observa-se que o comando replicou com sucesso o caminho das configurações do PostgreSQL e do banco de dados 'handson_lnx', previamente criado no servidor primário.

Também é perceptível que o arquivo postgresql.auto.conf contém linhas adicionais com as configurações do servidor Standby:

primary_conninfo = 'user=repuser password=''R3p455i#1'' channel_binding=prefer host=10.171.214.56 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'pgstandby'

Testando a Réplica

Acessar o postgres no servidor primário, rodamos o seguinte comando:

select slot_name, slot_type, active from pg_replication_slots;

O slot que criamos no servidor secundário é localizado no Slot_name, ele é do tipo fisico e esta ativo.

Vamos criar uma tabela de exemplo e popular:

Ao consultar essa tabela no servidor secundário temos o seguinte resultado:

);

DO $$

DECLARE

BEGIN

FOR i IN 1..1000000 LOOP

INSERT INTO replica (recno, delet) VALUES (random() * 10000 + 1,'Campo' || i, );

END LOOP;

END;

$$;

  • servidor-primario>: Endereço IP ou hostname do servidor primário
  • <usuario-de-replicacao>: Usuário configurado no servidor primário responsável pela replicação
  • <porta>: Porta utilizada pelo banco de dados. A porta padrão é 5432
  • <diretorio-postgres>: Diretório de destino para a escrita do output

Em caso de dúvidas, leia mais sobre o comando neste link.

Bloco de código
su - postgres
pg_basebackup -h <host-servidor-primario> -U <usuario-de-replicacao> -p <porta> -D <diretorio-postgres> -Fp -Xs -P -R -C -S pgstandby

Após as alterações, inicie o serviço de banco de dados.

Bloco de código
sudo systemctl start postgresql-15.service

...

O servidor secundário é usado somente para leitura. Não pode realizar a inclusão ou deleção de objetos no banco de dados.