Hvordan sette opp PostgreSQL logisk replikasjon på Ubuntu

Hvordan sette opp PostgreSQL logisk replikasjon på Ubuntu
“Data er en veldig viktig del av enhver applikasjon. PostgreSQL er en populær databaseserver for å lagre dataene til applikasjonen. Datatilgjengelighet er en viktig funksjon i en hvilken som helst database. Det er bedre å oppbevare flere kopier av databasen for å sikre datatilgjengeligheten til applikasjonen. Hvis ingen sikkerhetskopiering av databasen er lagret, og hvis databasen krasjer når som helst, vil ikke applikasjonen være tilgjengelig. Ett eller flere eksemplarer av PostgreSQL -databasen kan lagres for å unngå denne situasjonen, og det kalles replikasjon. To typer replikering kan gjøres på PostgreSQL. Dette er logisk replikasjon og fysisk replikasjon. Måten å sette opp logisk replikering av PostgreSQL -databasen er blitt forklart i denne opplæringen.”

Logisk replikasjon

Måten å gjenskape dataobjektene og endringene deres kalles logisk replikasjon. Det fungerer basert på publisering og abonnement. Den bruker WAL (Writ-Ahead Logging) for å registrere de logiske endringene i databasen. Endringene i databasen er publisert i Publisher-databasen, og abonnenten mottar den replikerte databasen fra utgiveren i sanntid for å sikre synkroniseringen av databasen.

Arkitekturen for logisk replikasjon

Publisher/Abonnentmodellen brukes i PostgreSQL logisk replikasjon. Replikasjonssettet er publisert på utgivernoden. En eller flere publikasjoner abonneres av abonnentnoden. Den logiske replikasjonen kopierer et øyeblikksbilde av publiseringsdatabasen til abonnenten, som kalles tabellsynkroniseringsfasen. Transaksjonell konsistens opprettholdes ved å bruke forpliktelse når noen endring gjøres på abonnentnoden. Den manuelle metoden for PostgreSQL logisk replikasjon er vist i neste del av denne opplæringen.

Den logiske replikasjonsprosessen er vist i følgende diagram.

Alle driftstyper (sett inn, oppdater og slett) er replikert i logisk replikering som standard. Men endringene i objektet som vil bli replikert kan være begrenset. Replikasjonsidentiteten må konfigureres for objektet som er nødvendig for å legge til publikasjonen. Primær- eller indeksnøkkelen brukes til replikasjonsidentiteten. Hvis tabellen over kildedatabasen ikke inneholder noen primær- eller indeksnøkkel, så er full vil bli brukt til replika -identiteten. Det betyr at alle kolonnene i tabellen vil bli brukt som en nøkkel. Publikasjonen vil bli opprettet i kildedatabasen ved å bruke Create Publication -kommando, og abonnementet vil bli opprettet i destinasjonsdatabasen ved å bruke CREATE Abonnement -kommandoen. Abonnementet kan stoppes eller gjenopptas ved å bruke alter abonnementskommando og fjernes med drop abonnementskommandoen. Logisk replikering implementeres av Wal -avsenderen, og den er basert på Wal Decoding. Wal -avsenderen laster den standard logiske avkodingsplugin. Denne plugin forvandler endringene hentet fra WAL til den logiske replikasjonsprosessen, og dataene blir filtrert basert på publikasjonen. Deretter overføres dataene kontinuerlig ved å bruke replikasjonsprotokollen til replikasjonsarbeideren som kartlegger dataene med tabellen til destinasjonsdatabasen og bruker endringene basert på transaksjonsordren.

Logiske replikasjonsfunksjoner

