Como configurar a replicação lógica PostGresql no Ubuntu

Como configurar a replicação lógica PostGresql no Ubuntu
“Os dados são uma parte muito importante de qualquer aplicativo. PostgreSQL é um servidor de banco de dados popular para armazenar os dados do aplicativo. A disponibilidade de dados é um recurso essencial de qualquer banco de dados. É melhor manter várias cópias do banco de dados para garantir a disponibilidade de dados do aplicativo. Se nenhuma cópia de backup do banco de dados for armazenada e se o banco de dados travar a qualquer momento, o aplicativo não estará acessível. Uma ou mais cópias do banco de dados PostGresql podem ser armazenadas para evitar essa situação, e é chamada de replicação. Dois tipos de replicação podem ser feitos no PostgreSQL. Estes são replicação lógica e replicação física. A maneira de configurar a replicação lógica do banco de dados PostgreSQL foi explicada neste tutorial.”

Replicação lógica

A maneira de replicar os objetos de dados e suas mudanças é chamada de replicação lógica. Funciona com base na publicação e assinatura. Ele usa Wal (Loging Write-Ahead) para gravar as mudanças lógicas no banco de dados. As alterações no banco de dados são publicadas no banco de dados do editor e o assinante recebe o banco de dados replicado do editor em tempo real para garantir a sincronização do banco de dados.

A arquitetura de replicação lógica

O modelo do editor/assinante é usado na replicação lógica do PostgreSQL. O conjunto de replicação é publicado no nó do editor. Uma ou mais publicações são assinadas pelo nó do assinante. A replicação lógica copia um instantâneo do banco de dados de publicação para o assinante, que é chamado de fase de sincronização da tabela. A consistência transacional é mantida usando o Commit quando qualquer alteração é feita no nó do assinante. O método manual de replicação lógica pós -Gresql foi mostrado na próxima parte deste tutorial.

O processo de replicação lógica é mostrado no diagrama a seguir.

Todos os tipos de operação (inserir, atualizar e excluir) são replicados em replicação lógica por padrão. Mas as mudanças no objeto que serão replicadas podem ser limitadas. A identidade da replicação deve ser configurada para o objeto necessário para adicionar à publicação. A chave primária ou de índice é usada para a identidade da replicação. Se a tabela do banco de dados de origem não contiver nenhuma chave primária ou de índice, então o completo será usado para a identidade da réplica. Isso significa que todas as colunas da tabela serão usadas como uma chave. A publicação será criada no banco de dados de origem usando o comando Create Publication, e a assinatura será criada no banco de dados de destino usando o comando Create Subscription. A assinatura pode ser interrompida ou retomada usando o comando de assinatura ALTER e removido pelo comando de assinatura Drop. A replicação lógica é implementada pelo remetente do WAL e é baseado na decodificação do WAL. O remetente do WAL carrega o plugin de decodificação lógica padrão. Este plug -in transforma as alterações recuperadas do WAL no processo de replicação lógica, e os dados são filtrados com base na publicação. Em seguida, os dados são transferidos continuamente usando o protocolo de replicação para o trabalhador de replicação que mapeia os dados com a tabela do banco de dados de destino e aplica as alterações com base na ordem transacional.

Recursos de replicação lógica

Algumas características importantes da replicação lógica foram mencionadas abaixo.

  • Os objetos de dados replicam com base na identidade da replicação, como a chave primária ou a chave exclusiva.
  • Índices diferentes e definições de segurança podem ser usados ​​para gravar dados no servidor de destino.
  • A filtragem baseada em eventos pode ser feita usando a replicação lógica.
  • A replicação lógica suporta versão cruzada. Isso significa que ele pode ser implementado entre duas versões diferentes do banco de dados PostgreSQL.
  • Várias assinaturas são suportadas pela publicação.
  • O pequeno conjunto de tabelas pode ser replicado.
  • É preciso carga mínima do servidor.
  • Pode ser usado para atualizações e migração.
  • Permite streaming paralelo entre os editores.

Vantagens de replicação lógica

Alguns benefícios da replicação lógica são mencionados abaixo.

  • É usado para a replicação entre duas versões diferentes dos bancos de dados PostgreSQL.
  • Pode ser usado para replicar dados entre diferentes grupos de usuários.
  • Pode ser usado para unir vários bancos de dados em um único banco de dados para fins analíticos.
  • Ele pode ser usado para enviar alterações incrementais em um subconjunto de um banco de dados ou um único banco de dados para outros bancos de dados.

Desvantagens da replicação lógica

