Hvordan sette opp fysisk replikasjon med PostgreSQL

Hvordan sette opp fysisk replikasjon med PostgreSQL
“PostgreSQL er et populært open source relasjonsdatabasestyringssystem som støttes av det mest operativsystemet. Måten å beholde kopien av hoveddatabasen kalles replikasjon. Kopien av hoveddatabasen er replikert på de forskjellige fysiske serverne. Replikasjonen gjøres ved å stille inn master-slavekonfigurasjonen. Her fungerer masteren som den primære forekomsten og lagrer hovedkopien av databasen, og slaven fungerer som den sekundære forekomsten som lagrer den identiske kopien av hoveddatabasen. Masteren fungerer som lese-skriver-serveren, og slaven fungerer som den skrivebeskyttede serveren. To typer replikasjoner støttes av PostgreSQL-databasen som hjelper til med å implementere skalerbar, høy tilgjengelighet, feiltolerante applikasjoner. Dette er fysisk streamingreplikasjon og logisk replikasjon. Måten å sette opp fysisk eller streaming replikasjon med PostgreSQL -databasen er blitt forklart i denne opplæringen.”

Fysisk eller streaming replikasjon

Den mest brukte replikasjonsløsningen er Skriv frem logg (Wal) Frakt eller streaming replikasjon. Standby -databaseserveren eller replikasjonsslaven er konfigurert for å gjøre forbindelsen med primær/master -serveren. Wal -postene blir streamet til standby -serveren før du fyller Wal -filen. Dataene overføres til standby -serveren i en asynkron modus som standard. Det betyr at dataene overføres til Standby -serveren etter å ha begått transaksjonen i den primære serveren. Dette kan forårsake tap av data fordi hvis masterserveren krasjer uten å begå noen transaksjon, vil ikke den transaksjonen bli replikert til standby -serveren.

Arkitekturen til fysisk replikasjon

En bakgrunnsprosess som kalles Wal avsender starter på hovedmaskinen etter å ha satt opp konfigurasjonene av fysisk replikasjon. Den godtar en forespørsel fra standby og strømmer Wal -postene til standby kontinuerlig. En annen bakgrunnsprosess som kalles Wal -mottakeren starter på slavemaskinen som mottar og bruker endringene i hoveddatabasen til databasen til slavemaskinen. Den fysiske replikasjonen kan defineres med følgende diagram.

Fysiske replikasjonsfunksjoner

Hele dataene til en enkelt klynge kopieres av den fysiske replikasjonsprosessen, der klyngen er settet med databaser som administreres av PostgreSQL -databasen. Kildemaskinen kalles den primære serveren, og destinasjonsmaskinen kalles standby -serveren. Noen viktige funksjoner ved fysisk replikasjon er blitt nevnt nedenfor.

Wal -filer

Den bestilte serien med Wal -poster genereres av PostgreSQL -serveren. Disse postene vil bli transportert til en annen maskin ved å bruke fysisk replikasjon, og modifiseringen vil bli gjort i den lokale databasen. Wal -postene er delt inn i like store filer som kalles WAL -segmenter. Disse filene er opprettet på PG_WAL -katalogen, og gamle Wal -filer fjernes når de ikke er nødvendig lenger.

Varm, kald og varm standby

Hot-standby-serveren brukes til å lagre de oppdaterte dataene og la klientene utføre den skrivebeskyttede transaksjonen. Den kalde standby -serveren er ikke i gang normalt, og den starter når en feil oppstår. Den varme standby -serveren fungerer som den varme standby -serveren, bortsett fra at den ikke kan gjøre forbindelsen med klienten.

Gjenopprettingsmodus

Varm og varme standby -servere kjøres i gjenopprettingsmodus, og Postgres vil importere og bruke WAL -filer generert av en primær server i gjenopprettingsmodus.

Fordeler med fysisk eller streaming replikasjon

  • Den kan brukes til å beholde sikkerhetskopien av databasen og hjelper til med å hente dataene når den primære serveren krasjer.
  • Det er bedre å bruke skrivebeskyttet operasjoner.
  • Det garanterer at en kopi av den siste driften av primærserveren blir lagret.
  • En eller flere standby -servere kan kobles til den primære serveren, og logginformasjonsstrømmene fra den primære serveren til alle tilkoblede standby -servere. Hvis en av standby -serverne er koblet fra eller forsinket av en eller annen grunn, vil streamingen videreføres for en annen standby -server.
  • Hvis den primære serveren er koblet fra eller stengt av en eller annen grunn, vil den vente med å sende de oppdaterte dataene til standby -serveren før du slår av.

