Como configurar a replicação física com PostgreSQL

Como configurar a replicação física com PostgreSQL
“PostgreSQL é um popular sistema de gerenciamento de banco de dados relacional de código aberto que é suportado pelo sistema mais operacional. A maneira de manter a cópia do banco de dados principal é chamada de replicação. A cópia do banco de dados principal é replicada nos diferentes servidores físicos. A replicação é feita definindo a configuração de escravos mestre. Aqui, o mestre atua como a instância principal e armazena a cópia principal do banco de dados, e o escravo atua como a instância secundária que armazena a cópia idêntica do banco de dados principal. O mestre trabalha como o servidor de leitura-gravação, e o escravo funciona como o servidor somente leitura. Dois tipos de repetições são suportados pelo banco de dados PostgreSQL que ajuda a implementar aplicativos escaláveis ​​e de alta disponibilidade e tolerantes de falhas. Estes são replicação física de streaming e replicação lógica. A maneira de configurar a replicação física ou de streaming com o banco de dados PostgreSQL foi explicada neste tutorial.”

Replicação física ou de streaming

A solução de replicação mais usada é Log de Write-Ahead (Wal) Replicação de envio ou streaming. O servidor de banco de dados em espera ou escravo de replicação está configurado para fazer a conexão com o servidor primário/mestre. Os registros do WAL são transmitidos para o servidor em espera antes de preencher o arquivo wal. Os dados são transmitidos ao servidor em espera em um modo assíncrono por padrão. Isso significa que os dados são transmitidos ao servidor em espera depois de cometer a transação no servidor primário. Isso pode causar perda de dados porque, se o servidor mestre travar sem cometer nenhuma transação, essa transação não será replicada no servidor em espera.

A arquitetura da replicação física

Um processo de plano de fundo chamado Wal Remeter inicia na máquina principal depois de configurar as configurações de replicação física. Ele aceita um pedido do modo de espera e transmite os registros do Wal para o espera continuamente. Outro processo de fundo chamado Wal Receiver inicia na máquina escrava que recebe e aplica as alterações do banco de dados principal no banco de dados da máquina escrava. A replicação física pode ser definida pelo seguinte diagrama.

Recursos de replicação física

Todos os dados de um único cluster são copiados pelo processo de replicação física, onde o cluster é o conjunto de bancos de dados gerenciados pelo banco de dados PostGresql. A máquina de origem é chamada de servidor primário e a máquina de destino é chamada de servidor de espera. Algumas características importantes da replicação física foram mencionadas abaixo.

Arquivos wal

A série ordenada de registros do WAL são gerados pelo servidor PostgreSQL. Esses registros serão transportados para outra máquina usando replicação física, e a modificação será feita no banco de dados local. Os registros do WAL são divididos em arquivos de tamanho igual que são chamados de segmentos WAL. Esses arquivos são criados no diretório pg_wal e os arquivos antigos do WAL são removidos quando não são mais necessários.

Quente, frio e quente em espera

O servidor de espera quente é usado para armazenar os dados atualizados e permitir que os clientes executem a transação somente leitura. O servidor frio de espera não está em funcionamento normalmente, e começa quando ocorre uma falha. O servidor quente de espera funciona semelhante ao servidor de espera quente, exceto que não pode fazer a conexão com o cliente.

Modo de recuperação

Os servidores quentes e quentes em espera são executados no modo de recuperação, e o Postgres importará e aplicará arquivos WAL gerados por um servidor primário no modo de recuperação.

Vantagens de replicação física ou de streaming

  • Ele pode ser usado para manter o backup do banco de dados e ajuda a recuperar os dados quando o servidor primário trava.
  • É melhor usar operações somente leitura.
  • Ele garante que uma cópia da última operação do servidor primário seja salva.
  • Um ou mais servidores em espera podem ser conectados com o servidor primário e os fluxos de informações de log do servidor primário para todos os servidores de espera conectados. Se um dos servidores em espera estiver desconectado ou atrasado por qualquer motivo, o streaming será continuado para outro servidor de espera.
  • Se o servidor primário estiver desconectado ou desligado por qualquer motivo, ele esperará para enviar os dados atualizados para o servidor em espera antes de desligar.

Desvantagens da replicação física ou de streaming

  • Ele replica dados de forma assíncrona por padrão. Isso significa que os arquivos WAL que não são copiados para o servidor em espera podem ser removidos quando quaisquer alterações forem feitas no servidor primário. É melhor definir um valor mais alto no wal_keep_segments para evitar a perda de dados.
  • Não suporta replicação entre diferentes servidores PostgreSQL.
  • Os dados não são mais seguros nesta replicação, porque os dados sensíveis podem ser extraídos sem autenticação do usuário.
  • Não trunca o comando.
  • Não suporta tabelas, visualização e partição de tabelas de partição.
  • Não suporta grande replicação de objetos.
  • Não suporta esquema de banco de dados e comandos DDL.

