Replikering er deling af transaktionsdata på tværs af flere servere for at sikre sammenhæng mellem redundante databasenoder. En master vil tage inserts eller opdateringer og anvende dem på sit datasæt, mens slaverne vil ændre deres data i overensstemmelse med ændringerne i masterdatasættet. Masteren omtales almindeligvis som en primær, og den registrerer ændringerne i en Write Ahead Log (WAL). På den anden side omtales slaver som sekundære, og de replikerer deres data fra REDO-logfilerne - i dette tilfælde WAL.
Der er mindst 3 replikeringstilgange i PostgreSQL:
Indbygget replikering eller streaming replikering.
I denne tilgang replikeres data fra den primære knude til den sekundære knude. Det kommer dog med en række tilbageslag, som er:
- Vanskeligheder med at introducere en ny sekundær. Det vil kræve, at du replikerer hele tilstanden, hvilket kan være ressourcekrævende.
- Mangel på indbygget overvågning og failover. En sekundær skal forfremmes til en primær i tilfælde af sidstnævnte fiasko. Ofte kan denne kampagne resultere i datainkonsistens under primærens fravær.
Rekonstruerer fra WAL
Denne tilgang anvender på en eller anden måde streaming-replikeringstilgangen, da sekundærerne er rekonstrueret fra en sikkerhedskopi lavet af den primære. Den primære foretager en fuld database backup efter hver dag udover en trinvis backup for hvert 60. sekund. Fordelen ved denne tilgang er, at der ikke udsættes yderligere belastning for den primære, før de sekundære er tæt nok på den primære, således at de begynder at streame Write Ahead Log (WAL) for at indhente den. Med denne tilgang kan du tilføje eller fjerne replikaer uden at påvirke ydeevnen af din PostgreSQL-database.
Volume Level Repplication for PostgreSQL (Disk Mirroring)
Dette er en generisk tilgang, der ikke kun gælder for PostgreSQL, men også alle relationelle databaser. Vi vil gøre brug af Distributed Replicated Block Device (DRBD), et distribueret replikeret lagersystem til Linux. Det er beregnet til at fungere ved at spejle indholdet, der er gemt i en servers lager, til et andet. En simpel illustration af strukturen er vist nedenfor.
DRBD kan betragtes som en abstraktion fra diskenheden, der er vært for PostgreSQL-databasen, men operativsystemet vil aldrig vide, at dets data også er placeret på en anden server. Ved at bruge denne tilgang kan du ikke kun dele dataene, men også filsystemet til mere end 1 server. Skrivninger til DRBD er derfor fordelt mellem alle servere, hvorved hver server vil skrive information til en lokal fysisk harddisk (blokenhed). Når en skriveoperation anvendes til den primære, optages den derefter til DRBD'en og distribueres derefter til de sekundære DRBD-servere. På den anden side, hvis den sekundære modtager skriveoperationerne gennem DRBD, bliver de derefter skrevet til den lokale fysiske enhed. I tilfælde af failover-understøttelse giver DRBD'en høj tilgængelighed af data, da informationen deles mellem en primær og mange sekundære noder, som er linet synkront på blokniveau.
DRBD-konfigurationen ville kræve en ekstra ressource kendt som Heartbeat, som vi vil diskutere i en anden artikel, for at forbedre understøttelsen af automatisk failover. Pakken administrerer grundlæggende grænsefladen på de flere servere og konfigurerer automatisk en af de sekundære servere til primær i tilfælde af fejl.
Installation og konfiguration af DRBD
Den foretrukne metode til at installere DRBD er at bruge de forudbyggede binære installationspakker. Sørg for, at kerneversionen af pakkerne matcher din aktive aktuelle kerne.
Konfigurationsfilerne for alle noder, der er primære eller sekundære, skal være identiske. Hvis det også er nødvendigt for dig at opgradere din kerneversion, skal du sørge for, at den tilsvarende kerne-modul-drdb er tilgængelig for din nye kerneversion.
DRBD-opsætning for primær node
Dette er det første trin, hvor du bliver nødt til at oprette en DRBD-blokenhed og et filsystem, som du kan gemme dine data med. Konfigurationsfilen kan findes på /etc/drbd.conf. Filen definerer en række parametre for DRBD-konfigurationen, som inkluderer:blokstørrelser, definition af sikkerhedsoplysninger for de DRBD-enheder, du vil oprette og opdateringsfrekvens. Konfigurationerne kan være begrænset til at være globale eller bundet til en bestemt ressource. De involverede trin er:
-
Synkroniseringshastighed, som definerer den hastighed, hvormed enheder forbindes synkront i baggrunden efter en diskudskiftning, fejl eller indledende opsætning. Dette kan indstilles ved at redigere rateparameteren i synkroniseringsblokken:
syncer{ rate 15M }
-
Godkendelsesopsætning for at sikre, at kun værter med den samme delte hemmelighed er i stand til at tilslutte sig DRBD-nodegruppen. Adgangskoden er en hash-udvekslingsmekanisme, der understøttes i DRBD.
cram-hmac-alg “sha1” shared-secret “hash-password-string”
-
Konfiguration af værtsinformation. Nodeinformationen såsom værten kan findes i hver af nodernes drbd.conf-fil. Nogle af de parametre, der skal konfigureres, er:
- Adresse:IP-adresse og portnummer på værten, der holder DRBD-enheden.
- Enhed:Stien til den logiske blokenhed, der er oprettet af DRBD.
- Disk:Det henviser til den blokerede enhed, der gemmer dataene.
- Meta-disk:Den gemmer DRBD-enhedens metadata. Dens størrelse kan være op til 128MB. Du kan indstille det til at være den interne disk, så DRBD'en bruger fysisk blokeringsenhed til at gemme disse oplysninger i de sidste sektioner af disken.
En simpel konfiguration for den primære:
on drbd-one { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.40:8080; meta-disk internal; }
Konfigurationen skal gentages med de sekundære med IP-adressen, der matcher dens korrespondentvært.
on drbd-two { device /dev/drbd0; disk /dev/sdd1; address 192.168.103.41:8080; meta-disk internal; }
-
Oprettelse af metadata for enhederne ved hjælp af denne kommando:
Denne proces er obligatorisk, før du starter den primære node.$ drbdadm create-md all
- Start DRBD med denne kommando:
Dette gør det muligt for DRBD at starte, initialisere og oprette de DRBD-definerede enheder.$ /etc/init.d/drbd start
- Marker den nye enhed som den primære, og initialiser enheden ved hjælp af denne kommando:
Lav et filsystem på blokenheden for at gøre en standard blokenhed oprettet af DRBD brugbar.$ drbdadm -- --overwrite-data-of-peer primary all
- Gør den primære klar til brug ved at montere filsystemet. Disse kommandoer bør forberede den for dig:
$ mkdir /mnt/drbd $ mount /dev/drbd0 /mnt/drbd $ echo “DRBD Device” > /mnt/drbd/example_file
DRBD-opsætning for den sekundære node
Du kan bruge de samme trin ovenfor bortset fra at oprette filsystemet på en sekundær node, da informationen automatisk overføres fra den primære node.
-
Kopier filen /etc/drbd.conf fra den primære node til den sekundære node. Denne fil indeholder den nødvendige information og konfiguration.
-
Opret DRBD-metadata på den underliggende diskenhed ved hjælp af kommandoen:
$ drbdadm create-md all
-
Start DRBD med kommandoen:
DRBD vil begynde at kopiere data fra den primære node til den sekundære node, og tiden afhænger af størrelsen af data, der skal overføres. Hvis du ser filen /proc/drbd, kan du se fremskridtene.$ /etc/init.d/drbd start
$ cat /proc/drbd version: 8.0.0 (api:80/proto:80) SVN Revision: 2947 build by [email protected], 2018-08-24 16:43:05 0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:252284 nr:0 dw:0 dr:257280 al:0 bm:15 lo:0 pe:7 ua:157 ap:0 [==>.................] sync'ed: 12.3% (1845088/2097152)K finish: 0:06:06 speed: 4,972 (4,580) K/sec resync: used:1/31 hits:15901 misses:16 starving:0 dirty:0 changed:16 act_log: used:0/257 hits:0 misses:0 starving:0 dirty:0 changed:0
-
Overvåg synkroniseringen ved hjælp af urkommandoen med bestemte intervaller
$ watch -n 10 ‘cat /proc/drbd‘
DRBD-installationsstyring
For at holde styr på DRBD-enhedens status bruger vi /proc/drbd.
Du kan indstille tilstanden for alle lokale enheder til at være primær ved hjælp af kommandoen
$ drbdadm primary all
Gør en primær enhed sekundær
$ drbdadm secondary all
For at afbryde DRBD-noder
$ drbdadm disconnect all
Gentilslut DRBD-noderne
$ drbd connect all
Download Whitepaper Today PostgreSQL Management &Automation med ClusterControlFå flere oplysninger om, hvad du skal vide for at implementere, overvåge, administrere og skalere PostgreSQLDownload Whitepaper Konfiguration af PostgreSQL til DRBD
Dette involverer at vælge en enhed, som PostgreSQL'en vil gemme data for. For en ny installation kan du vælge at installere PostgreSQL helt på DRBD-enheden eller en datamappe, der skal placeres på det nye filsystem og skal være i den primære node. Dette skyldes, at den primære node er den eneste, der har tilladelse til at montere et DRBD-enhedsfilsystem som læse/skrive. Postgres-datafilerne arkiveres ofte i /var/lib/pgsql, hvorimod konfigurationsfilerne er gemt i /etc/sysconfig/pgsql.
Opsætning af PostgreSQL til at bruge den nye DRBD-enhed
-
Hvis du har nogen kørende PostgreSQL, stop dem med denne kommando:
$ /etc/init.d/postgresql -9.0
-
Opdater DRBD-enheden med konfigurationsfilerne ved hjælp af kommandoerne:
$ mkdir /mnt/drbd/pgsql/sysconfig $ cp /etc/sysconfig/pgsql/* /mnt/drbd/pgsql/sysconfig
-
Opdater DRBD med PostgreSQL-datamappe og systemfiler ved hjælp af:
$ cp -pR /var/lib/pgsql /mnt/drbd/pgsql/data
-
Opret et symbolsk link til den nye konfigurationsmappe på DRBD-enhedens filsystem fra /etc/sysconfig/pgsql ved hjælp af kommandoen:
$ ln -s /mnt/drbd/pgsql/sysconfig /etc/sysconfig/pgsql
-
Fjern mappen /var/lib/pgsql, afmonter /mnt/drbd/pgsql og monter drbd-enheden til /var/lib/pgsql.
-
Start PostgreSQL med kommandoen:
$ /etc/init.d/postgresql -9.0 start
PostgreSQL-dataene skulle nu være til stede på filsystemet, der kører på din DRBD-enhed under den konfigurerede enhed. Indholdet af databaserne kopieres også til den sekundære DRBD-knude, men det kan ikke tilgås, da DRBD-enheden, der arbejder i den sekundære knude, kan være fraværende.
Vigtige funktioner med DRBD-metoden
- Indstillingsparametrene er meget tilpasselige.
- Eksisterende implementeringer kan nemt konfigureres med DRBD uden tab af data.
- Læseanmodninger er lige afbalancerede
- Den delte hemmelige autentificering sikrer konfigurationen og dens data.