Histórico da Página
Instruções
Inicie com a instalação do Postgresql, conforme documentação TDN. Usamos dois servidores para realizar o modelo de replica Assincrona.
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
- Alterar os seguintes parâmetros diretamente no postgresql.conf ou por linha de comando:
Arquivo de configuração: postgresql.conf
wal_level: replica
hot_standby: on
Ou diretamente pelo banco de dados, conectado ao psql ou ao pgAdmin:
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;
$$;
- 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.
- 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;
...
Nota | ||
---|---|---|
| ||
Para prosseguir com a configuração, assegure-se que:
|
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 | ||||
---|---|---|---|---|
| ||||
ALTER SYSTEM SET wal_level = replica;
ALTER SYSTEM SET hot_standby = on; |
Bloco de código | ||
---|---|---|
| ||
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 | |
---|---|
|
| |
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.
- 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.
- 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”
- 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
- Para que as alterações fiquem válidas, reinicie o Serviço do Postgresql.
Sistema Operacional
sudo systemctl restart postgresql-15.service
- 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.