Kontinuierliche Archivierung: Können mehrere Maschinen verwendet werden?

7

Ist es möglich, das archive_commandzum Senden an mehrere Maschinen zu verwenden? Ist es genauso einfach wie das Trennen mit a, &&da es im Wesentlichen nur eine Befehlszeile ist?

command1 && command2

Ich gehe davon aus, dass dies einen schlechten Effekt haben könnte, wenn ein Befehl fehlschlägt. Wenn er beispielsweise command1fehlschlägt, wird er command2nicht ausgeführt. und wenn dies command2fehlschlug, würde es für die ganze Sache ungleich Null zurückgeben und Postgres würde erneut versuchen, die WAL zu senden, was bedeuten würde, dass sie erneut ausgeführt würde command1.

Ich hoffe, es gibt eine offiziellere Lösung für das Problem. Mein Ziel ist es, eine Sicherung innerhalb des Rechenzentrums und eine Sicherung außerhalb des Rechenzentrums zu haben.

Collin Peters
quelle
Obwohl dies keine Antwort auf Ihre Frage ist, empfehlen wir Ihnen, die Streaming-Replikationsfunktionen in neueren Versionen von Pg zu verwenden. Sie sollten weiterhin WAL-Versand verwenden, um dies zu ergänzen, da die Replikate dadurch aufholen können, wenn sie offline gehen und zu weit hinter dem Master zurückbleiben, sodass Ihre Frage relevant bleibt. Welche Serverversion verwenden Sie überhaupt?
Craig Ringer

Antworten:

3

Zuerst erstelle ich immer ein Wrapper-Skript, wenn ich solche Befehle erstelle. Das macht es einfacher, den Befehl zu debuggen, ohne postgres signalisieren zu müssen, um etwas neu zu laden. Dies erleichtert auch das Einschließen der Protokollierung aus Ihrem Archivierungsskript.

Zunächst müssen Sie herausfinden, wie Ihre Daten repliziert werden sollen. Die Art und Weise, wie Sie es jetzt tun, scheint in Ordnung zu sein, zumindest wenn Sie vor dem Kopieren überprüfen, ob die Zieldatei nicht vorhanden ist. Auf diese Weise kann es beliebig oft ausgeführt werden und versucht, es an den externen Speicherort zu kopieren.

Trygve Laugstøl
quelle
2
Danke für die Antwort. Postgres hat auch die folgenden auf Backup-Skripten, die die empfohlene Praxis postgresql.org/docs/current/static/…
Collin Peters
0

Ich glaube, Sie könnten dies mit mehreren tun rsync Befehlen anstatt so etwas zu verwenden cp. Auf diese Weise sind die anderen nicht betroffen, wenn ein Server einen Neustart erfordert.

Etwas wie:

archive_command = 'rsync -a %p [email protected]:/var/lib/postgresql/9.1/wals/%f

\&& 

rsync -a %p [email protected]:/var/lib/postgresql/9.1/wals/%f '

Nicht offiziell, aber theoretisch praktikabel.

Morgan Goeller
quelle
Ich hatte daran gedacht, aber was ist, wenn der erste rsync-Befehl fehlschlägt? Angenommen, es gibt einen Fehler zurück, was bedeutet, dass der zweite Rsync nicht einmal ausgeführt wird
Collin Peters
Sie brauchen die Pause "\" dort nicht. Wenn Sie tatsächlich break in den Befehl archive_command für Version 9.5 einfügen, wird dies beschädigt.
Dina