Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Arquivo de configuração: vim /data01/pgsql/15/data/postgresql.conf


Bloco de código
wal_level: replica

...


hot_standby: on

...


max_wal_senders: 10

...


max_replication_slots: 10

...


wal_level: replica

...


archive_command: 'bin/true'

...


shared_preload_libraries: 'repmgr'

...


wal_log_hints: on


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


Bloco de código
ALTER SYSTEM SET max_wal_senders = 10;

...


ALTER SYSTEM SET max_replication_slots= 10;

...


ALTER SYSTEM SET wal_level= replica;

...


ALTER SYSTEM SET hot_standby= on;  

...


ALTER SYSTEM SET archive_command= 'bin/true';

...


ALTER SYSTEM SET shared_preload_libraries= 'repmgr';

...


ALTER SYSTEM SET wal_log_hints= on;


 

  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 "repmgr".

No Sistema Operacional:

su - postgres

createuser -s repmgr

Verificar métodos de autenticação Postgresql.

...

Criação Database:

No Sistema Operacional: 


Bloco de código
su - postgres

...


createdb repmgr -O repmgr


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

Arquivo de configuração: /data01/pgsql/15/data/pg_hba.conf


Bloco de código
local all all trust

...


host all all 127.0.0.1/32 trust

...


host all all ::1/128 trust

...



#replication

...


local replication all trust

...


host replication all 127.0.0.1/32 trust

...


host replication all ::1/128 trust

...


host replication repuser 10.171.214.0/24 md5

...



#repmgr

...


local repmgr repmgr trust

...


host repmgr repmgr 127.0.0.1/32 trust

...


host repmgr repmgr 10.171.214.0/24 trust


  1. Crie o arquivo de Configuração repmgr. 

Com usuário postgres criamos o arquivo no seguinte path: /data01/pgsql/15/repmgr.conf e alteramos com editor de textos vim:

Sistema Operacional


Bloco de código
# repmgr.conf

...


node_id=1

...


node_name=primary

...


conninfo='host=10.171.214.56 dbname=repmgr user=repmgr connect_timeout=2'

...


data_directory='/data01/pgsql/15/data/'

...


failover=automatic

...


promote_command='/usr/pgsql-15/bin/repmgr standby promote -f /data01/pgsql/15/repmgr.conf --log-to-file'

...


follow_command='/usr/pgsql-15/bin/repmgr standby follow -f /data01/pgsql/15/repmgr.conf --log-to-file --upstream-node-id=%n'

...


pg_bindir='/usr/pgsql-15/bin/'

...


log_file='/data01/pgsql/15/repmgr.log'


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

...

  1. Registrar o Cluster primário no Repmgr:

Sistema Operacional


Bloco de código
su - postgres

...


cd /usr/pgsql-15/bin

...


./repmgr -f /data01/pgsql/15/repmgr.conf primary register

...


### Consultar a inclusão no repmgr: 

...


./repmgr -f /data01/pgsql/15/repmgr.conf cluster show

...


./repmgr -f /data01/pgsql/15/repmgr.conf cluster show


Resultado da consulta:

Servidor Secundário

...

Com usuário postgres criamos o arquivo no seguinte path: /data01/pgsql/15/repmgr.conf e alteramos com editor de textos vim:

Sistema Operacional


Bloco de código
# repmgr.conf - Standby

...


node_id=2

...


node_name=standby

...


conninfo='host=10.171.214.57 dbname=repmgr user=repmgr connect_timeout=2'

...


data_directory='/data01/pgsql/15/data/'

...


failover=automatic

...


promote_command='/usr/pgsql-15/bin/repmgr standby promote -f /data01/pgsql/15/repmgr.conf --log-to-file'

...


follow_command='/usr/pgsql-15/bin/repmgr standby follow -f /data01/pgsql/15/repmgr.conf --log-to-file --upstream-node-id=%n'

...


pg_bindir='/usr/pgsql-15/bin/'

...


log_file='/data01/pgsql/15/repmgr.log'


  1. Realize o clone do primário:

Sistema Operacional


Bloco de código
su - postgres 

...


cd /usr/pgsql-15/bin

...


## Realizar o clone dos

...

##mensagem: connection to server at "10.171.214.56", port 5432 failed: fe_sendauth: no password supplied

 Dados
./repmgr -h 10.171.214.56 -U repmgr -f /data01/pgsql/15/repmgr.conf standby clone 

...


## Inicie o postgres

...


systemctl start postgresql-15.service

...


## Registre o Servidor Standby no Cluster

...


su - postgres

...


cd /usr/pgsql-15/bin

...


./repmgr -h 10.171.214.56 -U repmgr -f /data01/pgsql/15/repmgr.conf standby register

...


## Consultar a inclusão no repmgr: 

...


su - postgres

...


cd /usr/pgsql-15/bin

...


./repmgr -f /data01/pgsql/15/repmgr.conf cluster show


Resultado da Consulta:

Testando a Réplica

...

Acesse o postgres no servidor primário, rodamos o seguinte comando para criar uma tabela de exemplo e popular: create table

 

Bloco de código
create table repmgr(r_e_c_n_o_ int, d_e_l_e_t_ bpchar (20));

END;

...



Bloco de código
DO $$

...



DECLARE

...



BEGIN

...



FOR i IN 1..10000 LOOP

...



INSERT INTO repmgr(r_e_c_n_o_ , d_e_l_e_t_) VALUES (random() * 10000 + 1,'Campo' || i );

...



END LOOP;

...



END;

...



$$;


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

...

Para consultar o status da replicação verifique a seguinte view no servidor primário:


Bloco de código
#para tabular 

...



\x

...



##query de consulta:

...



select * from pg_stat_replication;


Resultado:

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

...

Vamos verificar onde esta o log.


Bloco de código
cd /usr/pgsql-15/bin

...



./repmgrd -f /data01/pgsql/15/repmgr.conf

...



[2023-12-21 00:22:02] [NOTICE] redirecting logging output to "/data01/pgsql/15/repmgr.log"

...



tail -f /data01/pgsql/15/repmgr.log


Podemos notar que no momento em que o servidor primário parou de responder, após algumas verificações o repmgr virá para a réplica e transforma a réplica em servidor principal.

A partir desse momento é necessário recriar a conexão com o servidor primário, porque o mesmo ficou off-line:


Bloco de código
#validar o resultado do comando com --dry-run

...



cd /usr/pgsql-15/bin

...



./repmgr node rejoin -f /data01/pgsql/15/repmgr.conf -d 'host=10.171.214.57 user=repmgr dbname=repmgr' --force-rewind --config-files=postgresql.conf,postgresql.local.conf --verbose --dry-run

...



#remover o primário antigo e transformar em secundário

...



./repmgr node rejoin -f /data01/pgsql/15/repmgr.conf -d 'host=10.171.214.57 user=repmgr dbname=repmgr' --force-rewind --config-files=postgresql.conf,postgresql.local.conf --verbose

...



## Agora o servidor réplica se torna do primário do Cluster, e o antigo Primario virá a réplica, recebendo agora os dados, se tornando o servidor réplica.

...



cd /usr/pgsql-15/bin

...



./repmgr -f /data01/pgsql/15/repmgr.conf cluster show