Histórico da Página
...
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; |
- 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 |
- 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 |
- 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' |
- Para que as alterações fiquem válidas, reinicie o Serviço do Postgresql.
...
- 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' |
- 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 |