Noen viktige funksjoner ved logisk replikasjon er nevnt nedenfor.

  • Dataobjektene replikerer basert på replikasjonsidentiteten, for eksempel den primære tasten eller den unike nøkkelen.
  • Ulike indekser og sikkerhetsdefinisjoner kan brukes til å skrive data til destinasjonsserveren.
  • Hendelsesbasert filtrering kan gjøres ved å bruke logisk replikasjon.
  • Logisk replikering støtter kryssversjon. Det betyr at det kan implementeres mellom to forskjellige versjoner av PostgreSQL -databasen.
  • Flere abonnement støttes av publikasjonen.
  • Det lille settet med tabeller kan replikeres.
  • Det tar minimum serverbelastning.
  • Det kan brukes til oppgraderinger og migrasjon.
  • Det tillater parallell streaming blant utgiverne.

Fordeler med logisk replikasjon

Noen fordeler med logisk replikasjon er nevnt nedenfor.

  • Det brukes til replikering mellom to forskjellige versjoner av PostgreSQL -databaser.
  • Det kan brukes til å gjenskape data mellom forskjellige grupper av brukere.
  • Det kan brukes til å bli med på flere databaser i en enkelt database for analytiske formål.
  • Det kan brukes til å sende inkrementelle endringer i en delmengde av en database eller en enkelt database til andre databaser.

Ulemper med logisk replikasjon

Noen begrensninger i den logiske replikasjonen er nevnt nedenfor.

  • Det er obligatorisk å ha den primære nøkkelen eller den unike nøkkelen i tabellen til kildedatabasen.
  • Det fulle kvalifiserte navnet på tabellen er påkrevd mellom publikasjonen og abonnementet. Hvis tabellnavnet ikke er det samme for kilden og destinasjonen, vil den logiske replikasjonen ikke fungere.
  • Det støtter ikke toveis replikasjon.
  • Det kan ikke brukes til å gjenskape skjema/ddl.
  • Den kan ikke brukes til å gjenskape avkortet.
  • Den kan ikke brukes til å gjenskape sekvenser.
  • Det er obligatorisk å legge superbrukerprivilegier til alle tabeller.
  • Ulike rekkefølger av kolonner kan brukes i destinasjonsserveren, men kolonnenavnene må være de samme for abonnementet og publikasjonen.

Implementering av logisk replikasjon

Trinnene for å implementere logisk replikasjon i PostgreSQL -databasen er vist i denne delen av denne opplæringen.

Forutsetninger

EN. Sett opp master- og replikatnodene

Du kan stille mesteren og replikatnodene på to måter. En måte er å bruke to separate datamaskiner der Ubuntu -operativsystem er installert, og en annen måte er å bruke to virtuelle maskiner som er installert på samme datamaskin. Testprosessen med den fysiske replikasjonsprosessen vil være enklere hvis du bruker to separate datamaskiner for hovednoden og replikatnoden fordi en spesifikk IP -adresse enkelt kan tilordnes for hver datamaskin. Men hvis du bruker to virtuelle maskiner på samme datamaskin, må den statiske IP -adressen være angitt for hver virtuelle maskin og sørge for at begge virtuelle maskiner kan kommunisere med hverandre gjennom den statiske IP -adressen. Jeg har brukt to virtuelle maskiner for å teste den fysiske replikasjonsprosessen i denne opplæringen. Vertsnavnet til herre Noden er satt til Fahmida-Master, og vertsnavnet til replika Noden er satt til Fahmida-slave her.

B. Installer PostgreSQL på både master- og replikatnoder

Du må installere den nyeste versjonen av PostgreSQL -databaseserveren på to maskiner før du starter trinnene i denne opplæringen. PostgreSQL versjon 14 har blitt brukt i denne opplæringen. Kjør følgende kommandoer for å sjekke den installerte versjonen av PostgreSQL i masternoden.

Kjør følgende kommando for å bli rotbruker.

$ sudo -i

Kjør følgende kommandoer for å logge på som en Postgres -bruker med Superuser -privilegier og ta forbindelsen med PostgreSQL -databasen.

$ su - postgres
$ psql

Utgangen viser at PostgreSQL versjon 14.4 er installert på Ubuntu versjon 22.04.1.

Primære nodekonfigurasjoner

