Failover-slots instellen in PostgreSQL-17

PostgreSQL 17 introduceert failover-slots die high-availability setups verbeteren. Een replicatieslot zorgt ervoor dat data betrouwbaar en consistent blijft tussen nodes tijdens replicatie, terwijl een failover-slot consistentie tussen nodes garandeert, specifiek tijdens en na een failover.

Failover-slots zijn een krachtige functie die ervoor zorgt dat logische replicatie naadloos kan doorgaan, zelfs na een failover naar een standby-server. Het gebruik van failover-slots zorgt ervoor dat logische replicatieslots automatisch gesynchroniseerd worden over primaire en standby nodes, waardoor de downtime aanzienlijk wordt verminderd en de noodzaak voor handmatig ingrijpen tijdens een failover afneemt.

Deze handleiding begeleidt u bij het opzetten van een high-availability PostgreSQL-cluster met behulp van de nieuwe failover-slot-functie. Tegen het einde heeft u een robuuste replicatieopstelling die in staat is om een failover naadloos af te handelen. 

Waarom Failover-slots Belangrijk Zijn vanuit Historisch Perspectief

Uitdagingen in PostgreSQL 15

  • Replicatieslots Gekoppeld aan de Primaire Node: In PostgreSQL 15 werden replicatieslots alleen aangemaakt op de primaire server. Alle logische replicatieslots gingen verloren als de primaire server uitviel, wat leidde tot aanzienlijke replicatievertragingen en dataverlies.
  • Handmatig Beheer van Failover: Tijdens failoverscenario’s maakten beheerders handmatig replicatieslots opnieuw aan op de nieuwe primaire server, wat de complexiteit verhoogde, fouten introduceerde en de downtime verlengde.
  • Geen Sleuf Synchronisatie: Standby-servers wisten niet van het bestaan van logische replicatiesleuven op de primaire server. Dit gebrek aan synchronisatie leidde tot een volledige reset van de replicatiestromen bij een failover.

Verbeteringen in PostgreSQL 16

Minimale Logische Decodering

PostgreSQL 16 introduceerde een functie genaamd minimale logische decodering op standbys:

  • Minimale Decodering op Standby: Dit stelde standby-servers in staat om WAL-logs te decoderen om zich voor te bereiden op logische replicatie, waardoor voorverwarmde sleuven beschikbaar waren voor gebruik bij een failover.
  • Snellere Failover: Door vooraf WAL-wijzigingen te decoderen op de standby, was het mogelijk om de replicatievertraging te verminderen bij het promoveren van een standby naar de primaire server. Dit vereiste echter nog steeds enige handmatige configuratie om een soepele failover te garanderen.

PostgreSQL 17: De Game-Changer – Failover-sleuven

  • Failover-sleuven: De introductie van failover-sleuven in PostgreSQL 17 elimineert de noodzaak van handmatige interventie door automatisch logische replicatiesleuven te synchroniseren tussen de primaire en standby-servers.
  • Automatische Synchronisatie: De nieuwe sleuf-synchronisatiewerker zorgt ervoor dat failover-ingeschakelde sleuven (failover = true) altijd gesynchroniseerd zijn, zelfs wanneer de primaire node actief is.
  • Naadloze Overgang: Bij failover kan de standby-server de rol van primaire server overnemen zonder enige replicatieslots te verliezen, wat zorgt voor nul gegevensverlies en continue replicatie.

Functie

PostgreSQL 15

PostgreSQL 16

PostgreSQL 17

Logische Replicatie

Ja

Ja

Ja

Automatische Slot Synchronisatie

Nee

Minimale logische decodering op Standby

Volledige failover slots

Failover Beheer

Handmatige tussenkomst nodig

Voorverwarmde slots op standby

Automatische failover slots

Slot Synchronisatie naar Standby

Niet ondersteund

Minimaal, vereist configuratie

Automatisch met slotsync worker

Hoge Beschikbaarheid voor Logische Replicatie

Beperkt

Verbeterd met minimale decodering

Naadloos met failover slots

Een Hoge-Beschikbaarheidscluster maken met Failover Slots

In dit gedeelte begeleiden we je bij het maken van een PostgreSQL hoge-beschikbaarheidscluster met failover slots. In ons voorbeeld gebruiken we de volgende knooppunten:

  1. KnooppuntA (Primaire Server)
  2. KnooppuntB (Fysieke Standby)
  3. KnooppuntC (Logische Abonnee)

