Come configurare la replica logica di PostgreSQL su Ubuntu

Come configurare la replica logica di PostgreSQL su Ubuntu
“I dati sono una parte molto importante di qualsiasi applicazione. PostgreSQL è un popolare server di database per archiviare i dati dell'applicazione. La disponibilità dei dati è una caratteristica essenziale di qualsiasi database. È meglio mantenere più copie del database per garantire la disponibilità dei dati dell'applicazione. Se non viene archiviata alcuna copia di backup del database e se il database si blocca in qualsiasi momento, l'applicazione non sarà accessibile. Una o più copie del database PostgreSQL possono essere archiviate per evitare questa situazione ed è chiamata replica. Due tipi di replica possono essere eseguiti su PostgreSQL. Si tratta di replicazione logica e replicazione fisica. Il modo per impostare la replica logica del database PostgreSQL è stato spiegato in questo tutorial."

Replica logica

Il modo per replicare gli oggetti dati e le loro modifiche è chiamato replica logica. Funziona in base alla pubblicazione e all'abbonamento. Utilizza Wal (Write-ahead Logging) per registrare le modifiche logiche nel database. Le modifiche al database sono pubblicate sul database dell'editore e l'abbonato riceve il database replicato dall'editore in tempo reale per garantire la sincronizzazione del database.

L'architettura della replicazione logica

Il modello di editore/abbonati viene utilizzato nella replica logica di PostgreSQL. Il set di replica è pubblicato sul nodo editore. Una o più pubblicazione è sottoscritta dal nodo degli abbonati. La replica logica copia un'istantanea del database di pubblicazione sull'abbonato, che è chiamato fase di sincronizzazione della tabella. La coerenza transazionale viene mantenuta utilizzando commit quando viene eseguita qualsiasi modifica sul nodo degli abbonati. Il metodo manuale di replicazione logica di PostgreSQL è stato mostrato nella parte successiva di questo tutorial.

Il processo di replica logica è mostrato nel diagramma seguente.

Tutti i tipi di operazione (inserto, aggiornamento e eliminazione) sono replicati nella replica logica per impostazione predefinita. Ma le modifiche all'oggetto che verranno replicate possono essere limitate. L'identità di replica deve essere configurata per l'oggetto necessario per aggiungere alla pubblicazione. La chiave primaria o indice viene utilizzata per l'identità di replica. Se la tabella del database di origine non contiene alcuna chiave primaria o indice, allora il pieno verrà utilizzato per l'identità replica. Ciò significa che tutte le colonne della tabella verranno utilizzate come chiave. La pubblicazione verrà creata nel database di origine utilizzando il comando Crea di pubblicazione e l'abbonamento verrà creato nel database di destinazione utilizzando Crea Create Command. L'abbonamento può essere arrestato o ripreso utilizzando il comando di abbonamento alter e rimosso dal comando di abbonamento a discesa. La replica logica è implementata dal mittente Wal e si basa sulla decodifica WAL. Il mittente WAL carica il plug -in di decodifica logica standard. Questo plugin trasforma le modifiche recuperate dal WAL nel processo di replica logica e i dati vengono filtrati in base alla pubblicazione. Successivamente, i dati vengono trasferiti continuamente utilizzando il protocollo di replica al lavoratore di replica che mappa i dati con la tabella del database di destinazione e applica le modifiche in base all'ordine transazionale.

Caratteristiche di replica logica

Di seguito sono state menzionate alcune importanti caratteristiche della replica logica.

  • Gli oggetti dati si replicano in base all'identità di replica, come la chiave primaria o la chiave univoca.
  • Diversi indici e definizioni di sicurezza possono essere utilizzati per scrivere dati nel server di destinazione.
  • Il filtro basato su eventi può essere eseguito utilizzando la replica logica.
  • La replica logica supporta la versione incrociata. Ciò significa che può essere implementato tra due diverse versioni del database PostgreSQL.
  • Abbonamenti multipli sono supportati dalla pubblicazione.
  • Il piccolo set di tabelle può essere replicato.
  • Ci vuole un carico minimo del server.
  • Può essere utilizzato per aggiornamenti e migrazione.
  • Consente lo streaming parallelo tra gli editori.