De nødvendige konfigurasjonene for primærnoden er vist i denne delen av opplæringen. Etter å ha satt opp konfigurasjonen, må du opprette en database med tabellen i den primære noden og opprette en rolle og publikasjon for å motta en forespørsel fra replika -noden, og lagre det oppdaterte innholdet i tabellen i replikatnoden.

EN. Endre PostgreSql.konf fil

Du må sette opp IP -adressen til den primære noden i PostgreSQL -konfigurasjonsfilen som heter PostgreSql.konf som ligger på stedet, /etc/postgreSql/14/main/postgreSql.konf. Logg inn som rotbruker i den primære noden og kjør følgende kommando for å redigere filen.

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

Finn ut listen_addresses Variabel i filen, fjern hasj (#) fra begynnelsen av variabelen for å være ukommsomme linjen. Du kan angi en stjerne (*) eller IP -adressen til den primære noden for denne variabelen. Hvis du setter stjerne (*), vil den primære serveren lytte til alle IP -adresser. Den vil lytte til den spesifikke IP -adressen hvis IP -adressen til den primære serveren er satt til denne variabelen. I denne opplæringen er IP -adressen til den primære serveren som er satt til denne variabelen 192.168.10.5.

listen_addressess = “

Neste, finn ut Wal_level variabel for å angi replikasjonstypen. Her vil verdien av variabelen være logisk.

wal_level = logisk

Kjør følgende kommando for å starte PostgreSQL -serveren på nytt etter å ha endret PostgreSql.konf fil.

$ SystemCTL Restart PostgreSql

*** Merk: Etter å ha satt opp konfigurasjonen, hvis du står overfor et problem med å starte PostgreSQL -serveren, må du kjøre følgende kommandoer for PostgreSQL versjon 14.

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

Du vil kunne koble deg til PostgreSQL -serveren etter å ha utført kommandoen ovenfor.

Logg inn på PostgreSQL -serveren og kjør følgende uttalelse for å sjekke gjeldende WAL -nivåverdi.

# Vis wal_level;

B. Lag en database og tabell

Du kan bruke hvilken som helst eksisterende PostgreSQL -database eller opprette en ny database for å teste den logiske replikasjonsprosessen. Her er det opprettet en ny database. Kjør følgende SQL -kommando for å opprette en database som heter prøvetatt.

# Opprett databaseprøveb;

Følgende utdata vises hvis databasen opprettes vellykket.

Du må endre databasen for å lage en tabell for sampledb. "\ C" med databasenavnet brukes i PostgreSQL for å endre den gjeldende databasen.

Følgende SQL -setning vil endre den gjeldende databasen fra Postgres til sampledb.

# \ c sampledb

Følgende SQL -setningen vil opprette en ny tabell som heter bok i sampledb -databasen. Tabellen vil inneholde tre felt. Disse er ID, tittel og forfatternavn.

# Lag bordbok (
ID Seriell primærnøkkel,
Tittel varchar (50),
forfatternavn varchar (50));

Følgende utgang vises etter å ha utført ovennevnte SQL -setninger.

Kjør følgende to innsatserklæringer for å sette inn to poster i bokbordet.

# Sett inn i bok (tittel, forfatternavn)
Verdier ('PostgreSql 14 Administration Cookbook', 'Simon Riggs, Gianni Ciolli');
# Sett inn i bok (tittel, forfatternavn)
Verdier ('Lær postgreSql', 'Luca Ferrari, Enrico Pirozzi');

Følgende utdata vises hvis postene er satt inn.

Kjør følgende kommando for å opprette en rolle med passordet som vil bli brukt til å opprette en forbindelse med den primære noden fra replikatnoden.

# Opprett rolle Replicauser Replication Login Password '12345';

Følgende utgang vises hvis rollen opprettes med hell.

Kjør følgende kommando for å gi alle tillatelser på bok Tabell for Replicauser.

# Gi alt på bok til replicauser;

Følgende utdata vises hvis det er gitt tillatelse til Replicauser.

C. Endre PG_HBA.konf fil

