Avanceret PostgreSQL: Indeksering, partitionering og replikering · Lektion

Replikeringsslots og WAL-administration

Forstå replikeringsslots, der sikrer bevarelse af WAL, samt avancerede teknikker til administration af WAL-filer.

Lektion 3 af 411 trin

Replikeringsslots og WAL-administration er en gratis Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Avanceret PostgreSQL: Indeksering, partitionering og replikering, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.

WAL: PostgreSQL's hjerte

Kernen i PostgreSQL's pålidelighed og replikering er Write-Ahead Log (WAL). Du kan opfatte WAL som en journal, der registrerer alle ændringer i din database.

  • Hver transaktion skriver til WAL, før dataene committes til disken.
  • Det sikrer dataintegriteten, selv hvis serveren går ned.
  • Standbyservere bruger WAL til at genskabe ændringer fra den primære server og forblive synkroniserede.

Udfordringen ved opbevaring af WAL

Som standard genbruger PostgreSQL gamle WAL-filer for at spare diskplads. Det er fint for en selvstændig server, men skaber en udfordring for replikering.

Hvis en standbyserver kommer for langt bagefter, kan de nødvendige WAL-filer allerede være fjernet fra den primære server. Det fører til:

  • Replikationsfejl: Standbyserveren kan ikke indhente det forsømte.
  • Manuel indgriben: Der kræves en fuld gensynkronisering af standbyserveren.

Introduktion til replikationsslots

Replikationsslots er PostgreSQL's løsning på problemet med opbevaring af WAL. Et replikationsslot er et permanent objekt på den primære server, som forhindrer, at WAL-segmenter, der kræves af en standbyserver eller en logisk dekoder, automatisk fjernes.

  • De garanterer, at WAL-filer opbevares, indtil de er forbrugt.
  • De sporer hver tilsluttet forbrugers fremskridt.
  • Slots sikrer, at en standbyserver altid kan indhente det forsømte, selv efter en langvarig afbrydelse.

Sådan sikrer slots WAL-sikkerheden

Når en replikeringsslot er aktiv, sletter den primære server ikke WAL-filer, som slot'ens forbruger (f.eks. en standby-server eller en logisk dekodningsproces) endnu ikke har bekræftet som behandlet.

Det opretter et "bogmærke" i WAL-strømmen. Den primære server rydder først WAL-segmenter op, når alle aktive slots er kommet forbi dette punkt.

Oprettelse af en fysisk slot

Fysiske replikeringsslots bruges sammen med fysisk streamingreplikering. De holder styr på standby-serverens LSN (Log Sequence Number) og sikrer, at alle nødvendige WAL-filer bevares til denne standby-server.

Du opretter en fysisk slot ved at bruge funktionen pg_create_physical_replication_slot(). Erstat my_physical_slot med et beskrivende navn.

SELECT pg_create_physical_replication_slot('my_physical_slot');

Oprettelse af en logisk slot

Logiske replikeringsslots bruges til logisk replikering (PostgreSQL's pub/sub-model) eller andre programmer, der bruger logisk dekodning. De afkoder WAL til en strøm af logiske ændringer (f.eks. INSERT, UPDATE, DELETE).

Du angiver et plugin (f.eks. pgoutput til indbygget logisk replikering) for at definere, hvordan WAL-poster omdannes. Erstat my_logical_slot med det ønskede navn.

SELECT pg_create_logical_replication_slot('my_logical_slot', 'pgoutput');

Overvågning af replikeringsslots

Det er afgørende at overvåge dine replikeringsslots for at sikre, at de er aktive og ikke holder på for store mængder WAL-filer. Visningen pg_replication_slots indeholder detaljerede oplysninger:

  • slot_name: Slottens navn.
  • active: True, hvis en forbruger er tilsluttet i øjeblikket.
  • restart_lsn: Den ældste WAL-LSN, som slotten stadig har brug for.
  • confirmed_flush_lsn: For logiske slots den LSN, som forbrugeren har bekræftet.

Prøv at køre denne forespørgsel for at se eksisterende slots:

SELECT
  slot_name,
  slot_type,
  active,
  restart_lsn,
  pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS wal_lag
FROM pg_replication_slots;

Sletning af en replikeringsslot

Når en standby-server eller logisk forbruger ikke længere er nødvendig, er det vigtigt at slette dens replikeringsslot. En ubrugt slot vil fortsætte med at ophobe WAL-filer uden tidsbegrænsning og kan potentielt fylde diskpladsen på din primære server!

Brug funktionen pg_drop_replication_slot(), og angiv slottens navn. Vær forsigtig: Hvis du sletter en aktiv slot, bliver dens forbruger afbrudt.

SELECT pg_drop_replication_slot('my_physical_slot');

Håndtering af diskplads og inaktive slots

Replikeringsslots er effektive, men de medfører et ansvar: håndtering af diskplads. Inaktive slots er en almindelig årsag til, at primære servere løber tør for diskplads.

  • Kontrollér regelmæssigt pg_replication_slots for inaktive slots.
  • Hvis en standby-server er permanent offline, skal du straks slette dens slot.
  • Overvåg wal_lag (som vist i overvågningsforespørgslen) for at opdage langsomme forbrugere.

Proaktiv håndtering forebygger driftsafbrydelser!

Quiz om slot-håndtering

Du har en primær server og en standby-server, som blev taget ud af drift i sidste uge. Replikeringsslotten til denne standby-server, der hedder old_standby_slot, blev ikke slettet. Hvad er den mest sandsynlige konsekvens for din primære server?

Opsummering: Replikeringsslots

I denne lektion lærte vi om PostgreSQL's replikeringsslots, en vigtig funktion til robust replikering og logisk dekodning.

  • Slots garanterer, at WAL bevares til tilsluttede forbrugere.
  • Der findes to typer: fysiske til streamingreplikering og logiske til logisk dekodning.
  • Du kan oprette, overvåge (med pg_replication_slots) og ikke mindst slette slots.
  • Håndter altid dine slots omhyggeligt for at undgå problemer med diskplads forårsaget af inaktive slots!
Gratis at komme i gang

Lær Avanceret PostgreSQL: Indeksering, partitionering og replikering med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
11
Lektioner
44

Ofte stillede spørgsmål

Er lektionen “Replikeringsslots og WAL-administration” gratis?

Ja — hele teksten til “Replikeringsslots og WAL-administration” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset, skal du opgradere til CoddyKit PRO. Avanceret PostgreSQL: Indeksering, partitionering og replikering-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Replikeringsslots og WAL-administration”?

Forstå replikeringsslots, der sikrer bevarelse af WAL, samt avancerede teknikker til administration af WAL-filer. Du øver dig i Avanceret PostgreSQL: Indeksering, partitionering og replikering med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Avanceret PostgreSQL: Indeksering, partitionering og replikering?

Der kræves ingen tidligere erfaring. Avanceret PostgreSQL: Indeksering, partitionering og replikering på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Replikeringsslots og WAL-administration”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektion?

Ja. Alle Avanceret PostgreSQL: Indeksering, partitionering og replikering-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Kaskadereplikering
  2. Multi-master-replikering (BDR)
  3. Replikeringsslots og WAL-administration
  4. Logisk decoding og Change Data Capture
← Tilbage til Avanceret PostgreSQL: Indeksering, partitionering og replikering