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:
- KnooppuntA (Primaire Server)
- KnooppuntB (Fysieke Standby)
- KnooppuntC (Logische Abonnee)
Vereisten
Voordat we beginnen, zorg ervoor dat je hebt:
- PostgreSQL 17 is geïnstalleerd op alle drie de knooppunten.
- Wachtwoordloze SSH-toegang tussen elk knooppunt.
- Een basisbegrip van PostgreSQL, PostgreSQL-replicatie, en PostgreSQL configuratiebestanden.
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:
mkdir -p /home/pgedge/nodeA
initdb -D /home/pgedge/nodeA --no-locale -E UTF8
pg_ctl -D /home/pgedge/nodeA -l /home/pgedge/logs/nodeA.log start
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:
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
synchronous_standby_names = '*'
synchronized_standby_slots = 'sb1_slot'
port = 5432
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:
host replication replicator 127.0.0.1/32 md5
Vervolgens, laad de configuratie opnieuw in:
pg_ctl -D /home/pgedge/nodeA reload
1.4 Maak een Replicatiegebruiker
Vervolgens, log in op PostgreSQL en maak de replicatiegebruiker aan:
psql -d postgres -p 5432
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicator_password';
1.5 Maak een Tabel en Stel een Publicatie in
Vervolgens moet u een tabel maken en een bijbehorende publicatie aanmaken:
CREATE TABLE foo (c1 INT PRIMARY KEY);
GRANT SELECT ON foo TO replicator;
CREATE PUBLICATION mypub FOR TABLE foo;
Stap 2: Het configureren van de Fysieke Standby (NodeB)
2.1 Initialiseer NodeB
Na het installeren van PostgreSQL, initialiseer NodeB:
mkdir -p /home/pgedge/nodeB
initdb -D /home/pgedge/nodeB --no-locale -E UTF8
pg_ctl -D /home/pgedge/nodeB -l /home/pgedge/logs/nodeB.log start
2.1 Maak een Basisback-up
Vervolgens, gebruik pg_basebackup om een back-up van de cluster te maken:
mkdir -p /home/pgedge/nodeB
pg_basebackup -D /home/pgedge/nodeB -R -X stream -P -h localhost -p 5432 -U replicator
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:
port = 5433
primary_conninfo = 'host=localhost port=5432 user=replicator password=replicator_password dbname=postgres application_name=sb1_slot'
primary_slot_name = 'sb1_slot'
hot_standby_feedback = on
sync_replication_slots = on
2.3 Schakel Failover Slot Synchronisatie in
Gebruik de psql client om in te loggen op NodeB:
psql -d postgres -p 5433
Vervolgens, gebruik de volgende statements om replicatie voor NodeB te configureren:
ALTER SYSTEM SET sync_replication_slots = on;
ALTER SYSTEM SET hot_standby_feedback = on;
ALTER SYSTEM SET synchronized_standby_slots = 'sb1_slot';
Sluit de psql
client af en herstart NodeB:
pg_ctl -D /home/pgedge/nodeB restart
2.4 Verifieer Slot Synchronisatie
Herstel vervolgens de verbinding met NodeB met psql
en controleer of de slots gesynchroniseerd zijn:
SELECT slot_name, failover, synced FROM pg_replication_slots;
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:
mkdir -p /home/pgedge/nodeC
initdb -D /home/pgedge/nodeC --no-locale -E UTF8
Vervolgens, bewerk het bestand /home/pgedge/nodeC/postgresql.conf
, met de volgende parameterwaarden:
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
sync_replication_slots = on
port = 5444
After editing the configuration file, start NodeC:
pg_ctl -D /home/pgedge/nodeC -l /home/pgedge/logs/nodeC.log start
3.2 Maak een Abonnement op NodeC
Gebruik het volgende commando om een abonnement op NodeC te maken:
CREATE SUBSCRIPTION foosub CONNECTION 'dbname=postgres host=localhost port=5432 user=replicator password=replicator_password' PUBLICATION mypub WITH (failover = true);
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:
pg_ctl -D /home/pgedge/nodeA stop
pg_ctl -D /home/pgedge/nodeB promote
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:
ALTER SUBSCRIPTION foosub DISABLE;
ALTER SUBSCRIPTION foosub CONNECTION 'dbname=postgres host=localhost port=5433 user=replicator password=replicator_password';
ALTER SUBSCRIPTION foosub ENABLE;
4.3 Verifieer Data Continuïteit
Om replicatie te testen, gebruik psql
om in te loggen op Node-B (nu de primaire):
INSERT INTO foo VALUES (3), (4);
Controleer replicatie op Node-C:
SELECT * FROM foo;
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