Nous exécutons de nombreuses machines virtuelles Linux dans un environnement de stockage partagé / vmware, chacune exécutant sa propre instance de postgreSQL (un mélange de 9.0 et 9.3). Actuellement, la machine virtuelle entière se trouve sur une seule partition / volume racine, et nous avons eu beaucoup de succès (~ 8 ans) en utilisant des instantanés basés sur le stockage des volumes VMFS sous-jacents pour le processus de sauvegarde / restauration (et la réplication sur notre site DR).
En raison de l'architecture de notre stockage, il serait avantageux de séparer les fichiers WAL postgres en un volume non mis en cache, principalement en écriture, afin de réduire le taux de désabonnement du cache du côté du stockage. Avec notre stockage (Nimble Storage), nous pouvons affecter les deux volumes à un seul groupe de protection / snapshot, mais je n'ai pas été en mesure de demander à notre fournisseur que les snapshots se produiront EXACTEMENT en même temps sur tous les volumes du groupe de protection - il le fera probablement, mais il y a toujours cette chance que ses millisecondes se séparent.
À cette fin, nous avons effectué quelques expériences, tout en écrivant des données dans la base de données aussi rapidement que possible à l'aide de pg_bench. Après les expériences, nous avons restauré nos volumes instantanés et démarré les postgres VM +
- Instantané des volumes de données et de journaux presque simultanément - résultat: DB récupéré
- Premier volume de données de cliché, volume de journal ~ 1 minute plus tard - résultat: DB récupéré
- Premier volume de journal d'instantané, volume de données ~ 1 minute plus tard - résultat: DB récupéré
- Volume du journal d'instantané en premier, volume de données ~ 3 minutes plus tard, après qu'un point de contrôle WAL a écrit de nouvelles données dans les fichiers de données: résultat: DB récupéré
Les tests semblent donc nous dire tant que les deux instantanés sont cohérents au niveau du volume et relativement proches, vous obtenez une copie cohérente de la base de données, en fonction de l'heure de l'instantané du volume WAL / Log.
Ma question: est-ce sûr? Quels sont les cas d'angle qui nous manquent dans nos tests, et qu'est-ce qui pourrait mal tourner?
Le document de Postgres indique que ce n'est pas sûr, mais les tests semblent indiquer sa robustesse: http://www.postgresql.org/docs/9.1/static/backup-file.html
Si votre base de données est répartie sur plusieurs systèmes de fichiers, il se peut qu'il n'y ait aucun moyen d'obtenir des instantanés figés exactement simultanés de tous les volumes. Par exemple, si vos fichiers de données et votre journal WAL se trouvent sur des disques différents, ou si les espaces disque logiques se trouvent sur des systèmes de fichiers différents, il peut ne pas être possible d'utiliser la sauvegarde de clichés car les clichés doivent être simultanés. Lisez très attentivement la documentation de votre système de fichiers avant de faire confiance à la technique de prise de vue cohérente dans de telles situations.
REMARQUE: Oui, nous connaissons d'autres options pour nous assurer qu'elles sont cohérentes, comme mettre PostgreSQL en mode de sauvegarde à chaud ou utiliser l'intégration VMware de notre stockage pour suspendre les machines virtuelles elles-mêmes, mais nous recherchons une solution de stockage uniquement pour la vitesse, la commodité, et aucun impact sur nos clients.