Configuração de replicação física

As etapas da implementação da replicação lógica no banco de dados PostGresql foram mostradas nesta parte deste tutorial.

Pré-requisitos

Configure os nós mestre e réplica

Você pode definir o mestre e os nós de réplicas de duas maneiras. Uma maneira é usar dois computadores separados, onde o sistema operacional Ubuntu está instalado, e outra maneira é usar duas máquinas virtuais instaladas no mesmo computador. O processo de teste do processo de replicação física será mais fácil se você usar dois computadores separados para o nó mestre e o nó RELACIONAL, porque um endereço IP específico pode ser atribuído facilmente para cada computador. Mas se você usar duas máquinas virtuais no mesmo computador, o endereço IP estático precisará ser definido para cada máquina virtual e garantir que ambas as máquinas virtuais possam se comunicar entre si através do endereço IP estático. Eu usei duas máquinas virtuais para testar o processo de replicação física neste tutorial. O nome do host do nó mestre foi definido como Fahmida-mestre, e o nome do host do nó da réplica foi definido como Fahmida-escravo aqui.

Instale o PostgreSQL nos nós mestre e réplica

Você deve instalar a versão mais recente do servidor de banco de dados PostGresql em duas máquinas antes de iniciar as etapas deste tutorial. PostgreSQL versão 14 foi usado neste tutorial. Execute os seguintes comandos para verificar a versão instalada do PostGresql no nó principal.

Execute o seguinte comando para se tornar um usuário root.

$ sudo -i

Execute os seguintes comandos para fazer login como usuários do PostGres com privilégios de superusuário e faça uma conexão com o banco de dados PostgreSQL.

$ su - postgres
$ psql

A saída mostra que a versão 14 do PostGresql.4 foi instalado no Ubuntu versão 22.04.1.

Você precisa instalar a mesma versão do PostGresql no nó da réplica porque a replicação lógica não pode ser configurada entre diferentes versões do servidor PostgreSQL.

Configuração do nó primário

As configurações necessárias para o nó primário foram mostradas nesta parte do tutorial. As seguintes tarefas serão concluídas no nó primário.

  • Modifique o PostGresql.arquivo conf para configurar o endereço IP e o nível WAL.
  • Crie uma função de usuário com essa senha para fazer uma conexão com o nó principal do nó da réplica.
  • Modificar PG_HBA.arquivo conf para adicionar informações de conexão de rede

Modifique o PostGresql.conf arquivo

Você deve configurar o endereço IP do nó primário no arquivo de configuração PostGresql nomeado PostGresql.conf que está localizado no local, /etc/postgreSql/14/main/pós -férresql.conf. Faça login como usuário root no nó primário e execute o seguinte comando para editar o arquivo.

$ nano/etc/postgreSql/14/main/postgreSql.conf