Algumas limitações da replicação lógica são mencionadas abaixo.

  • É obrigatório ter a chave primária ou a chave única na tabela do banco de dados de origem.
  • O nome qualificado completo da tabela é necessário entre a publicação e a assinatura. Se o nome da tabela não for o mesmo para a fonte e o destino, a replicação lógica não funcionará.
  • Não suporta replicação bidirecional.
  • Não pode ser usado para replicar esquema/ddl.
  • Não pode ser usado para replicar truncado.
  • Não pode ser usado para replicar sequências.
  • É obrigatório adicionar privilégios de super usuário a todas as tabelas.
  • Diferentes ordem das colunas podem ser usadas no servidor de destino, mas os nomes das colunas devem ser os mesmos para a assinatura e a publicação.

Implementando replicação lógica

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

Pré-requisitos

A. 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 mestre O nó foi definido como Fahmida-mestre, e o nome do host do réplica O nó foi definido como Fahmida-escravo aqui.

B. 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ário do PostGres com privilégios de superusuário e faça a 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.

Configurações de nós primários

As configurações necessárias para o nó primário foram mostradas nesta parte do tutorial. Após a configuração da configuração, você deve criar um banco de dados com a tabela no nó primário e criar uma função e publicação para receber uma solicitação do nó da réplica e armazenar o conteúdo atualizado da tabela no nó da réplica.

A. 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á lógico.

wal_level = lógico

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.

Faça login no servidor PostGresql e execute a seguinte declaração para verificar o valor atual do nível WAL.

# Mostre wal_level;

B. Crie um banco de dados e tabela

Você pode usar qualquer banco de dados PostGresql existente ou criar um novo banco de dados para testar o processo de replicação lógica. Aqui, um novo banco de dados foi criado. Execute o seguinte comando SQL para criar um banco de dados nomeado amostrado.

# Criar banco de dados SampledB;

A saída a seguir aparecerá se o banco de dados for criado com sucesso.

Você precisa alterar o banco de dados para criar uma tabela para o sampledb. O "\ c" com o nome do banco de dados é usado no PostGresql para alterar o banco de dados atual.

A seguinte instrução SQL alterará o banco de dados atual de Postgres para SampledB.

# \ c SampledB

A seguinte instrução SQL criará uma nova tabela chamada livro no banco de dados SamPledB. A tabela conterá três campos. Estes são ID, título e autor_name.

# Create Table Book (
Id Id Serial Primary Key,
Título Varchar (50),
autor_name varchar (50));

A saída a seguir aparecerá após a execução das instruções SQL acima.

Execute as duas declarações de inserção a seguir para inserir dois registros na tabela de livros.

# Inserir no livro (título, autor_name)
Valores ('PostgreSQL 14 Administration Cookbook', 'Simon Riggs, Gianni Ciolli');
# Inserir no livro (título, autor_name)
Valores ('Aprenda PostgreSQL', 'Luca Ferrari, Enrico Pirozzi');

A saída a seguir aparecerá se os registros forem inseridos com sucesso.

Execute o seguinte comando para criar uma função com a senha que será usada para fazer uma conexão com o nó principal do nó da réplica.

# Crie a senha de login de replicação de réplica de função '12345';

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

Execute o seguinte comando para conceder todas as permissões no livro Tabela para o RELACIONADA.

# Conceda a todos no livro a réplica;

A saída a seguir aparecerá se a permissão for concedida para o RELACIONADA.

C. Modifique o PG_HBA.conf arquivo

Você deve configurar o endereço IP do nó de réplica 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.

hospedar /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. Aqui, o nome do banco de dados é sampledb, o usuário é RELACIONADA, e o endereço IP do servidor de réplica é 192.168.10.10.

Réplica do Host SampledB 192.168.10.10/32 SCRAM-SHA-256

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

$ Systemctl Reiniciar PostgreSQL

D. Criar publicação

Execute o seguinte comando para criar uma publicação para o livro mesa.

# Crie publicação BookPub para Table Book;

Execute o seguinte meta-comando do PSQL para verificar se a publicação é criada com sucesso ou não.

$ \ drp+

A saída a seguir aparecerá se a publicação for criada com sucesso para a tabela livro.

Configurações de nó de réplica

Você precisa criar um banco de dados com a mesma estrutura de tabela criada no nó primário no nó da réplica e criar uma assinatura para armazenar o conteúdo atualizado da tabela do nó primário.

A. Crie um banco de dados e tabela

