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
Desvantagens da replicação física ou de streaming
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.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éplicaExecute 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-256O 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-256Reinicie 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.
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 (Execute a seguinte instrução SQL para inserir um registro na tabela.
# Inserir em funcionários (nome, endereço, email, telefone)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 -PA 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)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.