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
Ulemper ved fysisk eller streaming replikasjon
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.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 = replikaKjø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-256IP -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-256Start 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.
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 (Kjør følgende SQL -setning for å sette inn en post i tabellen.
# Sett inn i ansatte (navn, adresse, e -post, telefon)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 -pFø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)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.