Du må sette opp IP -adressen til replika -noden i PostgreSQL -konfigurasjonsfilen som heter PG_HBA.konf som ligger på stedet, /etc/postgreSql/14/main/pg_hba.konf. Logg inn som rotbruker i den primære noden og kjør følgende kommando for å redigere filen.

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

Legg til følgende informasjon på slutten av denne filen.

vert /32 SCRAM-SHA-256

IP -en til slaveserveren er satt til “192.168.10.10 ”her. I henhold til de foregående trinnene er følgende linje blitt lagt til i filen. Her er databasenavnet sampledb, brukeren er Replicauser, og IP -adressen til replikaserveren er 192.168.10.10.

Vertssampletb replicauser 192.168.10.10/32 SCRAM-SHA-256

Kjør følgende kommando for å starte PostgreSQL -serveren på nytt etter å ha endret PG_HBA.konf fil.

$ SystemCTL Restart PostgreSql

D. Opprett publikasjon

Kjør følgende kommando for å opprette en publikasjon for bok bord.

# Opprett publikasjon BookPub for Table Book;

Kjør følgende PSQL-metakommando for å bekrefte at publikasjonen er opprettet med hell eller ikke.

$ \ DRP+

Følgende utgang vises hvis publikasjonen opprettes med hell for tabellen bok.

Replikatnodekonfigurasjoner

Du må opprette en database med den samme tabellstrukturen som ble opprettet i den primære noden i replikatnoden og opprette et abonnement for å lagre det oppdaterte innholdet i tabellen fra primærnoden.

EN. Lag en database og tabell

Du kan bruke hvilken som helst eksisterende PostgreSQL -database eller opprette en ny database for å teste den logiske replikasjonsprosessen. Her er det opprettet en ny database. Kjør følgende SQL -kommando for å opprette en database som heter Replicadb.

# Opprett database Replicadb;

Følgende utdata vises hvis databasen opprettes vellykket.

Du må endre databasen for å lage en tabell for Replicadb. Bruk “\ C” med databasenavnet for å endre den gjeldende databasen som før.

Følgende SQL -setning vil endre den gjeldende databasen fra Postgres til Replicadb.

# \ c replicadb

Følgende SQL -setning vil opprette en ny tabell som heter bok inn i det Replicadb database. Tabellen vil inneholde de samme tre feltene som tabellen som er opprettet i den primære noden. Disse er ID, tittel og forfatternavn.

# Lag bordbok (
ID Seriell primærnøkkel,
Tittel varchar (50),
forfatternavn varchar (50));

Følgende utgang vises etter å ha utført ovennevnte SQL -setninger.

B. Lag abonnement

Kjør følgende SQL -setning for å opprette et abonnement for databasen til den primære noden for å hente det oppdaterte innholdet i bokbordet fra den primære noden til replikatnoden. Her er databasenavnet til den primære noden sampledb, IP -adressen til den primære noden er “192.168.10.5”, Brukernavnet er Replicauser, og passordet er "12345”.

# Opprett abonnement Booksub Connection 'DBName = SampleDB Host = 192.168.10.5 Bruker = Replicauser Password = 12345 Port = 5432 'Publikasjon BookPub;

Følgende utdata vises hvis abonnementet opprettes med suksess i replika -noden.

Kjør følgende PSQL-metakommando for å bekrefte at abonnementet opprettes med suksess eller ikke.

# \ drs+

Følgende utgang vises hvis abonnementet opprettes med hell for tabellen bok.

C. Sjekk tabellinnholdet i replikatnoden

Kjør følgende kommando for å sjekke innholdet i bokbordet i replikatnoden etter abonnement.

# tabellbok;

Følgende utgang viser at to poster som ble satt inn i tabellen til primærnoden er lagt til tabellen til replikatnoden. Så det er klart at den enkle logiske replikasjonen er fullført riktig.

Du kan legge til ett eller flere poster eller oppdatere poster eller slette poster i boktabellen til den primære noden eller legge til en eller flere tabeller i den valgte databasen til den primære noden og sjekke databasen til replika -noden for å bekrefte at det oppdaterte innholdet i Den primære databasen er replisert riktig i databasen til replikatnoden eller ikke.