Vantaggi della replicazione logica

Di seguito sono menzionati alcuni vantaggi della replica logica.

  • Viene utilizzato per la replica tra due diverse versioni di database PostgreSQL.
  • Può essere utilizzato per replicare i dati tra diversi gruppi di utenti.
  • Può essere utilizzato per unire più database in un singolo database per scopi analitici.
  • Può essere utilizzato per inviare modifiche incrementali in un sottoinsieme di un database o un singolo database ad altri database.

Svantaggi della replicazione logica

Di seguito sono menzionate alcune limitazioni della replica logica.

  • È obbligatorio avere la chiave primaria o unica nella tabella del database di origine.
  • Il nome completo qualificato della tabella è richiesto tra la pubblicazione e l'abbonamento. Se il nome della tabella non è lo stesso per l'origine e la destinazione, la replica logica non funzionerà.
  • Non supporta la replicazione bidirezionale.
  • Non può essere usato per replicare schema/DDL.
  • Non può essere usato per replicare il troncato.
  • Non può essere usato per replicare le sequenze.
  • È obbligatorio aggiungere privilegi super utente a tutte le tabelle.
  • Un ordine diverso di colonne può essere utilizzato nel server di destinazione, ma i nomi delle colonne devono essere gli stessi per l'abbonamento e la pubblicazione.

Implementazione della replica logica

I passaggi di implementazione della replica logica nel database PostgreSQL sono stati mostrati in questa parte di questo tutorial.

Prerequisiti

UN. Imposta i nodi master e replica

È possibile impostare il maestro e i nodi replica in due modi. Un modo è utilizzare due computer separati in cui è installato il sistema operativo Ubuntu e un altro modo è utilizzare due macchine virtuali installate sullo stesso computer. Il processo di test del processo di replica fisica sarà più semplice se si utilizzano due computer separati per il nodo principale e il nodo replica perché un indirizzo IP specifico può essere assegnato facilmente per ciascun computer. Ma se si utilizzano due macchine virtuali sullo stesso computer, l'indirizzo IP statico dovrà essere impostato per ciascuna macchina virtuale e assicurarsi che entrambe le macchine virtuali possano comunicare tra loro tramite l'indirizzo IP statico. Ho usato due macchine virtuali per testare il processo di replica fisica in questo tutorial. Il nome host del maestro il nodo è stato impostato su Fahmida-Master, e il nome host del replica il nodo è stato impostato su fahmida-slave Qui.

B. Installa PostgreSQL su entrambi i nodi Master e Replica

È necessario installare l'ultima versione del server di database PostgreSQL su due macchine prima di iniziare i passaggi di questo tutorial. La versione 14 di PostgreSQL è stata utilizzata in questo tutorial. Esegui i seguenti comandi per verificare la versione installata di PostgreSQL nel nodo principale.

Esegui il comando seguente per diventare un utente root.

$ sudo -i

Esegui i seguenti comandi per accedere come utente di Postgres con privilegi superuser e stabilire la connessione con il database PostgreSQL.

$ su - Postgres
$ PSQL

L'output mostra che PostgreSQL versione 14.4 è stato installato su Ubuntu versione 22.04.1.

Configurazioni del nodo primario

Le configurazioni necessarie per il nodo primario sono state mostrate in questa parte del tutorial. Dopo aver configurato la configurazione, è necessario creare un database con la tabella nel nodo primario e creare un ruolo e una pubblicazione per ricevere una richiesta dal nodo replica e memorizzare il contenuto aggiornato della tabella nel nodo replica.

UN. Modificare il Postgresql.conf file

