web-dev-qa-db-fra.com

Instantanés de stockage pour une sauvegarde constante de PostgreSQL - Différentes données et volumes de log

Nous exécutons de nombreux VM Linux dans un environnement de stockage VMware/partagé, chacun étant donné sa propre instance de PostgreSQL (un mélange de 9,0 et 9,3). Actuellement, l'ensemble VM est assis sur une seule partition/volume racine, et nous avons eu un grand succès (environ 8 ans) en utilisant des instantanés basés sur le stockage des volumes VMFS sous-jacents pour le processus de sauvegarde/restauration (et réplication à notre Site Dr.).

En raison de l'architecture de notre stockage, il serait avantageux de séparer les fichiers WAL de Postgres sur un volume non mis en cache, principalement en écriture pour nous donner moins de cache de cache du côté de stockage. Avec notre stockage (stockage de nimble), nous pouvons affecter à la fois des volumes à un seul groupe de protection/instantané, mais je n'ai pas été en mesure de susciter notre fournisseur que les instantanés se produiront exactement au même moment de tous les volumes du groupe de protection. - Cela sera probablement, mais il y a toujours cette chance que ses millisecondes à part.

À cette fin, nous avons rencontré des expériences, tout en écrivant des données sur la DB aussi rapidement que possible à l'aide de PG_Bench. Après les expériences, nous avons restauré nos volumes d'instantané et avons commencé le VM + Postgres

  • Instantané à la fois des volumes de données et de journaux proches de simultanément - Résultat: DB récupéré
  • Volume de données d'instantané En premier, volume de journal ~ 1 minute plus tard - Résultat: dB récupéré
  • Volume de journal d'instantané En premier, volume de données ~ 1 minute plus tard - Résultat: DB récupéré
  • Snapshot Log Volume En premier, volume de données ~ 3 minutes plus tard, après qu'un point de contrôle WAL a rédigé de nouvelles données sur 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 sont relativement proches, vous obtenez une copie cohérente de la DB, en fonction du temps de l'instantané de volume WAL/LOG.

Ma question: est-ce sûr? Quels sont les cas d'angle que nous manquons dans nos tests et ce qui pourrait se tromper?

Postgres 'Doc indique que cela n'est pas sûr, mais les tests semblent indiquer leur assez robuste: 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 n'ya peut-être pas de moyen d'obtenir des instantanés congelés exactement simultanés de tous les volumes. Par exemple, si vos fichiers de données et vos journaux WAL sont sur différents disques ou si les espaces de table sont sur différents systèmes de fichiers, il peut ne pas être possible d'utiliser une sauvegarde d'instantané, car les instantanés doivent être simultanés. Lisez votre documentation système de fichiers très attentivement avant de faire confiance à la technique consistante-instantanée dans de telles situations.

Remarque: Oui, nous connaissons d'autres options pour s'assurer qu'ils sont cohérents, comme la mise PostgreSQL en mode de sauvegarde à chaud ou l'utilisation de notre intégration VMware de Stockage pour faire valoir les VM eux-mêmes, mais nous recherchons une solution de stockage uniquement pour la vitesse, la commodité, et zéro impact sur nos clients.

11
Steve R.

La documentation que vous avez citée dit tout, mais je ne voudrais pas vous blâmer si vous souhaitez essayer de vérifier les revendications du fournisseur concernant les instantanés pris en même temps. Peut-être qu'un moyen de découvrir quelque chose pourrait être de rétrécir le test du test système wal plus spécifiquement.

par exemple. En plus de vos tests PGBench, essayez d'ajouter des appels aléatoires à pg_switch_xlog() pour forcer la rotation du journal, les intervalles de contrôle plus courts et les plus longs (raccourcissement et allongement checkpoint_timeout et checkpoint_timeout) Et même en utilisant de petites ou grandes tailles de fichiers wal.

Sauf si il y a quelque chose qui me manque, pour que vos instantanés ne soient pas pris en même temps, j'attribuerais votre DBS récupéré peut-être un peu de timing chanceux. Dans le dernier cas, imaginez que vous avez pris votre instantané de journal pendant que l'emplacement actuel XLOG était, dites, 0/A1C0FFEE. Ensuite, vous avez 3 minutes de chargement particulièrement lourd sur le système, qui provoque un cycle complet dans les fichiers WAL, et votre DB est maintenant à 0/DEADBEEF Lorsque l'instantané de données est pris. Lorsque vous essayez de restaurer, les fichiers WAL étant écrits au moment de l'instantané de données ont longtemps disparu et la récupération échouera.

2
atomic77