Die Replikation ist fehlgeschlagen. Wie geht es wieder los?

10

Ich verwende Postgres 9.1.6 unter Ubuntu und habe ein Streaming-Replikations-Setup zwischen einem Master und einem Slave. Alles lief reibungslos, bis die Datenbank abstürzte und wir beide Boxen neu starten mussten.

Jetzt wurde die Replikation gestoppt und beim Überprüfen der Protokolle in beiden Kontrollkästchen wird folgende Meldung angezeigt:

CDT FATAL: Das angeforderte WAL-Segment 0000000100000224000000FA wurde bereits entfernt

Es ist immer wieder das gleiche Segment. Aus meinem Googeln geht hervor, dass der Replikationsserver versucht, dieses Segment vom Master abzurufen, aber es ist nicht mehr vorhanden. Ok, aber wie kann man das umgehen? Muss ich ein neues Backup erstellen und das mit dem Slave synchronisieren? Gibt es eine einfache Möglichkeit, den Slave wieder zu synchronisieren?

Mark Hoffman
quelle

Antworten:

7

Ja, Sie müssen dem Slave eine neue Basissicherung (für die Streaming-Replikation nur die Schritte 1 bis 4) des Masters geben.

Ihr Problem ist wahrscheinlich aufgetreten, weil der Wert von wal_keep_segments zu niedrig ist. Der Wert muss hoch genug sein, damit der Master, wenn der Slave einige Zeit nicht verfügbar ist, keine Segmente recycelt, die der Slave noch nicht verarbeitet hat.

Eelke
quelle
1

Stellen Sie sicher, dass sich die erforderlichen WALs an dem Ort befinden, von dem aus Sie sie für die erste Wiederherstellung wiederherstellen, bevor Sie den Slave im Streaming-Modus mit dem primären Host verbinden

Ihr Problem kann auftreten, wenn an dem Speicherort, von dem Sie die Wiederherstellung wiederherstellen, ein WAL-Segment-Doe-Rotz vorhanden ist.

Wenn in diesem Fall alles in Ordnung ist, sollten Sie den Befehl restore_comm einchecken recovery.conf.

Kishor Hargude
quelle
0

Eine andere Möglichkeit besteht darin, wal backup_push vom primären aus auszuführen und sofort einen backip_fetch vom Standby-Slave auszuführen und den Standby zu starten.

Nathn
quelle
2
Bitte
erläutern