Wir führen viele Linux-VMs in einer VMware- / Shared-Storage-Umgebung aus, von denen jede ihre eigene Instanz von postgreSQL ausführt (eine Mischung aus 9.0 und 9.3). Derzeit befindet sich die gesamte VM auf einer einzelnen Root-Partition / einem einzelnen Root-Volume. Wir haben große Erfolge (~ 8 Jahre) mit speicherbasierten Snapshots der zugrunde liegenden VMFS-Volumes für den Sicherungs- / Wiederherstellungsprozess (und die Replikation auf unseren DR-Standort) erzielt.
Aufgrund der Architektur unseres Speichers wäre es vorteilhaft, Postgres-WAL-Dateien in ein nicht zwischengespeichertes Volume mit größtenteils Schreibzugriff zu trennen, um weniger Cache-Abwanderung auf der Speicherseite zu erzielen. Mit unserem Speicher (Nimble Storage) können wir beide Volumes einer einzelnen Schutz- / Snapshot-Gruppe zuweisen, aber ich konnte unserem Anbieter nicht entnehmen, dass die Snapshots auf allen Volumes in der Schutzgruppe genau zur gleichen Zeit erstellt werden - Es wird wahrscheinlich, aber es besteht immer die Möglichkeit, dass es Millisekunden auseinander liegt.
Zu diesem Zweck haben wir einige Experimente durchgeführt, während wir mit pg_bench so schnell wie möglich Daten in die Datenbank geschrieben haben. Nach den Experimenten haben wir unsere Snapshot-Volumes wiederhergestellt und die VM + Postgres gestartet
- Schnappschuss von Daten- und Protokollvolumes nahezu gleichzeitig - Ergebnis: DB wiederhergestellt
- Snapshot-Datenvolumen zuerst, Protokollvolumen ~ 1 Minute später - Ergebnis: DB wiederhergestellt
- Snapshot-Protokollvolumen zuerst, Datenvolumen ~ 1 Minute später - Ergebnis: DB wiederhergestellt
- Snapshot-Protokollvolumen zuerst, Datenvolumen ~ 3 Minuten später, nachdem ein WAL-Prüfpunkt neue Daten in Datendateien geschrieben hat: Ergebnis: DB wiederhergestellt
Tests scheinen uns also zu sagen, solange beide Snapshots auf Volume-Ebene konsistent sind und relativ nahe beieinander liegen, erhalten Sie eine konsistente Kopie der Datenbank, basierend auf dem Zeitpunkt des WAL / Log-Volume-Snapshots.
Meine Frage: Ist das sicher? Was sind die Eckfälle, die uns bei unseren Tests fehlen, und was könnte schief gehen?
Das Dokument von Postgres zeigt an, dass dies nicht sicher ist, aber Tests scheinen darauf hinzuweisen, dass es ziemlich robust ist: http://www.postgresql.org/docs/9.1/static/backup-file.html
Wenn Ihre Datenbank auf mehrere Dateisysteme verteilt ist, gibt es möglicherweise keine Möglichkeit, genau gleichzeitig eingefrorene Snapshots aller Volumes abzurufen. Wenn sich Ihre Datendateien und Ihr WAL-Protokoll beispielsweise auf unterschiedlichen Datenträgern befinden oder wenn sich Tablespaces auf unterschiedlichen Dateisystemen befinden, kann die Snapshot-Sicherung möglicherweise nicht verwendet werden, da die Snapshots gleichzeitig ausgeführt werden müssen. Lesen Sie die Dokumentation Ihres Dateisystems sorgfältig durch, bevor Sie in solchen Situationen der konsistenten Snapshot-Technik vertrauen.
HINWEIS: Ja, wir kennen andere Optionen, um sicherzustellen, dass sie konsistent sind, z. B. das Versetzen von PostgreSQL in den Hot-Backup-Modus oder die Verwendung der VMware-Integration unseres Speichers, um die VMs selbst in den Ruhezustand zu versetzen. Wir suchen jedoch nach einer Nur-Speicher-Lösung für Geschwindigkeit, Komfort und und keine Auswirkungen auf unsere Kunden.