Ich versuche, zwei PostgreSQL-Server auf einem Computer einzurichten und eine Streaming-Replikation durchzuführen. Ich habe es einmal geschafft, aber wenn ich es erneut versucht habe, genau die gleichen Schritte auszuführen, funktioniert es nicht. Dies sind die Schritte: Ich habe $ PGDATA = home / postgresql / 9.1 / data und $ STANDBY = home / postgresql / 9.1 / data2
- Richten Sie zwei Knoten ein:
initdb -D $ PGDATA initdb -D $ STANDBY
- Erstellen Sie im Masterknoten einen Benutzer für die Replikation. Ich mache das in pgAdmin (es hat Superuser-Privilegien)
- Fügen Sie im Hauptknoten in pg_hba.conf den Teil hinzu, der die Verbindung im Standby-Modus ermöglicht:
host replication repuser 127.0.0.1/0 md5
Im Masterknoten in postgresql.conf setzen Sie:
max_wal_senders = 1 archive_mode = on archive_command = 'cp% p ~ / postgresql / backup / archivedir /% f' wal_level = Archiv wal_keep_segments = 32
Starten Sie den Masterknoten und führen Sie die Basissicherung durch:
psql -d dellstore2 -c "SELECT pg_start_backup ('Backup für Replikation', true)" rsync -av $ {PGDATA} / $ STANDBY - postmaster.pid ausschließen psql -d dellstore2 -c "wähle pg_stop_backup ()"
pg_stop_backup sagt, dass alles in Ordnung ist, alle WAL-Dateien wurden archiviertIm Standby-Knoten (data2) erstelle ich die Datei recovery.conf mit:
standby_mode = 'on' primary_conninfo = 'host = 127.0.0.1 port = 5432 user = repuser password = haslo' trigger_file = '/home/michau/postgresql/replication.trigger' restore_command = 'cp / home / michau / postgresql / backup / archivedir /% f "% p"'
Starten Sie den Master-Knoten und dann den Standby-Knoten. Die Replikation sollte starten und der Standby sollte den Master einholen. Genau das ist beim ersten Mal passiert. Wenn ich jetzt den Standby-Modus starte, wird der Fehler "Adresse wird bereits verwendet" angezeigt. Natürlich haben sowohl Standby als auch Master denselben Port, der in postgresql.conf angegeben ist (sie haben genau dieselben postgresql.conf-Dateien). Wenn ich den Port im Standby-Modus auf 5433 ändere, erhalte ich:
LOG: Das Datenbanksystem wurde bei der Wiederherstellung am 2012-06-12 19:48:01 MESZ heruntergefahren LOG: Aufrufen des Standby-Modus cp: kann nicht stat / home / michau / postgresql / backup / archivedir / 000000010000000000000007: Keine solche Datei oder kein solches Verzeichnis LOG: Konsistenter Wiederherstellungsstatus bei 0/7000070 erreicht LOG: Aufzeichnung mit der Länge Null bei 0/7000070 cp: kann nicht stat / home / michau / postgresql / backup / archivedir / 000000010000000000000007: Keine solche Datei oder kein solches Verzeichnis LOG: Streaming-Replikation erfolgreich mit Primär verbunden LOG: Das Wiederherstellen beginnt um 0/7000070
Und es hängt einfach hier. Ausführen von ps -ef | grep postgresql ergibt:
michau 2491 1898 0 19:46 pts / 0 00:00:00 postgres -D /home/michau/postgresql/9.1/data michau 2493 2491 0 19:46? 00:00:01 postgres: Schreiberprozess michau 2494 2491 0 19:46? 00:00:00 postgres: Wal-Writer-Prozess michau 2495 2491 0 19:46? 00:00:00 postgres: Autovakuum-Starter-Prozess michau 2496 2491 0 19:46? 00:00:00 postgres: Der letzte Archivierungsprozess war 000000010000000000000008 michau 2497 2491 0 19:46? 00:00:00 postgres: Statistiksammlerprozess michau 2571 2214 0 19:49 pts / 1 00:00:00 postgres -D /home/michau/postgresql/9.1/data2 michau 2572 2571 0 19:49? 00:00:01 postgres: Startvorgang zur Wiederherstellung von 000000010000000000000009 michau 2575 2571 0 19:49? 00:00:01 postgres: Schreiberprozess michau 2578 2571 0 19:49? 00:00:02 postgres: wal Empfängerprozess-Streaming 0/99782DC michau 2579 2491 0 19:49? 00:00:00 postgres: wal sender process repuser 127.0.0.1 (42142) Streaming 0/99782DC michau 2586 2491 0 19:51? 00:00:00 postgres: michau postgres :: 1 (49941) untätig michau 2587 2491 0 19:51? 00:00:01 postgres: michau dellstore2 :: 1 (49942) idleDas wiederherstellende 0000000010000009 wurde für eine Weile geändert, aber für eine halbe Stunde nicht mehr.
Ich bin mir sicher, dass es etwas gibt, das ich beim ersten Mal getan und nicht aufgeschrieben habe oder so, aber ich bin völlig ratlos zu sagen, was es war. Ich würde mich über jede Hilfe freuen.
quelle
ps
Ausgabe scheint die Replikation zu funktionieren.Antworten:
PostgreSQL-Replikate werden nie vollständig wiederhergestellt. Dies ist beabsichtigt. Grundsätzlich befindet sich ein Replikat immer im Modus "Wiederherstellung nach einer Katastrophe", außer dass es den Empfang der WAL-Segmente vom Master und nicht von der Festplatte verwendet.
Was Sie also sehen, gibt keinen Anlass zur Sorge. Wenn es noch nicht funktioniert, müssen Sie eine detailliertere Beschreibung dessen geben, was Sie versuchen und was nicht. Aber soweit Sie posten, scheint es normal zu sein.
quelle
Die obigen Schritte gelten nicht für eine Streaming-Replikation, sondern für ein WAL-Archivierungsreplikations-Setup. Wenn Sie die Streaming-Replikation einrichten möchten, lesen Sie diese Anleitung zum Einrichten der Streaming-Replikation .
quelle
Starten Sie PostgreSQL im Standby-Modus mit dem Befehl postgresql? Wenn ja, sollten Sie den Befehl pg_ctl verwenden, da er den DB-Serverprozess vom Terminal trennt. Mit dem Befehl postgresql wird nur die Protokollausgabe wie beschrieben auf dem Bildschirm angezeigt und bleibt dort, da es sich um einen Standby-Server handelt.
quelle