Sett inn nye poster i den primære noden:

Kjør følgende SQL -setninger for å sette inn tre poster i bok Tabell over den primære serveren.

# Sett inn i bok (tittel, forfatternavn)
Verdier ('The Art of PostgreSql', 'Dimitri Fontaine'),
('PostgreSql: Up and Runce, 3. utgave', 'Regina Obe og Leo Hsu'),
('PostgreSql High Performance Cookbook', 'Chitij Chauhan, Dinesh Kumar');

Kjør følgende kommando for å sjekke gjeldende innhold i bok Tabell i primærnoden.

# Velg * fra boken;

Følgende utgang viser at tre nye poster er satt inn riktig i tabellen.

Sjekk replikatnoden etter innsetting

Nå må du sjekke om bok Tabell over replikatnoden er oppdatert eller ikke. Logg inn på PostgreSQL -serveren til replikanoden og kjør følgende kommando for å sjekke innholdet i bok bord.

# tabellbok;

Følgende utgang viser at tre nye poster er satt inn i bøker tabell over replika Node som ble satt inn i hoved node av bok bord. Så endringene i hoveddatabasen er replisert riktig i replikatnoden.

Oppdateringspost i den primære noden

Kjør følgende oppdateringskommando som vil oppdatere verdien av forfatternavn felt der verdien av ID -feltet er 2. Det er bare en rekord i bok Tabell som samsvarer med tilstanden til oppdateringsspørsmålet.

# Oppdater boksett Author_name = “Fahmida” hvor ID = 2;

Kjør følgende kommando for å sjekke gjeldende innhold i bok bord i hoved Node.

# Velg * fra boken;

Følgende utgang viser det forfatternavnet Feltverdien av den aktuelle posten er oppdatert etter utførelse av oppdateringsspørsmålet.

Sjekk replikatnoden etter oppdateringen

Nå må du sjekke om bok Tabell over replikatnoden er oppdatert eller ikke. Logg inn på PostgreSQL -serveren til replikanoden og kjør følgende kommando for å sjekke innholdet i bok bord.

# tabellbok;

Følgende utgang viser at en post er oppdatert i bok Tabell over replikatnoden, som ble oppdatert i den primære noden til bok bord. Så endringene i hoveddatabasen er replisert riktig i replikatnoden.

Slett post i primærnoden

Kjør følgende slett -kommando som vil slette en post fra bok tabell over hoved Node der verdien av forfatternavn -feltet er “Fahmida”. Det er bare en rekord i bok Tabell som samsvarer med tilstanden til slettespørsmålet.

# Slett fra boken der forfatternavn = “fahmida”;

Kjør følgende kommando for å sjekke gjeldende innhold i bok bord i hoved Node.

# Velg * fra boken;

Følgende utdata viser at en post er blitt slettet etter å ha utført slettespørsmålet.

Sjekk replikatnoden etter slettet

Nå må du sjekke om bok Tabell over replikatnoden er slettet eller ikke. Logg inn på PostgreSQL -serveren til replikanoden og kjør følgende kommando for å sjekke innholdet i bok bord.

# tabellbok;

Følgende utgang viser at en post er slettet i bok Tabell over replikanoden, som ble slettet i den primære noden til bok bord. Så endringene i hoveddatabasen er replisert riktig i replikatnoden.

Konklusjon

Hensikten med logisk replikasjon for å holde sikkerhetskopi av databasen, arkitekturen til den logiske replikasjonen, fordelene og ulempene med den logiske replikasjonen, og trinnene for å implementere logisk replikasjon i PostgreSQL -databasen har blitt forklart i denne opplæringen med eksempler. Jeg håper konseptet logisk replikasjon vil bli ryddet for brukerne, og brukerne vil kunne bruke denne funksjonen i PostgreSQL -databasen etter å ha lest denne opplæringen.