Unsere eingerichtete Replikation ist unterbrochen ("angefordertes WAL-Segment wurde bereits entfernt" während der Ausfallzeit). Der Master kann nicht einfach wieder angehalten werden.
Können wir
pg_start_backup()
,rsync ${PGDATA}/
meister zum sklaven,pg_stop_backup()
... während der Master-Postgresql noch unter Volllast ist? (Oder wird dazu pg_start_backup()
führen,
- Tischschlösser,
- E / A-Blöcke,
- inkonsistenzen,
- Feueralarm,
- langsame db Antwort
Mit anderen Worten, wird sich dies pg_start_backup()
auf unsere Bewerbung auswirken?
postgresql
replication
Daniel
quelle
quelle
Antworten:
pg_start_backup
führt einen Checkpoint durch, wie dezso feststellt. Dies hat zwar Auswirkungen, aber Ihre Datenbank führt Checkpoints ohnehin regelmäßig durch und muss dies auch tun, um zu funktionieren. Sie sind also eindeutig kein Problem für Sie. Ein früher Checkpoint bedeutet, dass weniger Daten gesammelt wurden, was bedeutet, dass ein Checkpoint vonpg_start_backup
geringerer Auswirkung als normal ist.Wenn Sie sich Sorgen machen müssen, ist der rsync oder ein gleichwertiger
pg_basebackup
Schritt. Die Lese-E / A-Vorgänge hiervon werden nicht allzu schlecht sein, da sie sequentiell ablaufen. Wahrscheinlich beeinträchtigt sie jedoch die E / A-Leistung Ihrer Datenbank erheblich. Außerdem werden heiße Daten aus dem RAM-Cache eher zugunsten von weniger gedrängt -verwendete Daten, wodurch der Cache überlastet wird, wenn die benötigten Daten wieder eingelesen werden.Sie können
nice
und verwendenionice
, um die Auswirkungen der E / A zu begrenzen (jedoch nicht die Auswirkungen auf den Cache). Dies ist jedoch mit Kosten verbunden. Die Sicherung dauert länger, und bis Sie die Sicherung abgeschlossen undpg_stop_backup
Ihr System ausgeführt haben, sammelt sich - so wie ich es verstehe - die WAL an, die nicht gelöscht werden kann, und es sammelt sich die Prüfpunktverschuldung für einen BIG-Prüfpunkt am Ende des Sicherungslaufs an. Außerdem werden Tabelle und Index angesammelt Aufblähen, weil es tote Reihen nicht aufräumen kann. Sie können es sich also wirklich nicht leisten, das Backup für immer dauern zu lassen, besonders wenn Sie sehr hohe Churn-Tabellen haben.Letztendlich ist es schwer zu sagen, ob Sie in Ihrer Umgebung gefahrlos
pg_start_backup
undpg_stop_backup
für Hot-Backups verwenden können. Die meisten Leute können, aber wenn Sie sich dem nähern, was Ihre Hardware leisten kann, enge Timing-Anforderungen haben, sich das Risiko eines Stalls nicht leisten können und sowohl sehr hohe Churn-Tische als auch sehr große Tische haben, kann dies problematisch sein .Leider müssen Sie es so ziemlich testen und sehen.
Wenn möglich, ist es möglicherweise sinnvoll
CHECKPOINT
, einen atomaren Snapshot des Volumes zu erstellen, auf dem sich Ihre Datenbank befindet. Verwenden Sie stattdessen LVM, die Tools Ihres SAN, EBS oder was auch immer Sie gerade verwenden. In diesem Fall können Sie den Schnappschuss nach Belieben kopieren. Dieser Ansatz eignet sich nicht für eine Basissicherung für PITR / Warm-Standby / Hot-Standby, eignet sich jedoch perfekt für eine statische Sicherungskopie und hat eine wesentlich geringere Auswirkung auf das System. Sie können dies jedoch nur tun, wenn Ihre Snapshots atomar sind und sich Ihre gesamte Datenbank einschließlich WAL auf einem einzigen Volume befindet.Eine Möglichkeit, die ich noch nicht untersucht habe, ist die Kombination der beiden Ansätze. Mir fällt ein, dass man möglicherweise ( ungetestet und möglicherweise falsch und unsicher , ich weiß es noch nicht):
pg_start_backup
pg_stop_backup
pg_stop_backup
Im Wesentlichen besteht die Idee darin, die Verzögerungszeit der DB für die Checkpoints zu verringern, indem Sie einen Zeitpunkt für jedes Volume festlegen, das Sie nach Belieben kopieren können.
quelle
Dies ist ein Grab, aber ich muss hier etwas korrigieren.
Die vorherige Antwort lautet:
Das ist nicht wahr. Das System behält die in Ihrer Konfiguration angegebene WAL-Nummer (siehe Online-Dokumentation ). Der höhere Wert zwischen:
Stellen wir uns diesen Fall vor:
Nach dem Start von "pg_start_backup ()" werden Ihre WAL-Dateien während der Sicherung rotieren. Wenn Ihre Sicherung abgeschlossen ist, versuchen Sie, sie auf einem anderen Datenbankmodul wiederherzustellen. Die Engine fragt beim Start nach mindestens der WAL-Datei, die bei der Ausgabe von "pg_start_backup ()" generiert wurde.
Die Datenbank akzeptiert das Booten erst, wenn Sie die WAL-Datei "0000000x0000000B000000D0" (wobei x Ihre TimelineID ist ) bereitstellen . Diese WAL-Datei ist das absolute Minimum für den Systemstart. Natürlich verlieren Sie nur mit dieser Datei Daten, da sich der Rest der Daten in den WAL-Dateien befindet, die Sie nicht haben, aber zumindest haben Sie eine funktionierende Datenbank-Engine.
Entweder müssen Sie die WAL-Archivierung durchführen oder Sie müssen die benötigten WAL-Dateien selbst speichern, Postgresql erledigt dies jedoch nicht für Sie.
quelle
pg_basebackup --xlog-method=stream
wenn ich mich nicht irre.max_wal_senders
Minimum von 2 festlegen. Dies ist eine gute Möglichkeit, um das "fehlende WAL" -Problem am Ende des Backups zu vermeiden.Was meine Erfahrungen mit PostgreSQL betrifft, ist es ein relativ sicherer Betrieb, es sei denn, Sie haben in diesem Moment einen großen Einfluss auf die Leistung. Wenn Sie es haben, ist es besser, das Schreiben aller Ihrer Kunden vorübergehend anzuhalten.
Ich hatte nur einen kritischen Fall, als ich meinen Master mit dem Slave unter Last synchronisierte, und dies wurde durch OOM Killer verursacht (ja, Sie sollten OOM Killer auf Datenbankknoten wirklich VOLLSTÄNDIG deaktivieren, ich wusste es an diesem Tag nicht).
Also habe ich die Datenbank von der nächtlichen Sicherung wiederhergestellt und alle WAL-Segmente aus dem Verzeichnis pg_archive zur Wiedergabe an postgres übergeben (einfach in den Ordner pg_xlog kopiert). Alles lief gut, aber Ausfallzeiten waren natürlich unvermeidlich.
quelle