Vereisten

Voordat we beginnen, zorg ervoor dat je hebt:

Stap 1: Configureren van het Primaire Knooppunt (KnooppuntA)

1.1 Initialiseer de cluster op NodeA

Na het installeren van PostgreSQL op de primaire node, initialiseer de cluster; u kunt de volgende commando’s gebruiken:

Shell

 

1.2 Configureer replicatie in het postgresql.conf bestand

Na het initialiseren van de cluster, bewerk het postgresql.conf bestand, dat standaard te vinden is in /home/pgedge/nodeA/postgresql.conf. Stel de volgende parameterwaarden in:

Shell

 

1.3 Werk het pg_hba.conf bestand bij om Replication Access toe te staan

Het pg_hba.conf bestand beheert de clientauthenticatie voor de PostgreSQL-server. Voeg de volgende invoer toe aan /home/pgedge/nodeA/pg_hba.conf om toegang voor een replicatiegebruiker te garanderen:

Shell

 

Vervolgens, laad de configuratie opnieuw in:

Shell

 

1.4 Maak een Replicatiegebruiker

Vervolgens, log in op PostgreSQL en maak de replicatiegebruiker aan:

Shell

 

SQL

 

1.5 Maak een Tabel en Stel een Publicatie in

Vervolgens moet u een tabel maken en een bijbehorende publicatie aanmaken:

SQL

 

Stap 2: Het configureren van de Fysieke Standby (NodeB)

2.1 Initialiseer NodeB

Na het installeren van PostgreSQL, initialiseer NodeB:

Shell

 

2.1 Maak een Basisback-up

Vervolgens, gebruik pg_basebackup om een back-up van de cluster te maken:

Shell

 

2.2 Configureer postgresql.conf op Node-B

Pas het bestand postgresql.conf aan (te vinden in /home/pgedge/nodeB/postgresql.conf), met de volgende instellingen:

Shell

 

2.3 Schakel Failover Slot Synchronisatie in

Gebruik de psql client om in te loggen op NodeB:

Shell

 

Vervolgens, gebruik de volgende statements om replicatie voor NodeB te configureren:

SQL

 

Sluit de psql client af en herstart NodeB:

Shell

 

2.4 Verifieer Slot Synchronisatie

Herstel vervolgens de verbinding met NodeB met psql en controleer of de slots gesynchroniseerd zijn:

SQL

 

Stap 3: Instellen van de Logische Abonnee (NodeC)

3.1 Initialiseer de cluster en configureer NodeC

Na het installeren van PostgreSQL, initialiseer de cluster; je kunt de volgende commando’s gebruiken:

Shell

 

Vervolgens, bewerk het bestand /home/pgedge/nodeC/postgresql.conf, met de volgende parameterwaarden:

Shell

 

3.2 Maak een Abonnement op NodeC

Gebruik het volgende commando om een abonnement op NodeC te maken:

Shell

 

Stap 4: Simuleren van Failover en Zorgen voor Continuïteit

Je kunt de volgende commando’s gebruiken om een failover te simuleren en te bevestigen dat de replicatie doorgaat en de gegevensintegriteit behouden blijft.

4.1 Failover Simuleren

Gebruik de volgende commando’s om een fout van NodeA te simuleren, gevolgd door promotie van standby naar primair van NodeB:

Shell

 

4.2 Update het Abonnement op NodeC

Nadat nodeB is gepromoveerd, log in op NodeC en update de verbinding om aan te geven dat NodeB nu de primaire node is:

SQL

 

4.3 Verifieer Data Continuïteit

Om replicatie te testen, gebruik psql om in te loggen op Node-B (nu de primaire):

SQL

 

Controleer replicatie op Node-C:

SQL

 

Conclusie

De failover slot functie van PostgreSQL 17 maakt naadloze failover mogelijk in logische replicatieomgevingen. Door de stappen in deze gids te volgen, kunt u een high-availability cluster creëren dat een ononderbroken datastroom garandeert, zelfs tijdens een storing van de primaire server.

Door configuraties te optimaliseren en gebruik te maken van de nieuwe mogelijkheden van PostgreSQL 17, kunt u een veerkrachtige en efficiënte database-infrastructuur creëren voor uw kritieke toepassingen.

Source:
https://dzone.com/articles/setting-up-failover-slots-in-postgresql-17