Wird geladen...

Wir haben festgestellt, dass Ihre Browsersprache Chinesisch ist. Möchten Sie unsere chinesische Website besuchen? [ Schließen ]
Von: Dylan

Was ist das automatische Failover bei PostgreSQL?

Beim automatischen Failover von PostgreSQL handelt es sich um einen Vorgang, bei dem ein Standby-Datenbankknoten automatisch zum primären Knoten hochgestuft wird, sobald der aktuelle primäre Knoten nicht mehr erreichbar ist.

Ein automatisches Failover-Verfahren für PostgreSQL ist unerlässlich für die Hochverfügbarkeit von Datenbanken. Bei einem Datenausfall, Cyberangriff oder Systemabsturz sichert es zuverlässig die Geschäftskontinuität und minimiert Ausfallzeiten.

Zwar verfügt PostgreSQL über leistungsstarke Replikationsfunktionen, jedoch ist keine Orchestrierung für automatisches Failover integriert. Datenbankadministratoren müssen Ausfälle manuell erkennen, den Knotenstatus prüfen und den Standby-Knoten hochstufen – dies verlängert Ausfallzeiten und birgt das Risiko menschlicher Fehler.

Zentrale Herausforderungen beim PostgreSQL-Failover

Die Kenntnis der Failover-Probleme ist erforderlich, um eine zuverlässige und passende Lösung für automatisches Failover auszuwählen.

  • Split-Brain-Problem: Ohne ordnungsgemäße Koordination können mehrere Knoten gleichzeitig den Primärstatus einnehmen, was zu Dateninkonsistenzen und Datenbeschädigungen führt.
  • Replikationsverzögerung: Zeitliche Verzögerungen zwischen Primär- und Standby-Knoten können nach einem Failover zum Verlust von Transaktionen führen.
  • Komplexe Ausfallerkennung: Die Abgrenzung zwischen einem echten Ausfall und vorübergehenden Netzwerkstörungen ist schwierig. Fehlzuordnungen können unnötige Failover-Vorgänge auslösen, beispielsweise bei kurzzeitigen Netzwerkunterbrechungen oder vorübergehender Nichtantwort.
  • Verwaltung von Anwendungsverbindungen: Auch nach einem Failover müssen Anwendungen eine neue Verbindung zum neuen Primärknoten herstellen. Fehlt eine Vermittlungsebene wie Proxy oder Lastausgleich, kommt es zu Dienstunterbrechungen.

Im Folgenden werden die gängigsten und am weitesten verbreiteten Tools für automatisches Failover und Switchover bei PostgreSQL vorgestellt.

Automatisches Failover mit pg_auto_failover

Dies ist eine Open-Source-Erweiterung für PostgreSQL, die Hochverfügbarkeit durch automatisiertes Failover realisiert. Sie eignet sich hervorragend für Teams, die eine unkomplizierte Einrichtung mit wenigen Abhängigkeiten suchen.

Ein Überwachungsknoten verfolgt den Status von Primär- und Standby-Knoten. Fällt der Primärknoten aus, stuft der Monitor automatisch einen Standby hoch. Es ist eine ausgezeichnete Lösung für Teams, die eine einfache Hochverfügbarkeit ohne komplexe verteilte Konsenssysteme benötigen.

Schritt 1: Installation von pg_auto_failover

Hinzufügen des offiziellen Paket-Repositories und Installieren:

Für Ubuntu/Debian

apt install -y postgresql-14 pg-auto-failover

Für RHEL/CentOS:

yum install -y pg-auto-failover

Schritt 2: Erstellen und Starten des Überwachungsknotens

Der Überwachungsknoten verwaltet den Clusterzustand und trifft Failover-Entscheidungen.

pg_autoctl create monitor --pgdata /var/lib/pgsql/14/monitor
pg_autoctl run monitor

Schritt 3: Initialisierung des Primärknotens

pg_autoctl create postgres \
--pgdata /var/lib/pgsql/14/data \
--monitor postgres://monitor-ip:5432/pg_auto_failover \
--name node-primary
pg_autoctl run

Schritt 4: Hinzufügen eines Standby-Knotens

Auf dem zweiten Server als Hot-Standby registrieren

pg_autoctl create postgres \
  --pgdata /var/lib/pgsql/14/data \
  --monitor postgres://monitor-ip:5432/pg_auto_failover \
  --name node-standby
pg_autoctl run

