Wie kann ich die Replikation zwischen zwei PostgreSQL-Servern einrichten und Fehler beheben?

Melden
  1. Grundlage der Replikation in PostgreSQL
  2. Voraussetzungen und Umgebung vorbereiten
  3. Konfiguration des Primärservers
  4. Erstellen des Replikationsbenutzers
  5. Konfiguration des Sekundärservers
  6. Starten der Streaming-Replikation
  7. Fehlerbehebung bei der Replikation
  8. Zusammenfassung

Grundlage der Replikation in PostgreSQL

Die Replikation in PostgreSQL erlaubt es, Daten von einem primären Server (Master) zu einem oder mehreren sekundären Servern (Standbys) zu übertragen. Dies ist vor allem nützlich für Ausfallsicherheit, Lastverteilung und Backup-Zwecke. Die häufigste Form ist die sogenannte Streaming-Replikation, die Änderungen fast in Echtzeit überträgt.

Voraussetzungen und Umgebung vorbereiten

Zunächst sollten beide PostgreSQL-Instanzen kompatible Versionen verwenden, idealerweise identisch. Es wird empfohlen, dass beide Server im selben Netzwerk oder mit guter Netzwerkverbindung erreichbar sind. Für die Replikation muss eine replizierende Benutzerrolle auf dem Primärserver eingerichtet sein. Außerdem muss der Primärserver so konfiguriert werden, dass eingehende Replikationsverbindungen akzeptiert werden.

Konfiguration des Primärservers

In der Datei postgresql.conf müssen mehrere Parameter angepasst werden. Zunächst ist der wal_level auf replica oder höher zu setzen, damit genügend Write-Ahead-Log-Daten bereitgestellt werden. Der Parameter max_wal_senders legt fest, wie viele gleichzeitige Replikationsverbindungen erlaubt sind, und sollte mindestens auf die Anzahl der Standbys gesetzt werden. Mit wal_keep_size wird definiert, wie viel WAL-Daten vorgehalten werden, um Verzögerungen bei der Replikation auszugleichen. Weiterhin ist das Aktivieren von hot_standby=on wichtig, falls der primäre Server auch als Standby fungieren kann.

Ebenso muss die Zugangskontrolle in der Datei pg_hba.conf gewährleistet sein. Hier wird eine Zeile hinzugefügt, die dem Replikationsbenutzer den Zugriff von der IP-Adresse des Sekundärservers erlaubt, beispielsweise mittels host replication repl_user sekundaere_ip/32 md5.

Erstellen des Replikationsbenutzers

Ein spezieller Benutzer mit REPLICATION-Rechten ist anzulegen. Dies erfolgt im Primärserver mit dem SQL-Befehl: CREATE ROLE repl_user REPLICATION LOGIN ENCRYPTED PASSWORD passwort; Dabei wird ein sicheres Passwort gewählt, da dieser Benutzer großen Einfluss hat.

Konfiguration des Sekundärservers

Der Sekundärserver startet normalerweise als leerer Knoten, der die Datenbank vom Primärserver kopiert und danach die Änderungen empfängt. Zunächst wird mit dem Tool pg_basebackup ein exakter Abbild der Datenbank vom Primärserver erstellt. Dazu setzt man den Sekundärserver am besten in einen Zustand, in dem keine Daten vorhanden oder überschrieben werden dürfen.

Starten der Streaming-Replikation

Nach der Basis-Datenübertragung muss auf dem Sekundärserver die Datei recovery.conf (bei neueren PostgreSQL-Versionen als Teil der postgresql.conf oder in standby.signal) erstellt bzw. angepasst werden, um die Verbindungsparameter zum Primärserver anzugeben. Dazu gehört die Angabe des Hostnamens, der Benutzername, sowie die Authentifizierungsmethode. Die wichtigsten Parameter sind primary_conninfo und das Vorhandensein der Datei standby.signal, die den Server informiert, als Standby zu starten.

Danach wird der Sekundärserver gestartet, der sich mit dem Primär verbindet und dann den kontinuierlichen Datenstrom empfängt.

Fehlerbehebung bei der Replikation

Sollte die Replikation nicht funktionieren, gibt es verschiedene typische Fehlerquellen. Oft verhindert die Verbindungseinstellung eine erfolgreiche Kommunikation. Prüfen Sie deshalb zuerst, ob der Sekundärserver den Primärserver über das Netzwerk erreichen kann, zum Beispiel mit ping oder telnet auf den Port 5432. Auch Firewalls oder Sicherheitsgruppen in Cloud-Umgebungen können die Verbindung blockieren.

Weiterhin sind die Konfigurationsdateien oft die Ursache: Ist die pg_hba.conf richtig angepasst und wurde der Primärserver nach Änderung neu geladen? Stimmen Benutzername und Passwort in der primary_conninfo? Im Primärserver-Log finden sich oft Hinweise, ob der Benutzer abgelehnt wurde oder eine Authentifizierung fehlgeschlagen ist.

Fehlermeldungen wie replication slot not found oder could not connect to primary server geben Aufschluss über das Problem. In manchen Fällen kann der Zeitraum, wie lange WAL-Daten vorgehalten werden, zu kurz sein und der Sekundärserver verliert den Anschluss, weshalb Parameter wie wal_keep_size oder das Verwenden von sogenannten Replikations-Slots helfen können.

Zudem kann der Status des Sekundärservers mit dem SQL-Befehl SELECT * FROM pg_stat_replication; auf dem Primär abgefragt werden, um zu prüfen, ob Verbindungen bestehen und wie aktuell die Replikation ist.

Zusammenfassung

Die Einrichtung der Replikation in PostgreSQL erfordert die Anpassung von Konfigurationsparametern auf dem Primärserver, die Anlage eines Replikationsbenutzers, sowie die Erstellung einer Kopie der Datenbank für den Sekundärserver. Das Einrichten der Verbindungsparameter und das Überprüfen der Netzwerkverbindung sind essenziell. Bei Problemen helfen Logfiles, korrekte Zugriffsregeln und das Prüfen der Parametereinstellungen bei der Ursachenfindung. Mit der Streaming-Replikation steht eine robuste Basis für Hochverfügbarkeit und Lastverteilung zur Verfügung.

0

Kommentare