Einrichten von Failover-Slots in PostgreSQL-17

PostgreSQL 17 führt Failover-Slots ein, die die Einrichtung von Hochverfügbarkeitsumgebungen verbessern. Ein Replikationsslot gewährleistet, dass die Daten während der Replikation zwischen den Knoten zuverlässig und konsistent bleiben, während ein Failover-Slot die Konsistenz zwischen den Knoten sicherstellt, insbesondere während und nach einem Failover.

Failover-Slots sind ein leistungsstarkes Feature, das sicherstellt, dass die logische Replikation nahtlos fortgesetzt werden kann, selbst nach einem Failover zu einem Standby-Server. Die Verwendung von Failover-Slots ermöglicht es, dass logische Replikationsslots automatisch zwischen Primär- und Standby-Knoten synchronisiert werden, wodurch die Ausfallzeit erheblich reduziert wird und manuelle Eingriffe während eines Failovers vermieden werden können.

Dieser Leitfaden führt Sie durch die Einrichtung eines Hochverfügbarkeitsclusters für PostgreSQL unter Verwendung des neuen Features für Failover-Slots. Am Ende haben Sie eine robuste Replikationsumgebung eingerichtet, die in der Lage ist, einen Failover nahtlos zu bewältigen.

Warum Failover-Slots aus historischer Sicht wichtig sind

Herausforderungen in PostgreSQL 15

  • Replikationsslots an den Primärknoten gebunden: In PostgreSQL 15 wurden Replikationsslots nur auf dem Primärserver erstellt. Alle logischen Replikationsslots gingen verloren, wenn der Primärserver ausfiel, was zu erheblichen Replikationsverzögerungen und Datenverlust führte.
  • Manuelles Failover-Management: Während Failover-Szenarien erstellten Administratoren manuell Replikationsslots auf dem neuen Primärserver, was die Komplexität erhöhte, Fehler einführte und die Ausfallzeit verlängerte.
  • Keine Slot-Synchronisierung: Standby-Server wussten nichts über logische Replikationsslots auf dem Primärserver. Diese mangelnde Synchronisierung führte dazu, dass Replikationsströme bei einem Failover komplett zurückgesetzt wurden.

Verbesserungen in PostgreSQL 16

Minimales logisches Decodieren

PostgreSQL 16 führte eine Funktion namens minimalen logischen Decodierung auf Standby-Servern ein:

  • Minimales Decodieren auf Standby: Dies ermöglichte es Standby-Servern, WAL-Protokolle zu decodieren, um sich auf die logische Replikation vorzubereiten und vorgewärmte Slots zur Verfügung zu stellen, falls ein Failover auftritt.
  • Schnellerer Failover: Durch das vorherige Decodieren von WAL-Änderungen auf dem Standby war es möglich, die Replikationsverzögerung beim Hochstufen eines Standbys zum Primärserver zu reduzieren. Es war jedoch immer noch erforderlich, einige manuelle Konfigurationen vorzunehmen, um einen reibungslosen Failover zu gewährleisten.

PostgreSQL 17: Die Spielveränderung – Failover-Slots

  • Failover-Slots: Die Einführung von Failover-Slots in PostgreSQL 17 beseitigt die Notwendigkeit manueller Eingriffe, indem logische Replikationsslots automatisch zwischen Primär- und Standby-Servern synchronisiert werden.
  • Automatische Synchronisierung: Der neue Slot-Synchronisierungs-Worker stellt sicher, dass Failover-aktivierte Slots (Failover = true) immer synchronisiert sind, selbst wenn der Primärknoten aktiv ist.
  • Nahtloser Übergang: Bei einem Failover kann der Standby-Server die Rolle des Primärservers übernehmen, ohne dass Replikationsslots verloren gehen, was null Datenverlust und kontinuierliche Replikation gewährleistet.

Funktion

PostgreSQL 15

PostgreSQL 16

PostgreSQL 17

Logische Replikation

Ja

Ja

Ja

Automatische Slot-Synchronisation

Nein

Minimale logische Dekodierung im Standby

Vollständige Failover-Slots

Failover-Behandlung

Manuelle Eingriffe erforderlich

Vorwärm-Slots im Standby

Automatische Failover-Slots

Slot-Synchronisation zum Standby

Nicht unterstützt

Minimal, erfordert Konfiguration

Automatisch mit Slotsync-Worker

Hohe Verfügbarkeit für logische Replikation

Begrenzt

Verbessert mit minimaler Dekodierung

Nahtlos mit Failover-Slots

Erstellen eines Hochverfügbarkeitsclusters mit Failover-Slots

In diesem Abschnitt zeigen wir Ihnen, wie Sie einen PostgreSQL-Hochverfügbarkeitscluster mit Failover-Slots erstellen. In unserem Beispiel verwenden wir die folgenden Knoten:

  1. KnotenA (Primärserver)
  2. KnotenB (Physischer Standby)
  3. KnotenC (Logischer Abonnent)

