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.
Vantaggi della replicazione logica
Di seguito sono menzionati alcuni vantaggi della replica logica.
Svantaggi della replicazione logica
Di seguito sono menzionate alcune limitazioni della replica logica.
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.