Histórico da Página
Nota | ||
---|---|---|
| ||
Para prosseguir com a configuração, assegure-se que:
|
Repmgr é uma ferramenta de código aberto para gerenciamento de replicação PostgreSQL. Ele fornece um conjunto abrangente de recursos para gerenciamento de clusters de replicação, incluindo:
- Monitoramento: RepManager pode monitorar a saúde do seu cluster de replicação e alertá-lo sobre quaisquer problemas.
- Gerenciamento: RepManager pode ser usado para criar, iniciar, parar e promover secundários de replicação.
- Failover: RepManager pode ser usado para failover para um novo primário em caso de falha do primário.
RepManager é uma ferramenta poderosa que pode tornar muito mais fácil gerenciar a replicação PostgreSQL. É uma escolha popular para organizações que usam PostgreSQL para aplicativos críticos.
Aqui estão alguns dos benefícios do uso do RepManager:
- Redução da complexidade: simplifica o gerenciamento da replicação PostgreSQL, tornando mais fácil para os administradores gerenciar clusters de replicação complexos.
- Melhoria da confiabilidade: ajuda a melhorar a confiabilidade do seu cluster de replicação PostgreSQL fornecendo recursos de monitoramento e failover, é usada para criar, iniciar, parar e promover secundários de replicação.
- Redução do tempo de inatividade: RepManager pode ajudar a reduzir o tempo de inatividade automatizando o processo de failover.
...
Como fazer?
Inicie com a configuração assíncrona da replicação do Postgresql, conforme documentação
...
Vamos manter o mesmo modelo de exemplo utilizado para replica Assincrona, porém, agora com apoio da ferramenta RepMgr.
Segue estrutura usada no exemplo:
Instalação do Postgresql
/data01/pgsql/15/data
Arquivos de Dados:
/data02
Arquivos de Indices:
/data03
Servidor Primário
Realize a instalação do
...
repmgr pelo sistema operacional:
Bloco de código |
---|
sudo dnf -y install repmgr_15.x86_64 |
...
No servidor primário
...
Altere os seguintes parâmetros diretamente no
...
Arquivo de configuração: vim /data01/pgsql/15/data/postgresql.conf
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:
...
banco de dados, ou no arquivo de configuração postgresql.conf:
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; |
Bloco de código |
---|
- 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.
O usuário para a replicação foi inicialmente configurado como superusuário, conforme indicado na documentação oficial do repmgr. No entanto, é possível optar por conceder permissões específicas de replicações, acompanhadas de algumas restrições.
Criação Database:
No Sistema Operacional:
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
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
...
| ||
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 |
Crie um usuário para a replicação. Este usuário deve ter as permissões listadas no documento de referência (em inglês) ou estar configurado como superusuário.
Nota | ||
---|---|---|
| ||
Verifique com sua equipe de segurança a melhor configuração para o usuário do repmgr. Algumas funcionalidades do repmgr precisarão ser executadas com a flag -S / --superuser caso o usuário designado não possua a permissão de superusuário. |
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 |
---|
#replication host replication all ::1/128 trust host replication <usuario-de-replicacao> <range-de-ip> <metodo-de-autenticacao> #repmgr local repmgr <usuario-de-replicacao> <metodo-de-autenticacao> host repmgr <usuario-de-replicacao> 127.0.0.1/32 |
...
<metodo-de-autenticacao>
host repmgr <usuario-de-replicacao> <range-de-ip> <metodo-de-autenticacao> |
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
# repmgr.conf
conf no diretório de instalação do PostgreSQL.
Bloco de código |
---|
# repmgr.conf node_id=1 |
...
node_name=primary |
...
conninfo='host= |
...
<ip-servidor-primario> dbname=<banco-de-dados> user=<usuario-de-replicacao> connect_timeout=2' |
...
data_directory=' |
...
<diretorio-de-dados-postgres>' failover=automatic |
...
promote_command='/usr/pgsql-15/bin/repmgr standby promote -f |
...
<diretorio-instalacao-postgres>/repmgr.conf --log-to-file' |
...
follow_command='/usr/pgsql-15/bin/repmgr standby follow -f |
...
<diretorio-instalacao-postgres>/repmgr.conf --log-to-file --upstream-node-id=%n' |
...
pg_bindir='/usr/pgsql-15/bin/' |
...
log_file=' |
...
<diretorio-instalacao-postgres>/repmgr.log' |
Para que as alterações fiquem válidas, reinicie o Serviço do Postgresql.
...
Bloco de código |
---|
sudo systemctl restart postgresql-15.service |
...
Registre o Cluster primário no Repmgr:
...
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 |
...
<diretorio-instalacao-postgres>/repmgr.conf cluster show |
...
./repmgr -f |
...
<diretorio-instalacao-postgres>/repmgr.conf cluster show |
Resultado da consulta:
Servidor Secundário
No servidor secundário
Realize a instalação do
...
repmgr pelo sistema operacional:
Bloco de código |
---|
sudo dnf -y install repmgr_15.x86_64 |
...
Pare o serviço do PostgreSQL.
...
Bloco de código |
---|
sudo systemctl stop postgresql-15.service |
...
- Com usuário Postgres do Sistema Operacional, apagar os paths exclusivamente relacionados ao Postgres. Como temos somente arquivos postgres nessas unidades, rodamos o comando a seguir:
É 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.
Sistema Operacional
...
rm -rf /data01/pgsql/15/*
rm -rf /data03/*
rm -rf /data02/*
Crie o arquivo de
...
configuração repmgr.
Com usuário postgres
...
, crie o arquivo no seguinte path:
...
<diretorio-instalacao-postgres>/repmgr.conf
...
:
...
Bloco de código |
---|
# repmgr.conf - Standby |
...
node_id=2 |
...
node_name=standby |
...
conninfo='host= |
...
<host-secundario> dbname=<banco-de-dados> user=<usuario-de-replicacao> connect_timeout=2' |
...
data_directory=' |
...
<diretorio-de-dados-postgres>' failover=automatic |
...
promote_command='/usr/pgsql-15/bin/repmgr standby promote -f |
...
<diretorio-instalacao-postgres>/repmgr.conf --log-to-file' |
...
follow_command='/usr/pgsql-15/bin/repmgr standby follow -f |
...
<diretorio-instalacao-postgres>/repmgr.conf --log-to-file --upstream-node-id=%n' |
...
pg_bindir='/usr/pgsql-15/bin/' |
...
log_file=' |
...
<diretorio-instalacao-postgres>/repmgr.log' |
Realize o clone do banco de dados primário:
...
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 <host-primario> -U repmgr -f <diretorio-instalacao-postgres>/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 |
...
<host-primario> -U <usuario-de-replicacao> -f <diretorio-instalacao-postgres>/repmgr.conf standby register |
...
## Consultar a inclusão no repmgr: |
...
su - postgres |
...
cd /usr/pgsql-15/bin |
...
./repmgr -f |
...
<diretorio-instalacao-postgres>/repmgr.conf cluster |
...
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 repmgr(r_e_c_n_o_ int, d_e_l_e_t_ bpchar (20));
END;
);
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:
Ao tentar realizar um drop na tabela no servidor secundário, temos o seguinte retorno:
Para consultar o status da replicação verifique a seguinte view no servidor primário:
#para tabular
\x
##query de consulta:
select * from pg_stat_replication;
Resultado:
show |
Informações |
---|
O servidor secundário é usado somente para leitura. Não pode realizar a inclusão ou deleção de objetos no banco de dados. |
...
Mais detalhes: https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-VIEW
...
Confira mais detalhes neste link. |
Caso ocorra um problema no servidor primário, o Repmgr realizará failover automático para a réplica.
Se acompanharmos o log do repmgr:
Vamos verificar onde esta o log.
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
...
A partir do momento em que o servidor primário
...
para de responder,
...
o repmgr
...
transformará a réplica em servidor principal.
...
A partir
...
deste momento
...
, será necessário recriar a conexão com o servidor primário
...
quando este for restabelecido. Os procedimentos abaixo demonstram como transformar o servidor secundário em primário, e o primário original em réplica:
Bloco de código |
---|
#validar o resultado do comando com |
...
--dry-run |
...
cd /usr/pgsql-15/bin |
...
./repmgr node rejoin -f |
...
<diretorio-instalacao-postgres>/repmgr.conf -d 'host= |
...
<host-secundario> user=<usuario-de-replicacao> dbname=<banco-de-dados>' --force-rewind --config-files=postgresql.conf,postgresql.local.conf --verbose --dry-run |
...
#remover o |
...
primario antigo e transformar |
...
em secundario ./repmgr node rejoin -f |
...
<diretorio-instalacao-postgres>/repmgr.conf -d 'host= |
...
<host-secundario> user=<usuario-de-replicacao> dbname=<banco-de-dados>' --force-rewind --config-files=postgresql.conf,postgresql.local.conf --verbose |
...
## Agora o servidor |
...
replica se torna do primário do Cluster, e o antigo Primario |
...
vira a replica, recebendo agora os dados, se tornando o servidor replica. cd /usr/pgsql-15/bin |
...
./repmgr -f |
...
<diretorio-instalacao-postgres>/repmgr.conf cluster show |