È necessario impostare l'indirizzo IP del nodo primario nel file di configurazione PostgreSQL Postgresql.conf che si trova sulla posizione, /etc/postgresql/14/main/postgresql.conf. Accedi come utente root nel nodo primario ed esegui il comando seguente per modificare il file.

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

Scopri il Ascolta_addresses Variabile nel file, rimuovere l'hash (#) dall'inizio della variabile per rimuovere la linea. È possibile impostare un asterisco (*) o l'indirizzo IP del nodo primario per questa variabile. Se si imposta Asterisk (*), il server primario ascolterà tutti gli indirizzi IP. Ascolterà l'indirizzo IP specifico se l'indirizzo IP del server primario è impostato su questa variabile. In questo tutorial, l'indirizzo IP del server primario che è stato impostato su questa variabile è 192.168.10.5.

ascolt_addressess = ""

Successivamente, scopri il Wal_Level variabile per impostare il tipo di replica. Qui, il valore della variabile sarà logico.

wal_level = logico

Eseguire il seguente comando per riavviare il server PostgreSQL dopo aver modificato il Postgresql.conf file.

$ SystemCtl Riavvia PostgreSQL

*** Nota: dopo aver configurato la configurazione, se si affronta un problema che avvia il server PostgreSQL, quindi eseguire i seguenti comandi per la versione PostgreSQL 14.

$ sudo chmod 700 -r/var/lib/postgresql/14/main
$ sudo -i -u postgres
#/usr/lib/postgresql/10/bin/pg_ctl riavvio -d/var/lib/postgresql/10/main

Sarai in grado di connetterti con il server PostgreSQL dopo aver eseguito correttamente il comando sopra.

Accedi al server PostgreSQL ed esegui la seguente istruzione per verificare il valore di livello WAL corrente.

# Mostra wal_level;

B. Crea un database e una tabella

È possibile utilizzare qualsiasi database PostgreSQL esistente o creare un nuovo database per testare il processo di replica logica. Qui è stato creato un nuovo database. Esegui il seguente comando SQL per creare un database chiamato campionato.

# Crea database SampledB;

Verrà visualizzato il seguente output se il database viene creato correttamente.

È necessario modificare il database per creare una tabella per SampledB. Il "\ c" con il nome del database viene utilizzato in PostgreSQL per modificare il database corrente.

La seguente istruzione SQL cambierà il database corrente da Postgres a SampledB.

# \ c SampledB

La seguente istruzione SQL creerà una nuova tabella denominata nel database SampledB. La tabella conterrà tre campi. Questi sono ID, Titolo e Author_Name.

# Crea il libro da tavolo (
Chiave primaria seriale ID,
Titolo Varchar (50),
autore_name varchar (50));

Verrà visualizzato il seguente output dopo aver eseguito le istruzioni SQL sopra.

Esegui le seguenti due istruzioni di inserzione per inserire due record nella tabella dei libri.

# Insert in Book (Titolo, Author_Name)
Valori ("libro di cucina di amministrazione postgresql 14", "Simon Riggs, Gianni Cilli");
# Insert in Book (Titolo, Author_Name)
Valori ('apprendimento postgresql', 'Luca ferrari, enrico pirozzi');

Verrà visualizzato il seguente output se i record vengono inseriti correttamente.

Esegui il comando seguente per creare un ruolo con la password che verrà utilizzata per effettuare una connessione con il nodo primario dal nodo replica.

# Crea il ruolo ReplicaUser Replication Login Password '12345';

Il seguente output apparirà se il ruolo viene creato correttamente.

Eseguire il seguente comando per concedere tutte le autorizzazioni su libro tavolo per il replicauser.

# Concedi tutto sul libro a replicauser;

La seguente output apparirà se l'autorizzazione è concessa per il replicauser.

C. Modificare il pg_hba.conf file