Schritt 5: Überprüfung des Clusterstatus

pg_autoctl status
pg_autoctl events

Der Cluster aktiviert automatisch die Streaming-Replikation und ist für das automatische PostgreSQL-Failover vorbereitet.

Patroni

Patroni ist eines der beliebtesten Tools für PostgreSQL-Hochverfügbarkeit. Es nutzt einen verteilten Konfigurationsspeicher wie etcd oder Consul zur Verwaltung der Wahl des Leader-Knotens und zur Ausführung von Failover-Vorgängen.

Funktionsweise:

  • Auf jedem Knoten läuft eine Patroni-Instanz
  • Ein verteilter Speicher speichert den Clusterzustand
  • Patroni führt Failover automatisch auf Basis eines Konsensverfahrens durch

Schritt 1: Bereitstellen eines 3-Knoten-etcd-Clusters

etcd sorgt für einen verteilten Konsens, um das Split-Brain-Problem zu verhindern.

# Installation von etcd

yum install -y etcd

# Konfigurieren und Starten von etcd auf allen Knoten

systemctl enable --now etcd

Schritt 2: Installieren von Patroni und Abhängigkeiten

pip3 install patroni python-etcd psycopg2-binary

Schritt 3: Erstellen der Patroni-Konfiguration (patroni.yml)

scope: postgres-ha
namespace: /service/
name: node1

restapi:
listen: 0.0.0.0:8008

etcd:
  host: node1-ip:2379

postgresql:
  listen: 0.0.0.0:5432
  connect_address: node1-ip:5432
  data_dir: /var/lib/pgsql/14/data
  pgpass: /tmp/pgpass
  replication:
    username: replicator
password: secure-password

Schritt 4: Starten des Patroni-Dienstes

patroni /etc/patroni.yml

Schritt 5: Anzeigen des Clusterstatus

patronictl -c /etc/patroni.yml list

Patroni verwaltet automatisch die Hochstufung des Primärknotens, die Replikation und das automatische PostgreSQL-Failover.

repmgr (leichtgewichtige Failover-Verwaltung)

repmgr ist ein einfacheres Tool, das sich auf die Verwaltung von Replikationen und automatisierte Failover-Vorgänge konzentriert. Es wird oft mit individuellen Skripten kombiniert, um eine vollständige Automatisierung zu erreichen und eignet sich gut für einfachere Umgebungen.

Funktionsweise:

  • Verfolgt Metadaten des Replikationsclusters
  • Befehle zur Hochstufung von Standby-Knoten sind vorhanden
  • Unterstützt einen Daemon-Modus für automatisches Failover

Im Folgenden die Schritte zur Einrichtung von repmgr für automatisches PostgreSQL-Failover:

Schritt 1: Installation von repmgr

sudo apt install repmgr

Schritt 2: Konfigurieren von repmgr.conf

node_id=1
node_name=node1
conninfo='host=node1 user=repmgr dbname=repmgr'
data_directory='/var/lib/postgresql/data'

Schritt 3: Registrieren des Primärknotens

repmgr primary register

Schritt 4: Klonen des Standby-Knotens

repmgr standby clone
repmgr standby register

Schritt 5: Aktivieren des automatischen Failovers

repmgrd -f /etc/repmgr.conf

i2Availability: Hochverfügbarkeitslösung mit nahezu keinen Ausfallzeiten

i2Availability ist eine Unternehmenslösung für Hochverfügbarkeit, die nahezu keine Ausfallzeiten, minimalen Datenverlust und vorhersehbare Wiederherstellungen bei allen Ausfallszenarien ermöglicht.