Descubra o Ouvir_addresses Variável no arquivo, remova o hash (#) desde o início da variável para o descomamento da linha. Você pode definir um asterisco (*) ou o endereço IP do nó primário para esta variável. Se você definir asterisk (*), o servidor primário ouvirá todos os endereços IP. Ele ouvirá o endereço IP específico se o endereço IP do servidor primário estiver definido como esta variável. Neste tutorial, o endereço IP do servidor primário que foi definido para esta variável é 192.168.10.5.

out_addressess = ""

Em seguida, descubra o wal_level variável para definir o tipo de replicação. Aqui, o valor da variável será um réplica.

wal_level = réplica

Execute o seguinte comando para reiniciar o servidor PostgreSQL após modificar o PostGresql.conf arquivo.

$ Systemctl Reiniciar PostgreSQL

*** NOTA: Após a configuração da configuração, se você enfrentar um problema iniciando o servidor PostGresql, execute os seguintes comandos para o PostGresql versão 14.

$ sudo chmod 700 -r/var/lib/postgreSql/14/main
$ sudo -i -u postgres
ass

Você poderá se conectar com o servidor PostgreSQL depois de executar o comando acima com sucesso.

Crie função/usuário para replicação

Uma função/usuário com permissão específica é necessária para a replicação. Execute o seguinte comando SQL para criar uma função com o usuário para a replicação.

# Criar réplica de função com senha de login de replicação '12345';

A saída a seguir aparecerá se a função for criada com sucesso.

Modifique o PG_HBA.conf arquivo

Você deve configurar o endereço IP do nó secundário no arquivo de configuração PostGresql nomeado PG_HBA.conf que está localizado no local, /etc/postgreSql/14/main/pg_hba.conf. Faça login como usuário root no nó primário e execute o seguinte comando para editar o arquivo.

$ nano/etc/postgreSql/14/main/pg_hba.conf

Adicione as seguintes informações no final deste arquivo.

host /32 scram-sha-256

O IP do servidor escravo está definido como “192.168.10.10" aqui. De acordo com as etapas anteriores, a seguinte linha foi adicionada ao arquivo.

Replicação de replicação do host 192.168.10.10/32 SCRAM-SHA-256

Reinicie o servidor PostGresql

Execute o seguinte comando para reiniciar o servidor PostGresql como um usuário root.

$ Systemctl Reiniciar PostgreSQL

Configuração do nó da réplica

As tarefas necessárias serão realizadas para o nó da réplica, onde a cópia do banco de dados principal será armazenada. O conteúdo do banco de dados existente do nó da réplica será removido para manter o banco de dados do nó primário e tornar o servidor PostgreSQL da réplica nó-somente leitura.

Pare o servidor PostGresql no nó da réplica

Execute o seguinte comando depois de fazer login como usuário root para interromper o servidor PostGresql.

$ Systemctl Stop PostGresql

Remova o conteúdo existente do nó da réplica

Execute o seguinte comando para remover o conteúdo do banco de dados existente do servidor PostGresql do nó da réplica. É necessário para fins de replicação. O nó da réplica será trabalhado no modo somente leitura depois de executar o seguinte comando

$ rm -rf/var/lib/postgreSql/14/main/*

Testando o processo de replicação física

Você precisa criar um banco de dados com uma ou mais tabelas no nó primário para testar se a replicação física está funcionando corretamente ou não. Aqui, o banco de dados existente nomeado PostGres do servidor primário tem sido usado para fins de teste. Se quiser, você pode criar a tabela criando um novo banco de dados. As seguintes tarefas serão realizadas nesta parte do tutorial.

  • Adicione uma nova tabela no banco de dados selecionado do nó principal.
  • Adicione um registro à tabela.
  • Armazene a cópia do banco de dados do nó primário para o nó da réplica.
  • Crie uma tabela no servidor primário

Faça login no banco de dados PostGresql do nó primário e execute a seguinte instrução SQL para criar um funcionários tabela no banco de dados existente PostGres. Se desejar, você pode criar um novo banco de dados e criar a tabela selecionando o novo banco de dados. Eu não criei nenhum novo banco de dados aqui. Portanto, a tabela será criada no banco de dados padrão. A tabela dos funcionários conterá 5 campos. Estes são ID, nome, endereço, email e telefone.

# Crie funcionários da tabela (
Id Id Serial Primary Key,
Nome Varchar (15) Não NULL,
Endereço Texto não nulo,
Email Varchar (30),
Char do telefone (14) não nulo);

Execute a seguinte instrução SQL para inserir um registro na tabela.

# Inserir em funcionários (nome, endereço, email, telefone)
Valores ('Farheen Hasan', '12/a, Dhanmondi, Dhaka.',' [email protected] ',' +8801826783423 ');
Execute a seguinte declaração SQL para ler o conteúdo da tabela dos funcionários.
# Selecione * dos funcionários;

Se a tabela for criada e um registro for inserido na tabela com sucesso, a saída a seguir aparecerá após a execução da consulta selecionada. Um registro foi inserido na tabela que é mostrado na saída.

Copie o banco de dados para um servidor de réplica

Faça login no banco de dados PostGresql do servidor de réplica e execute a seguinte instrução SQL para criar uma cópia do PostGres Banco de dados do servidor primário no servidor de réplica. Depois de executar a declaração, ele solicitará a senha do usuário que foi criado na etapa anterior. Se a autenticação for feita com sucesso, a replicação será iniciada.

# pg_basebackup -r -h 192.168.10.5 -u REPLICAUSER -D/VAR/LIB/POSTGRESQL/14/PRINCIPAL -P

A saída a seguir mostra que a replicação é feita com sucesso e 34962 KB foi copiado.

Execute o seguinte comando depois de concluir a replicação como usuário root para reiniciar o servidor PostGresql no nó da réplica.

$ Systemctl Reiniciar PostgreSQL

Agora, faça login no servidor PostgreSQL no nó de réplica e execute a seguinte instrução SQL para verificar se o funcionários' A tabela foi copiada para o nó da réplica ou não.

# Selecione * dos funcionários;

A saída a seguir mostra o conteúdo do funcionários' Tabela do réplica O nó é o mesmo que o conteúdo do funcionários' Tabela do Primário nó.

Você pode adicionar um ou mais registros ou atualizar registros ou excluir registros na tabela dos funcionários do nó primário ou adicionar uma ou mais tabelas no banco de dados selecionado do nó primário e verificar o banco de dados do nó da réplica para verificar se o conteúdo atualizado do banco de dados primário é replicado corretamente no banco de dados do nó da réplica ou não.

Insira novos registros no nó primário:

Agora, execute o seguinte comando Insert para adicionar mais três registros na tabela de funcionários do PostGres banco de dados que está localizado no Primário nó.

# Inserir em funcionários (nome, endereço, email, telefone)
Valores ('Abir Hossain', '10, Jigatola, Dhaka.',' [email protected] ',' +8801888564345 '),
('Nila Chowdhury', '67/b, mirpur, dhaka.',' [email protected] ',' +8801799453123 '),
('Mizanur Rahman', '8/c, Malibag, Dhaka.',' [email protected] ',' +8801957864564 ');
Execute o seguinte comando para verificar o conteúdo atual da tabela dos funcionários no nó primário.
# Selecione * dos funcionários;

A saída a seguir mostra que três novos registros foram inseridos corretamente na tabela.

Verifique o nó da réplica após a inserção:

Agora, você deve verificar se a tabela de funcionários do nó da réplica foi atualizada ou não. Faça login no servidor PostGresql do nó de réplica e execute o seguinte comando para verificar o conteúdo da tabela de funcionários.

# Selecione * dos funcionários;

A saída a seguir mostra que três novos registros foram inseridos no funcionários' Tabela do réplica nó que foi inserido no Primário nó do funcionários' mesa. Portanto, as mudanças no banco de dados principal foram replicadas corretamente no nó da réplica.

Atualizar registro no nó primário:

Execute o seguinte comando de atualização que atualizará o valor do campo de telefone, onde o valor do campo de nome é "Nila Chowdhury". Há apenas um registro no funcionários' tabela que corresponde à condição da consulta de atualização.

# Atualizar funcionários define telefone = “+8801911111111” onde nome = “nila chowdhury”;

Execute o seguinte comando para verificar o conteúdo atual do funcionários' Tabela no Primário nó.

# Selecione * dos funcionários;

A saída a seguir mostra que o telefone O valor de campo do registro específico foi atualizado após a execução da consulta de atualização.

Verifique o nó da réplica após a atualização:

Agora, você deve verificar se a tabela de funcionários do nó da réplica foi atualizada ou não. Faça login no servidor PostGresql do nó de réplica e execute o seguinte comando para verificar o conteúdo da tabela de funcionários.

# Selecione * dos funcionários;

A saída a seguir mostra que um registro foi atualizado no funcionários' Tabela do réplica nó, que foi atualizado no Primário nó do funcionários' mesa. Portanto, as mudanças no banco de dados principal foram replicadas corretamente no nó da réplica.

Exclua registro no nó primário:

Execute o seguinte comando excluir que excluirá um registro do funcionários' Tabela do Primário Nó onde o valor do campo de email é “[email protected] ”. Há apenas um registro no funcionários' tabela que corresponde à condição da consulta de exclusão.

# Exclua dos funcionários onde email = '[email protected] ';

Execute o seguinte comando para verificar o conteúdo atual do funcionários' Tabela no Primário nó.

# Selecione * dos funcionários;

A saída a seguir mostra que um registro foi excluído após a execução da consulta de exclusão.

Verifique o nó da réplica depois de excluir o registro:

Agora, você deve verificar se a tabela de funcionários do nó da réplica foi excluída ou não. Faça login no servidor PostGresql do nó de réplica e execute o seguinte comando para verificar o conteúdo da tabela de funcionários.

# Selecione * dos funcionários;

A saída a seguir mostra que um registro foi excluído no funcionários' Tabela do réplica nó, que foi excluído no Primário nó do funcionários' mesa. Portanto, as mudanças no banco de dados principal foram replicadas corretamente no nó da réplica.

Conclusão

O objetivo da replicação física para manter o backup do banco de dados, a arquitetura da replicação física, as vantagens e desvantagens da replicação física e as etapas da implementação de replicação física no banco de dados PostGresql foram explicadas neste tutorial com exemplos. Espero que o conceito de replicação física seja liberado para os usuários, e os usuários possam usar esse recurso em seu banco de dados PostGresql depois de ler este tutorial.