Ulemper ved fysisk eller streaming replikasjon

  • Den gjentar data asynkront som standard. Det betyr at WAL -filer som ikke er kopiert til standby -serveren, kan fjernes når endringer gjøres på den primære serveren. Det er bedre å sette en høyere verdi i Wal_keep_segmentene for å forhindre tap av data.
  • Den støtter ikke replikering mellom forskjellige PostgreSQL -servere.
  • Dataene er ikke sikrere i denne replikasjonen fordi de sensitive dataene kan hentes ut uten brukergodkjenning.
  • Det avkorter ikke kommandoen.
  • Den støtter ikke utenlandske tabeller, visninger og partisjonsrotbord.
  • Den støtter ikke stor gjenstandsreplikasjon.
  • Den støtter ikke databaseskjema og DDL -kommandoer.

Fysisk replikasjonsoppsett

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

Forutsetninger

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 masternoden er satt til Fahmida-Master, og vertsnavnet til replikatnoden er satt til Fahmida-slave her.

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 Postgres brukere med Superuser -privilegier og få en forbindelse med PostgreSQL -databasen.

$ su - postgres
$ psql

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

Du må installere den samme PostgreSQL -versjonen i replika -noden fordi den logiske replikasjonen ikke kan settes opp mellom forskjellige versjoner av PostgreSQL -serveren.

Primærkonfigurasjon

De nødvendige konfigurasjonene for primærnoden er vist i denne delen av opplæringen. Følgende oppgaver vil bli fullført i primærnoden.

  • Endre PostgreSQL.Conf -fil for å sette opp IP -adressen og WAL -nivået.
  • Opprett en rollebruker med det passordet for å opprette en forbindelse med den primære noden fra replikatnoden.
  • Endre PG_HBA.Conf -fil for å legge til nettverkstilkoblingsinformasjon

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 en replika.

wal_level = replika

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/14/bin/pg_ctl Restart -d/var/lib/postgreSql/14/main

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

Lag rolle/bruker for replikasjon

En rolle/bruker med spesifikk tillatelse er nødvendig for replikasjonen. Kjør følgende SQL -kommando for å opprette en rolle med brukeren for replikasjonen.

# Opprett rolle REPLICAUSER MED REPLIKASJONSLOGGASPORD '12345';

Følgende utgang vises hvis rollen opprettes med hell.

Endre PG_HBA.konf fil

Du må sette opp IP -adressen til den sekundære 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.

Verten /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.

Vertsreplikasjonsreplicauser 192.168.10.10/32 SCRAM-SHA-256

Start PostgreSQL -serveren på nytt

Kjør følgende kommando for å starte PostgreSQL -serveren på nytt som rotbruker.

$ SystemCTL Restart PostgreSql

Replikatnodekonfigurasjon

De nødvendige oppgavene vil bli gjort for replikatnoden der kopien av hoveddatabasen blir lagret. Det eksisterende databaseinnholdet i replika-noden vil bli fjernet for å holde opp igjen databasen til den primære noden og lage PostgreSQL-serveren til replika-noden skrivebeskyttet.

Stopp PostgreSQL -serveren på replikatnoden

Kjør følgende kommando etter å ha logget inn som rotbruker for å stoppe PostgreSQL -serveren.

$ SystemCTL Stop PostgreSql

Fjern det eksisterende innholdet i replikatnoden

Kjør følgende kommando for å fjerne eksisterende databaseinnhold fra PostgreSQL -serveren til replikanoden. Det er nødvendig for replikasjonsformål. Replikatnoden vil bli arbeidet i en skrivebeskyttet modus etter å ha utført følgende kommando