È necessario impostare l'indirizzo IP del nodo replica nel file di configurazione PostgreSQL pg_hba.conf che si trova sulla posizione, /etc/postgresql/14/main/pg_hba.conf. Accedi come utente root nel nodo primario ed esegui il comando seguente per modificare il file.

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

Aggiungi le seguenti informazioni alla fine di questo file.

ospite /32 Scram-Sha-256

L'IP del server slave è impostato su “192.168.10.10 "qui. Secondo i passaggi precedenti, la riga seguente è stata aggiunta al file. Qui, il nome del database è SampledB, L'utente è replicauser, e l'indirizzo IP del server replica è 192.168.10.10.

Host Sampledb ReplicaUser 192.168.10.10/32 Scram-sha-256

Eseguire il seguente comando per riavviare il server PostgreSQL dopo aver modificato il pg_hba.conf file.

$ SystemCtl Riavvia PostgreSQL

D. Crea pubblicazione

Eseguire il comando seguente per creare una pubblicazione per il libro tavolo.

# Crea bookpub di pubblicazione per tavolo;

Esegui il seguente meta-comand PSQL per verificare che la pubblicazione sia creata correttamente o no.

$ \ drp+

Verrà visualizzato il seguente output se la pubblicazione viene creata correttamente per la tabella libro.

Configurazioni di nodo replica

È necessario creare un database con la stessa struttura della tabella creata nel nodo primario nel nodo replica e creare un abbonamento per archiviare il contenuto aggiornato della tabella dal nodo principale.

UN. Crea un database e una tabella

È possibile utilizzare qualsiasi database PostgreSQL esistente o creare un nuovo database per testare il processo di replica logica. Qui è stato creato un nuovo database. Esegui il seguente comando SQL per creare un database chiamato replicadb.

# Crea replicaDB del database;

Verrà visualizzato il seguente output se il database viene creato correttamente.

È necessario modificare il database per creare una tabella per replicadb. Utilizzare il "\ c" con il nome del database per modificare il database corrente come prima.

La seguente istruzione SQL cambierà il database corrente da Postgres A replicadb.

# \ c replicadb

La seguente istruzione SQL creerà una nuova tabella denominata libro dentro replicadb Banca dati. La tabella conterrà gli stessi tre campi della tabella creata nel nodo primario. Questi sono ID, Titolo e Author_Name.

# Crea il libro da tavolo (
Chiave primaria seriale ID,
Titolo Varchar (50),
autore_name varchar (50));

Verrà visualizzato il seguente output dopo aver eseguito le istruzioni SQL sopra.

B. Crea abbonamento

Esegui la seguente istruzione SQL per creare un abbonamento per il database del nodo primario per recuperare il contenuto aggiornato della tabella di libri dal nodo primario al nodo replica. Qui, il nome del database del nodo primario è SampledB, L'indirizzo IP del nodo principale è "192.168.10.5"Il nome utente è replicauser, e la password è "12345".

# Crea la connessione di libri di abbonamento 'dbname = sampledb host = 192.168.10.5 utente = replicauser password = 12345 port = 5432 'Publication bookpub;

Verrà visualizzato il seguente output se l'abbonamento viene creato correttamente nel nodo replica.

Esegui il seguente meta-comand PSQL per verificare che l'abbonamento sia creato correttamente o no.

# \ drs+

Verrà visualizzato il seguente output se l'abbonamento viene creato correttamente per la tabella libro.

C. Controlla il contenuto della tabella nel nodo replica

Esegui il comando seguente per controllare il contenuto della tabella di libri nel nodo replica dopo l'abbonamento.

# Table Book;

Il seguente output mostra che due record che sono stati inseriti nella tabella del nodo principale sono stati aggiunti alla tabella del nodo replica. Quindi, è chiaro che la semplice replicazione logica è stata completata correttamente.