Você pode usar qualquer banco de dados PostGresql existente ou criar um novo banco de dados para testar o processo de replicação lógica. Aqui, um novo banco de dados foi criado. Execute o seguinte comando SQL para criar um banco de dados nomeado REPLICADB.

# Crie o banco de dados ReplicaDB;

A saída a seguir aparecerá se o banco de dados for criado com sucesso.

Você precisa alterar o banco de dados para criar uma tabela para o REPLICADB. Use o "\ c" com o nome do banco de dados para alterar o banco de dados atual como antes.

A seguinte instrução SQL alterará o banco de dados atual de PostGres para REPLICADB.

# \ c replicAdB

A seguinte declaração SQL criará uma nova tabela chamada livro no REPLICADB base de dados. A tabela conterá os mesmos três campos que a tabela criada no nó primário. Estes são ID, título e autor_name.

# Create Table Book (
Id Id Serial Primary Key,
Título Varchar (50),
autor_name varchar (50));

A saída a seguir aparecerá após a execução das instruções SQL acima.

B. Crie assinatura

Execute a seguinte instrução SQL para criar uma assinatura para o banco de dados do nó primário para recuperar o conteúdo atualizado da tabela de livros do nó primário para o nó da réplica. Aqui, o nome do banco de dados do nó principal é sampledb, O endereço IP do nó principal é “192.168.10.5”, O nome de usuário é RELACIONADA, e a senha é “12345”.

# Criar assinatura Booksub Connection 'dbName = sampledb host = 192.168.10.5 Usuário = senha de réplica = 12345 porta = 5432 'Publicação BookPub;

A saída a seguir aparecerá se a assinatura for criada com sucesso no nó da réplica.

Execute o seguinte meta-comando do PSQL para verificar se a assinatura é criada com sucesso ou não.

# \ drs+

A saída a seguir aparecerá se a assinatura for criada com sucesso para a tabela livro.

C. Verifique o conteúdo da tabela no nó da réplica

Execute o seguinte comando para verificar o conteúdo da tabela de livros no nó da réplica após a assinatura.

# Table Book;

A saída a seguir mostra que dois registros que foram inseridos na tabela do nó primário foram adicionados à tabela do nó da réplica. Portanto, fica claro que a replicação lógica simples foi concluída corretamente.

Você pode adicionar um ou mais registros ou atualizar registros ou excluir registros na tabela de livros 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 O 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:

Execute as seguintes instruções SQL para inserir três registros no livro tabela do servidor primário.

# Inserir no livro (título, autor_name)
Valores ('A arte de PostgreSql', 'Dimitri Fontaine'),
('PostgreSQL: em funcionamento, 3ª edição', 'Regina OBE e Leo Hsu'),
('PostgreSQL de alto desempenho de alto desempenho', 'Chitij Chauhan, Dinesh Kumar');

Execute o seguinte comando para verificar o conteúdo atual do livro tabela no nó primário.

# Selecione * no livro;

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ê tem que verificar se o livro A tabela 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 do livro mesa.

# Table Book;

A saída a seguir mostra que três novos registros foram inseridos no livros Tabela do réplica nó que foi inserido no Primário nó do livro 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 nome do autor Campo onde o valor do campo de identificação é 2. Há apenas um registro no livro tabela que corresponde à condição da consulta de atualização.

# Atualizar conjunto de livros Author_name = “Fahmida” onde id = 2;

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

# Selecione * no livro;

A saída a seguir mostra que o autor_name 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ê tem que verificar se o livro A tabela 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 do livro mesa.

# Table Book;

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

Excluir registro no nó primário

Execute o seguinte comando excluir que excluirá um registro do livro Tabela do Primário Nó onde o valor do campo Author_name é "Fahmida". Há apenas um registro no livro tabela que corresponde à condição da consulta de exclusão.

# Exclua do livro onde Author_name = "Fahmida";

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

# Selecione * no livro;

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 após a exclusão

Agora, você tem que verificar se o livro A tabela 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 do livro mesa.

# Table Book;

A saída a seguir mostra que um registro foi excluído no livro tabela do nó de réplica, que foi excluído no nó primário do livro 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 lógica para manter o backup do banco de dados, a arquitetura da replicação lógica, as vantagens e desvantagens da replicação lógica e as etapas da implementação de replicação lógica no banco de dados PostgreSQL foram explicadas neste tutorial com exemplos. Espero que o conceito de replicação lógica seja liberado para os usuários, e os usuários poderão usar esse recurso em seu banco de dados PostGresql depois de ler este tutorial.