$ rm -rf/var/lib/postgreSql/14/main/*

Testing av den fysiske replikasjonsprosessen

Du må opprette en database med en eller flere tabeller i den primære noden for å teste om den fysiske replikasjonen fungerer som den skal eller ikke. Her, den eksisterende databasen som heter Postgres av den primære serveren har blitt brukt til testformål. Hvis du vil, kan du opprette tabellen ved å opprette en ny database. Følgende oppgaver vil bli utført i denne delen av opplæringen.

  • Legg til en ny tabell i den valgte databasen til primærnoden.
  • Legg til en post i tabellen.
  • Lagre kopien av databasen til den primære noden til replika -noden.
  • Lag en tabell i den primære serveren

Logg inn på PostgreSQL -databasen til den primære noden og kjør følgende SQL -setning for å opprette en ansatte tabell i den eksisterende databasen Postgres. Hvis du vil, kan du opprette en ny database og opprette tabellen ved å velge den nye databasen. Jeg opprettet ikke noen ny database her. Så tabellen vil bli opprettet i standarddatabasen. De ansattes bord vil inneholde 5 felt. Dette er ID, navn, adresse, e -post og telefon.

# Lag tabellansatte (
ID Seriell primærnøkkel,
Navn varchar (15) Ikke null,
Adresse tekst ikke null,
E -post varchar (30),
Telefon char (14) ikke null);

Kjør følgende SQL -setning for å sette inn en post i tabellen.

# Sett inn i ansatte (navn, adresse, e -post, telefon)
Verdier ('Farheen Hasan', '12/A, Dhanmondi, Dhaka.',' [email protected] ',' +8801826783423 ');
Kjør følgende SQL -uttalelse for å lese innholdet i de ansattes bord.
# Velg * fra ansatte;

Hvis tabellen opprettes og en post settes inn i tabellen, vil følgende utdata vises etter å ha utført SELECT -spørringen. En post ble satt inn i tabellen som vises i utgangen.

Kopier databasen til en replikaserver

Logg inn på PostgreSQL -databasen til replikaserveren og kjør følgende SQL -setning for å opprette en kopi av Postgres Database over den primære serveren til replika -serveren. Etter å ha utført uttalelsen, vil den be om passordet til brukeren som ble opprettet i forrige trinn. Hvis autentiseringen blir gjort med hell, vil replikasjonen bli startet.

# pg_basebackup -r -h 192.168.10.5 -u replicauser -d/var/lib/postgreSql/14/main -p

Følgende utgang viser at replikasjonen gjøres vellykket, og 34962 KB er blitt kopiert.

Kjør følgende kommando etter å ha fullført replikasjonen som rotbrukeren for å starte PostgreSQL -serveren på nytt i replikatnoden.

$ SystemCTL Restart PostgreSql

Logg deg på PostgreSQL -serveren på replikatnoden og kjør følgende SQL -setning for å sjekke om ansatte Tabellen er kopiert til replikatnoden eller ikke.

# Velg * fra ansatte;

Følgende utgang viser innholdet i ansatte tabell over replika Noden er den samme som innholdet i ansatte tabell over hoved Node.

Du kan legge til ett eller flere poster eller oppdatere poster eller slette poster i de ansattes tabell over primærnoden eller legge til en eller flere tabeller i den valgte databasen til den primære noden og sjekke databasen til replikatnoden for å bekrefte at det oppdaterte innholdet av den primære databasen er replikert riktig i databasen til replikatnoden eller ikke.

Sett inn nye poster i den primære noden:

Kjør nå følgende innsats -kommando for å legge til tre flere poster i de ansattes tabell over Postgres database som ligger i hoved Node.

# Sett inn i ansatte (navn, adresse, e -post, telefon)
Verdier ('Abir Hossain', '10, Jigatola, Dhaka.',' [email protected] ',' +8801888564345 '),
('Nila Chowdhury', '67/B, Mirpur, Dhaka.',' [email protected] ',' +8801799453123 '),
('Mizanur Rahman', '8/C, Malibag, Dhaka.',' [email protected] ',' +8801957864564 ');
Kjør følgende kommando for å sjekke gjeldende innhold i de ansattes tabell i primærnoden.
# Velg * fra ansatte;

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

Sjekk replikatnoden etter innsetting:

Nå må du sjekke om de ansatte tabellen over replikatnoden er oppdatert eller ikke. Logg inn på PostgreSQL -serveren til replikatnoden og kjør følgende kommando for å sjekke innholdet i de ansattes tabell.

# Velg * fra ansatte;

Følgende utgang viser at tre nye poster er satt inn i ansatte tabell over replika Node som ble satt inn i hoved node av ansatte 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 telefonfeltet der verdien av navnefeltet er “Nila Chowdhury”. Det er bare en rekord i ansatte Tabell som samsvarer med tilstanden til oppdateringsspørsmålet.

# Oppdater ansatte Sett telefon = “+8801911111111” hvor navn = “Nila Chowdhury”;

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

# Velg * fra ansatte;

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

Sjekk replikatnoden etter oppdateringen:

Nå må du sjekke om de ansatte tabellen over replikatnoden er oppdatert eller ikke. Logg inn på PostgreSQL -serveren til replikatnoden og kjør følgende kommando for å sjekke innholdet i de ansattes tabell.

# Velg * fra ansatte;

Følgende utgang viser at en post er oppdatert i ansatte tabell over replika Node, som ble oppdatert i hoved node av ansatte bord. Så endringene i hoveddatabasen er replisert riktig i replikatnoden.

Slett post i den primære noden:

Kjør følgende slett -kommando som vil slette en post fra ansatte tabell over hoved Node hvor verdien av e -postfeltet er “[email protected] ”. Det er bare en rekord i ansatte Tabell som samsvarer med tilstanden til slettespørsmålet.

# Slett fra ansatte der e -post = '[email protected] ';

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

# Velg * fra ansatte;

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

Sjekk replikatnoden etter å ha slettet posten:

Nå må du sjekke om de ansatte tabellen over replikatnoden er slettet eller ikke. Logg inn på PostgreSQL -serveren til replikatnoden og kjør følgende kommando for å sjekke innholdet i de ansattes tabell.

# Velg * fra ansatte;

Følgende utgang viser at en post er slettet i ansatte tabell over replika Node, som ble slettet i hoved node av ansatte bord. Så endringene i hoveddatabasen er replisert riktig i replikatnoden.

Konklusjon

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