Voraussetzungen

Bevor wir beginnen, stellen Sie sicher, dass Sie:

Schritt 1: Konfiguration des Primärknotens (KnotenA)

1.1 Initialisiere den Cluster auf NodeA

Nach der Installation von PostgreSQL auf dem primären Knoten, initialisiere den Cluster; du kannst die folgenden Befehle verwenden:

Shell

 

1.2 Konfiguriere die Replikation in der postgresql.conf-Datei

Nach der Initialisierung des Clusters bearbeite die postgresql.conf-Datei, die standardmäßig unter /home/pgedge/nodeA/postgresql.conf zu finden ist. Setze die folgenden Parameterwerte:

Shell

 

1.3 Aktualisiere die pg_hba.conf-Datei, um Replikationszugriff zu erlauben

Die pg_hba.conf-Datei verwaltet die Client-Authentifizierung für den PostgreSQL-Server. Füge den folgenden Eintrag zu /home/pgedge/nodeA/pg_hba.conf hinzu, um den Zugriff für einen Replikationsbenutzer zu gewährleisten:

Shell

 

Dann lade die Konfiguration neu:

Shell

 

1.4 Erstelle einen Replikationsbenutzer

Logge dich dann in PostgreSQL ein und erstelle den Replikationsbenutzer:

Shell

 

SQL

 

1.5 Erstelle eine Tabelle und richte eine Publikation ein

Nächster Schritt ist, eine Tabelle zu erstellen und eine zugehörige Publikation einzurichten:

SQL

 

Schritt 2: Konfiguration des physischen Standbys (NodeB)

2.1 Initialisiere NodeB

Nach der Installation von PostgreSQL, initialisiere NodeB:

Shell

 

2.1 Erstelle ein Basis-Backup

Verwende dann pg_basebackup, um ein Backup des Clusters zu erstellen:

Shell

 

2.2 Konfiguriere postgresql.conf auf Node-B

Ändern Sie die Datei postgresql.conf (befindet sich in /home/pgedge/nodeB/postgresql.conf) und setzen Sie:

Shell

 

2.3 Aktivieren Sie die Failover-Slot-Synchronisierung

Verwenden Sie den psql-Client, um sich bei NodeB anzumelden:

Shell

 

Verwenden Sie dann die folgenden Anweisungen, um die Replikation für NodeB zu konfigurieren:

SQL

 

Beenden Sie den psql-Client und starten Sie NodeB neu:

Shell

 

2.4 Überprüfen Sie die Slot-Synchronisierung

Verbinden Sie sich dann erneut mit NodeB mit psql und überprüfen Sie, ob die Slots synchronisiert sind:

SQL

 

Schritt 3: Einrichten des logischen Abonnenten (NodeC)

3.1 Initialisieren Sie den Cluster und konfigurieren Sie NodeC

Nach der Installation von PostgreSQL initialisieren Sie den Cluster; Sie können die folgenden Befehle verwenden:

Shell

 

Bearbeiten Sie dann die Datei /home/pgedge/nodeC/postgresql.conf und setzen Sie die folgenden Parameterwerte:

Shell

 

3.2 Erstellen Sie ein Abonnement auf NodeC

Verwenden Sie den folgenden Befehl, um auf NodeC ein Abonnement zu erstellen:

Shell

 

Schritt 4: Failover simulieren und Kontinuität sicherstellen

Sie können die folgenden Befehle verwenden, um ein Failover zu simulieren und zu bestätigen, dass die Replikation fortgesetzt wird und die Datenintegrität erhalten bleibt.

4.1 Failover simulieren

Verwenden Sie die folgenden Befehle, um einen Ausfall von NodeA zu simulieren, gefolgt von der Beförderung von Standby zu Primary von NodeB:

Shell

 

4.2 Aktualisieren Sie das Abonnement auf NodeC

Nach der Promotion von NodeB, melden Sie sich bei NodeC an und aktualisieren Sie die Verbindung, um widerzuspiegeln, dass NodeB jetzt der primäre Knoten ist:

SQL

 

4.3 Verifizieren der Datenkontinuität

Um die Replikation zu testen, verwenden Sie psql, um sich bei Node-B (jetzt der primäre Knoten) anzumelden:

SQL

 

Überprüfen Sie die Replikation auf Node-C:

SQL

 

Fazit

Die Failover-Slot-Funktion von PostgreSQL 17 ermöglicht nahtloses Failover in logischen Replikationsumgebungen. Wenn Sie die in diesem Leitfaden beschriebenen Schritte befolgen, können Sie einen hochverfügbaren Cluster erstellen, der einen unterbrechungsfreien Datenfluss gewährleistet, selbst während eines Ausfalls des primären Servers.

Durch die Optimierung der Konfigurationen und die Nutzung der neuen Funktionen von PostgreSQL 17 können Sie eine widerstandsfähige und effiziente Datenbankinfrastruktur für Ihre geschäftskritischen Anwendungen schaffen.

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