Kernfunktionen von i2Availability:

  • Nahezu kein Datenverlust: Durch synchrone Replikation und Echtzeit-Datenkopien gewährleistet i2Availability einen nahezu Null-RPO. Ausfälle werden innerhalb von Sekunden erkannt, eine VIP-Verschiebung ermöglicht einen RTO im Sekundenbereich.
  • Kein externer DCS erforderlich: Ein Quorum- und Zeugen-Arbitrierungssystem, redundante Heartbeats und Ressourcensperren verhindern das Split-Brain-Problem. Bei Netzwerkpartitionen bleibt nur der mit dem Arbiter verbundene Knoten aktiv, der andere wird vom Dienst ausgeschlossen – damit ist stets nur ein einziger Primärknoten aktiv und die Datenkonsistenz sichergestellt.
  • Nahtloses automatisches Failback: Sobald der ursprüngliche Primärknoten wiederhergestellt ist, schließt er sich automatisch als Standby-Knoten an, wobei Daten inkrementell synchronisiert werden. Es sind keine manuellen Neukonfigurationen oder Skripte für selbstheilende Cluster erforderlich.
  • Zentralisierte Web-Verwaltung: Eine übersichtliche Web-Konsole bietet Echtzeit-Monitoring des Replikationsstatus und der Knotengesundheit, zentralisierte Richtlinienkonfiguration, Stapelbereitstellung von Agenten sowie umfassende Audit-Protokolle für einfache Compliance-Prüfungen und Fehlerbehebung.
  • Unterstützung mehrerer Rechenzentren und regionsübergreifender Umgebungen: Es unterstützt nativ synchrone Replikation zwischen Rechenzentren mit Netzwerkoptimierung, Bandbreitensteuerung und Hybrid-Cloud-Kompatibilität – ideal für globale Unternehmensbereitstellungen und standortübergreifende Notfallwiederherstellung.
60-tägige kostenlose Testversion

Häufig gestellte Fragen: Typische Herausforderungen beim automatischen PostgreSQL-Failover und Lösungen

Dieser Abschnitt behandelt die zentralsten Probleme, auf die Datenbankteams bei der Implementierung von automatischem PostgreSQL-Failover stoßen, mit praktischen Lösungen abgestimmt auf die jeweiligen Tools.

F1: Wie lässt sich das Split-Brain-Problem beim automatischen PostgreSQL-Failover vermeiden?

Ein Split-Brain entsteht, wenn zwei Knoten gleichzeitig den Primärstatus beanspruchen, was zu Datenbeschädigungen führt.

  • Patroni/Stolon: Nutzen einen verteilten Konsensspeicher (DCS wie etcd) für Quorum-Abstimmungen. Ein DCS-Cluster mit drei Knoten vermeidet einen Single Point of Failure.
  • repmgr: Setzen eines Zeugenknotens ein – eine leichtgewichtige Instanz, die an Abstimmungen teilnimmt, aber keine Daten speichert, um das Quorum aufrechtzuerhalten.
  • pg_auto_failover: Nutzt einen zentralen Überwachungsknoten und eine Zustandsmaschinenlogik, um stets nur einen einzigen Primärknoten durchzusetzen.
  • i2Availability: Verwendet eine doppelte Quorum-Arbitrierung (Prüfungen von Knoten und Speicherstatus) für einen stabilen Schutz ohne externes DCS.

F2: Was ist eine Replikationsverzögerung und wie wirkt sie sich auf das Failover aus?

Die Replikationsverzögerung ist die Zeitverzögerung zwischen einem Schreibvorgang auf dem Primärknoten und der Bestätigung auf dem Standby-Knoten.

  • Risiko: Bei asynchroner Replikation können kürzlich ausgeführte Transaktionen nach einem Failover verloren gehen; synchrone Replikation verhindert dies, erhöht jedoch die Latenz.
  • Lösungen:
    • Für Anforderungen ohne Datenverlust synchrone Replikation wählen (Standard bei i2Availability).
    • In pg_auto_failover Verzögerungsschwellen festlegen, um keine Standby-Knoten mit übermäßiger Verzögerung hochzustufen.
    • Überwachung der Verzögerung über Patroni-Metriken, das i2Availability-Dashboard oder Prometheus/Grafana.

F3: Wie lässt sich der alte Primärknoten nach einem Failover wiederherstellen?

Nach einem Failover muss der alte Primärknoten als Standby neu eingebunden werden, um Inkonsistenzen zu vermeiden.

  • Patroni: Initialisiert den alten Knoten automatisch mit pg_rewind, sobald die Verbindung wiederhergestellt ist.
  • repmgr: Der Befehl repmgr rejoin klont den neuen Primärknoten und bindet den Knoten neu an.
  • pg_auto_failover: Mit pg_autoctl rejoin wird der wiederhergestellte Knoten beim Monitor registriert.
  • i2Availability: Löst automatisch eine erneute Echtzeit-Datensynchronisation aus, sobald der Knoten wieder erreichbar ist – keine manuellen Schritte erforderlich.

F4: Welches Tool eignet sich für meinen PostgreSQL-Cluster?