È possibile aggiungere uno o più record o aggiornare i record o eliminare i record nella tabella dei libri del nodo primario o aggiungere una o più tabelle nel database selezionato del nodo primario e controllare il database del nodo replica per verificare che il contenuto aggiornato di Il database primario viene replicato correttamente nel database del nodo replica o no.

Inserire nuovi record nel nodo primario:

Eseguire le seguenti istruzioni SQL per inserire tre record nel libro Tabella del server primario.

# Insert in Book (Titolo, Author_Name)
Valori ('The Art of Postgresql', 'Dimitri Fontaine'),
;,
("Libro di cucina ad alta performance postgresql", "Chitij Chauhan, Dinesh Kumar");

Eseguire il comando seguente per verificare il contenuto corrente di libro Tabella nel nodo primario.

# Seleziona * dal libro;

Il seguente output mostra che tre nuovi record sono stati inseriti correttamente nella tabella.

Controllare il nodo replica dopo l'inserimento

Ora, devi verificare se il libro La tabella del nodo replica è stata aggiornata o no. Accedi al server PostgreSQL del nodo replica ed esegui il comando seguente per verificare il contenuto del libro tavolo.

# Table Book;

Il seguente output mostra che tre nuovi record sono stati inseriti nel libri tavolo del replica nodo inserito nel primario nodo del libro tavolo. Quindi, le modifiche nel database principale sono state replicate correttamente nel nodo replica.

Aggiorna il record nel nodo principale

Esegui il seguente comando di aggiornamento che aggiornerà il valore del nome dell'autore campo in cui il valore del campo ID è 2. C'è solo un record in libro Tabella che corrisponde alla condizione della query di aggiornamento.

# Aggiorna il set di libri autore_name = "fahmida" dove id = 2;

Eseguire il comando seguente per verificare il contenuto corrente di libro tavolo nel primario nodo.

# Seleziona * dal libro;

Il seguente output lo mostra il Name Author_ Il valore di campo del record particolare è stato aggiornato dopo aver eseguito la query di aggiornamento.

Controlla il nodo replica dopo l'aggiornamento

Ora, devi verificare se il libro La tabella del nodo replica è stata aggiornata o no. Accedi al server PostgreSQL del nodo replica ed esegui il comando seguente per verificare il contenuto del libro tavolo.

# Table Book;

Il seguente output mostra che un record è stato aggiornato in libro Tabella del nodo replica, che è stato aggiornato nel nodo primario del libro tavolo. Quindi, le modifiche nel database principale sono state replicate correttamente nel nodo replica.

Elimina il record nel nodo primario

Esegui il seguente comando Elimina che eliminerà un record dal libro tavolo del primario nodo in cui il valore del campo Author_name è "Fahmida". C'è solo un record in libro Tabella che corrisponde alla condizione della query Elimina.

# Elimina dal libro dove autore_name = "fahmida";

Eseguire il comando seguente per verificare il contenuto corrente di libro tavolo nel primario nodo.

# Seleziona * dal libro;

Il seguente output mostra che un record è stato eliminato dopo aver eseguito la query Elimina.

Controlla il nodo replica dopo l'eliminazione

Ora, devi verificare se il libro La tabella del nodo replica è stata eliminata o meno. Accedi al server PostgreSQL del nodo replica ed esegui il comando seguente per verificare il contenuto del libro tavolo.

# Table Book;

Il seguente output mostra che un record è stato eliminato nel libro Tabella del nodo replica, che è stato eliminato nel nodo primario del libro tavolo. Quindi, le modifiche nel database principale sono state replicate correttamente nel nodo replica.

Conclusione

Lo scopo della replica logica per mantenere il backup del database, l'architettura della replica logica, i vantaggi e gli svantaggi della replica logica e le fasi di implementazione della replica logica nel database PostgreSQL sono stati spiegati in questo tutorial con esempi. Spero che il concetto di replica logica venga cancellata per gli utenti e che gli utenti saranno in grado di utilizzare questa funzione nel loro database PostgreSQL dopo aver letto questo tutorial.