Die Auswahl hängt von Clustergröße, vorhandenen Fachkenntnissen und Anforderungen ab:

  • Unternehmensumgebungen ohne Datenverlust, mehrere Rechenzentren: i2Availability (zentrale Steuerung, doppelte Arbitrierung, kein DCS erforderlich).
  • Cloud/K8s, große Produktivcluster: Patroni (ausgereift, weit verbreitet, nativ für Kubernetes).
  • Einfache, schnelle Einrichtung ohne DCS: pg_auto_failover (minimalistisch, monitorbasiert).
  • Kleine lokale Cluster: repmgr (leichtgewichtig, keine externen Abhängigkeiten).
  • Hochverfügbarkeit + Verbindungsverwaltung + Lastausgleich: Pgpool-II (All-in-One-Middleware).

F5: Wie lassen sich häufige Fehler bei der Einrichtung des Failovers beheben?

  • Kommunikationsprobleme zwischen Knoten: Firewall-Regeln, NTP-Zeitsynchronisation und Zugriffsregeln in pg_hba.conf prüfen; SSH- und Netzwerkverbindungen zwischen den Knoten testen.
  • Fehler bei der Replikationseinrichtung: WAL-Einstellungen (wal_level, max_wal_senders) kontrollieren; sicherstellen, dass Standby-Knoten Daten vom Primärknoten streamen können.
  • Ausfall von DCS/Monitor: Bei Patroni/Stolon etcd/Consul neu starten und Protokolle prüfen; bei pg_auto_failover den Status des Überwachungsknotens validieren.
  • Probleme mit i2Availability: Audit-Protokolle der Web-Konsole zur Prüfung von Knoten-Heartbeats und Speicherstatus nutzen; Installation des Agenten und VIP-Zuweisung überprüfen.

Fazit

Die Implementierung eines zuverlässigen automatischen PostgreSQL-Failovers ist unerlässlich für resiliente, produktionsreife Datenbankcluster, die Ausfallzeiten minimieren, kritische Daten schützen und einen durchgehenden Geschäftsbetrieb sicherstellen. Von Open-Source-Tools wie Patroni, repmgr und pg_auto_failover bis hin zu unternehmensreifen Plattformen gibt es passende Lösungen für jede Anforderung, abhängig von Clustergröße, betrieblicher Komplexität und Verfügbarkeitsanforderungen.

Für kleine und mittlere Umgebungen liefern leichtgewichtige Open-Source-Lösungen eine grundlegende Hochverfügbarkeit mit vergleichsweise einfacher Einrichtung. Bei geschäftskritischen Systemen, bei denen kein Datenverlust, vereinfachter Betrieb und starke Fehlerisolation gefordert sind, bietet i2Availability von Info2Soft eine vollständigere, unternehmensreife Lösung. Funktionen wie der Split-Brain-Schutz mit doppelter Arbitrierung, automatisches Failback, eine zentrale Web-Konsole und native Unterstützung mehrerer Rechenzentren beseitigen viele Nachteile von Architekturen, die auf externen DCS-Systemen basieren.

Ob lokal, in der Cloud oder in Hybrid-Umgebungen eingesetzt: Eine durchdachte Strategie für automatisches Failover stellt sicher, dass Ihr PostgreSQL-Cluster bei jedem Ausfallszenario verfügbar, konsistent und wiederherstellbar bleibt. Mit der passenden Lösung und bewährten Best Practices erreichen Unternehmen nahezu keinen RTO und starke Garantien für die Datenintegrität ihrer wichtigsten Arbeitslasten.

Keine Kurzbiografie vorhanden

Weitere verwandte Artikel

Inhaltsverzeichnis:
Bleiben Sie über die neuesten Tipps informiert
Abonnieren Sie unseren Newsletter für aktuelle Einblicke, Neuigkeiten und exklusive Inhalte. Sie können sich jederzeit abmelden.
Abonnieren
Bereit, Ihre Unternehmensdatensicherheit zu verbessern?
Starten Sie eine 60-tägige Testversion oder sehen Sie sich eine Demo an, um zu erfahren, wie Info2soft Unternehmensdaten schützt.
Bitte füllen Sie das Formular aus und senden Sie es ab – unser Kundenservice wird sich in Kürze bei Ihnen melden.
Mit dem Absenden dieses Formulars bestätige ich, dass ich die Datenschutzerklärung.
{{ isSubmitting ? 'Wird gesendet...' : 'Absenden' }}