Outils de sauvegarde PostgreSQL. Andrey Salnikov (Data Egret)

Je vous suggère de lire le déchiffrement du rapport par Andrey Salnikov de Data Egret "Outils de création de sauvegarde PostgreSQL" . À la fin, un tableau récapitulatif des outils mis à jour


Cette présentation concerne les outils de sauvegarde PostgreSQL disponibles. Sauvegardes logiques, sauvegardes binaires, outils de sauvegarde intégrés et outils tiers. Les sauvegardes incrémentielles sont-elles nécessaires lorsqu'elles peuvent vraiment aider. Voyons quand et quel outil est le plus approprié à utiliser. Quelle est la meilleure façon d'automatiser le processus de sauvegarde et de vérifier l'intégrité d'une sauvegarde? Examinez de plus près des outils tels que pg_dump , pg_basebackup , barman , wal-e , wal-g , pgbackrest , BART et pg_probackup .



Je m'appelle Andrey Salnikov, je suis un employé de Data Egret et ce rapport sera consacré aux outils de création de sauvegardes dans PostgreSQL.



D'abord qui nous sommes, mon entreprise. Notre activité principale: nous travaillons en tant qu'administrateurs à distance et nous avons un nombre assez important de clients. Il y a d'énormes bases, il y a un tas de petites bases, il y a toutes sortes de mélanges quand une grande base ou un tas de petites. Nous fournissons également des services de conseil et d'audit - c'est le cas si les gens n'ont pas besoin d'un soutien constant, mais qu'une sorte d'expertise est nécessaire.
PostgreSQL étant un produit open source, nous participerons naturellement à toutes sortes de conférences en termes de partage de notre expérience et d'aide de PostgreSQL de toutes les manières possibles. Parce que la base de données PostgreSQL est vraiment bonne. Et il s'avère que nous avons vu beaucoup de profils de charge: charges DWH, charges WEB et mélanges de charges. Et les bases tombaient de différentes manières. Beaucoup d'expérience.



Il s'agit de la partie la plus intéressante du rapport. Pourquoi des sauvegardes sont-elles nécessaires? En fait, ils sont nécessaires pour que nous puissions nous reposer paisiblement, pour que nous puissions dormir paisiblement, pour que nous puissions nous détendre tranquillement lors de concerts. Maintenant, c'est l'objectif principal du point de vue de la base pourquoi les sauvegardes sont nécessaires. Pour que tout soit calme dans nos vies. Parce que s'il y a des sauvegardes vérifiées, nous pouvons faire tout cela. Mais ce qui se passe avec la base est la dixième chose.



Quelle est la gamme d'outils pour créer des sauvegardes dans le monde PostgreSQL? Il s'agit de l'outil de récupération intégré pg_dump, pg_dumpall ou pg_restore. C'est le seul outil qui vous permet de faire des sauvegardes logiques. Autrement dit, il peut vous pg_dump, à la fois dans SQL pour vider, et dans un petit format binaire pour vider les données. Et cela sort de la boîte avec PostgreSQL.
L'outil suivant (pg_basebackup) pour créer des sauvegardes, qui sort également de la boîte et démarre à partir de cet outil, et en outre, ils seront tous des outils pour créer des sauvegardes de bases de données binaires. Pg_basebackup est également un outil qui sort de la boîte, qui nous permet de télécharger des répliques postgreSQL et de prendre une copie binaire de la base de données, de tirer une base de données persistante et, si nous voulons être en mesure d'archiver à temps, nous pouvons configurer PostgreSQL pour le vider à une sorte de disque. Ce sont les outils de base. Ils sont bons, ils le font, ils exécutent leur fonctionnalité à 5, mais ils sont gênants en termes de gestion et de masse. Lorsque vous avez 20 bases de données, vous devrez le faire vous-même par script.
Les deux outils suivants sont des outils cloud spécifiques et purs - wal-e et wal-g. Les mêmes gars les développent, mais le développement de wal-e était terminé, et ils sont passés à wal-g. Ces outils sont principalement destinés à AWS et au stockage dans S3. Wal-e est toujours en mesure de travailler avec Google Cloud, avec Azure et avec le système de disque, vous pouvez simplement spécifier une sorte de lecteur distant. Wal-g ne fonctionne qu'avec AWS, uniquement avec S3. Eh bien, ou toute autre interface similaire avec S3. Nous les utilisons, de bonnes choses. Je vais encore démonter chaque outil en détail.



Et sur le prochain ensemble d'outils, ce sont des outils qui s'appuient sur pg_basebackup ou l'utilisent directement ou implémentent d'une manière ou d'une autre ses fonctionnalités. Ils sont tous écrits par des développeurs qui s'engagent sur PostgreSQL et ont leur propre fork commercial, qui les promeut dans leur cercle d'influence.
L'outil barman le plus populaire, que nous utilisons assez largement dans le pays. Il s'agit essentiellement d'un wrapper Python autour de pg_basebackup. Il peut également fonctionner sur les protocoles ssh. Un outil pgbackrest très intéressant et très prometteur. PostgreSQL est impliqué dans le développement et s'y engage activement. Il a été écrit à l'origine en Python. Maintenant, la version qui est utilisée - elle est écrite en C pour accélérer et la possibilité de suppression parallèle des sauvegardes.
Pg_probackup est un utilitaire de nos collègues russes de PostgreSQL Professional qui vous permet de faire des sauvegardes incrémentielles, qui sont assez petites.
Et le dernier utilitaire est l'outil de sauvegarde et de récupération (BART) d'EnterpriseDB. Elle n'est pas très populaire chez nous. C'est principalement pour CentOS et Red Hat. Pour Ubuntu, avec elle, à mon avis, difficile. Et en raison de la faible popularité de BART chez nous, il (BART) ne se trouve presque nulle part dans les installations.



J'essaierais de décomposer ces outils en certaines choses qui sont importantes.


  • Tout d'abord, il est important pour nous de savoir comment nous allons le stocker, sur quels disques et sur quels services. Et il y a une liste de caractĂ©ristiques que nous allons parcourir.


  • La sĂ©paration de donnĂ©es suivante, ici je subdivise que, lors de la suppression de la sauvegarde ou de la restauration de la sauvegarde, nous pouvons couper une partie de l'ensemble du serveur de base de donnĂ©es (serveur) et travailler avec lui comme une base de donnĂ©es intĂ©grale intĂ©grale.


  • Dans quelle mesure ils prennent en charge diffĂ©rentes versions de la base de donnĂ©es.


  • De quels modes de fonctionnement disposent-ils en termes de parallĂ©lisme, en termes d'automatisation, etc.


  • Et la facilitĂ© de maintenance correspond Ă  la quantitĂ© que nous pouvons sĂ©parer en un service distinct, qui lui-mĂŞme passera par des bases de donnĂ©es et supprimera les sauvegardes selon un calendrier.


  • Validation - Je voulais que la sauvegarde soit vĂ©rifiĂ©e afin de garantir que nous pourrons ensuite en rĂ©cupĂ©rer et que nous aurons une base normale et ininterrompue.


    Et maintenant, passons en revue ces six grands points plus en détail. Et j'y marquerai quel instrument cela nous donnera.




Par stockage, ils peuvent tout stocker dans le système de fichiers, c'est-à-dire que nous pouvons remonter notre disque sur le système d'exploitation et y copier des sauvegardes. Tous les outils vous permettent de le faire. Un lecteur réseau monté est fondamentalement le même, car il est obtenu dans notre système de fichiers local.
Dans AWS (S3), trois outils peuvent fonctionner pour nous - wal-g, wal-e, pgbackrest. Parce que parmi ces utilitaires: barman et ainsi de suite, c'est le seul qui peut fonctionner avec AWS (S3).
Avec Azure, seulement wal-e. Google Cloud n'est que wal-e.



  • Une copie logique des donnĂ©es ne nous est fournie que par pg_dump, pg_dumpall. La diffĂ©rence entre eux est que pg_dumpall traite l'intĂ©gralitĂ© de l'instance de base de donnĂ©es (serveur), dans pg_dump vous pouvez spĂ©cifier une base de donnĂ©es spĂ©cifique sur l'instance et travailler avec elle.
  • Les copies binaires sont tout le reste.
  • Un facteur important pendant le stockage est que si nous sommes limitĂ©s d'une manière ou d'une autre par les ressources du disque, alors des situations surviennent souvent lorsque nous divisons la base de donnĂ©es en diffĂ©rents espaces table. Cela est Ă©galement vrai pour les serveurs de fer, car vous ne voulez pas souffrir de RAID. Cela est vrai pour les nuages, car il existe une certaine limitation, en particulier lorsque vous prenez une voiture avec des disques NVME et combien sont connectĂ©s, donc beaucoup sont connectĂ©s. Les instances AWS se dĂ©veloppent, mais avec des disques EBS. Et lors de la restauration des donnĂ©es, il sera important pour nous que nous puissions redistribuer ces espaces table, les affecter le long de nouveaux chemins et vers de nouveaux disques. Et maintenant cette bonne propriĂ©tĂ© est prĂ©sente chez wal-e. En wal-g, ils ne savent toujours pas comment travailler avec. Pg_probackup peut fonctionner avec. Barman, basebackup, pgbackrest. Cette chose est assez souvent importante, surtout lorsque vous avez une base de donnĂ©es de 8 Ă  10 To. Parmi nos clients de production, presque toutes ces bases de donnĂ©es sont regroupĂ©es en espaces table.


Maintenant, quelle taille peut-on avoir de sauvegarde. Tout cela se passera dans le contexte des sauvegardes binaires. Il est clair que la sauvegarde binaire représente le poids de la base de données, tant nous l'avons copié. Pèse 8 To, nous avons copié 8 To. 1 Mo pèse 1 Mo, copié. Comment économiser de l'espace quand on veut une longue chaîne de sauvegardes? Pour ce faire, est venu avec quelques outils. Autrement dit, la base de données stocke des données dans ses fichiers. Si nous avons une longue base de données d'archives, nous y modifions généralement un petit% de ces fichiers. Et pour cela, ils ont proposé une sauvegarde différentielle.


La sauvegarde différentielle c'est quoi? Nous regardons quels fichiers ont changé et copions uniquement vers le stockage, où stocker la sauvegarde. Et nous lierons tous les autres fichiers avec un lien physique à cette base de données. Il s'avère que nous économisons ainsi de l'espace. Et en même temps, nous pouvons supprimer en toute sécurité les anciennes sauvegardes de bases de données sans gâcher les plus récentes.


Cette chose est bonne, mais nous avons décidé d'aller de l'avant et de proposer une sauvegarde incrémentielle. Les sauvegardes incrémentielles sont de deux types.


Le premier est au niveau du fichier. Elle ne diffère de la sauvegarde différentielle que dans la mesure où la sauvegarde différentielle se concentre sur une sauvegarde complète de votre base de données, et par rapport à une sauvegarde complète, elle copie les fichiers diff et les copies. La sauvegarde incrémentielle peut se concentrer sur les sauvegardes différentielles, copie uniquement les fichiers modifiés qui ont changé par rapport à la sauvegarde différentielle. Pour l'incrémentiel, vous aurez besoin de toute la chaîne de sauvegardes. Autrement dit, la sauvegarde principale -> 1ère sauvegarde incrémentielle (elle sera toujours différentielle) -> puis toutes les sauvegardes incrémentielles. La sauvegarde différentielle se concentre toujours sur une base de données de sauvegarde complète. Incrémentielle peut se concentrer sur d'autres types de sauvegarde.
Pg_probackup et BART ont opté pour la création de sauvegardes incrémentielles par bloc. Parce que nous pouvons changer non pas le fichier entier, mais le bloc de données. Et ces utilitaires parcourent les fichiers wal et sélectionnent exactement les blocs que vous avez modifiés. Ces blocs de sauvegarde sont copiés dans la sauvegarde. Afin de récupérer avec une telle sauvegarde incrémentielle, vous aurez également besoin d'une copie complète de la base de données et de plus, vous devez toujours enregistrer ces éléments incrémentiels qui sont tapés à partir de wal. Cela impose certaines limitations de l'utilitaire, car ils doivent parcourir les fichiers wal. PostgreSQL Professional possède également une couche sur la structure des fichiers de la base de données. Par conséquent, ils recherchent assez rapidement ces blocs. Ces sauvegardes incrémentielles sont très petites. Si vous avez une petite modification de la base de données% et du fait que beaucoup d'informations techniques sont écrites dans le fichier wal, ces utilitaires sauvegardent des dizaines de kilo-octets de données pour 1 wal.



Plus de partage de données. Cela implique que si nous devons sauvegarder tout pas. Ou ne restaurez pas tout. Ceci n'est possible qu'avec des sauvegardes logiques, et cela nous permet de ne faire que pg_dump. Les utilitaires offrent des fonctionnalités assez étendues. Pg_dump peut vous permettre de vider la structure de la base de données si vous en avez besoin. Vous pouvez spécifiquement vider une table ou vous pouvez exclure une table de la sauvegarde ou vider la liste des tables, exclure la liste. La fonctionnalité est assez large à cet égard. L'inconvénient est que lors de la récupération à partir d'un tel vidage, si vous avez une grande base de données, vous devrez consacrer beaucoup de temps à la récupérer, car tout cela doit être joué sur une pure instance de PostgreSQL.
Ces utilitaires sont très pratiques pour utiliser le cas lorsque nous avons surestimé nos forces et que nous n'avons pas créé un tas de petites bases de données. Nous pouvons les fusionner en une seule instance. Nous pouvons le voir de cette façon si nous évaluons à nouveau maintenant notre force, si notre base de données est gonflée ou si nous y changeons l'architecture d'un monolithe en un service et en sciant les données. Pg_dump dans ce cas est la seule chose qui vous permet de le faire sans douleur.


Vous pouvez également restaurer une base de données et pgbackrest est répertorié ici. Il a une telle puce, que nous pouvons indiquer que nous n'avons besoin que d'une seule base de données de sauvegarde binaire. Que fait-il? Il restaure la base de données par défaut à partir de la sauvegarde, il s'agit du modèle et des postgres et de la base de données que nous avons spécifiée. Toutes les autres bases de données, il réinitialise les fichiers et les rend de longueur nulle. Autrement dit, PostgreSQL a une structure transparente pour stocker des bases de données dans des fichiers, vous pouvez à ce niveau, pour ainsi dire, réduire la base de données restaurée. Supposons que nous ayons besoin de trouver les données urgentes à partir d'un binaire, nous ne voulons pas augmenter la base de 10 To, nous avons deux bases là-bas et nous en élevons une, ce qui permet un total de 5 To. Dans ce cas, bien sûr, la cohérence est violée, mais pour certaines solutions rapides, lorsque vous avez un besoin urgent de prélever du sang de votre nez à partir d'une grande base de données, dont il existe plusieurs, ce sont de très bonnes fonctionnalités qui le sont. Mais comme une base de données de sauvegarde complète ne doit pas être considérée lors de la récupération. Autrement dit, c'est pour les travaux d'urgence.



Comment fonctionne le travail avec de nombreuses versions de la base de données? Ici aussi, tout est assez intéressant. Pg_dump est très bon dans la mesure où nous ne sommes pas liés à la version de la base de données à restaurer. Il y a le mode texte brut, et c'est juste du SQL pur, qui décrit la structure entière de la base de données, toutes les données. En principe, vous pouvez récupérer où vous voulez, dans MySQL, dans MSSQL, dans Oracle avec quelques modifications dans ce vidage. Entre les principales versions de PostgreSQL, ces vidages sont également assez faciles à utiliser.
Multi-versioning, qu'est-ce que je veux dire par là? C'est dans quelle mesure l'utilitaire peut traiter différentes versions de bases de données et fonctionner simultanément avec PostgreSQL 9.6, 10, 11. Tout sauf les versions intégrées de pg_dump et pg_basebackup, car elles sont liées à la version spécifique avec laquelle elles sont fournies. Le reste se concentre sur ces utilitaires. Ils peuvent être indiqués où se trouvent pg_basebackup, pg_dump de différentes versions. Ils respectivement avec la version de PostgreSQL choisissent le dernier utilitaire pour supprimer la sauvegarde.
Tous les utilitaires, à l'exception de pg_dump, conviennent à la création de répliques et de serveurs de secours, car il s'agit de sauvegardes logiques. À l'aide de l'un de ces utilitaires, vous pouvez restaurer les serveurs et vous connecter à l'assistant pour fonctionner comme une réplique de ce serveur.



Comment les sauvegardes peuvent être supprimées en général, quels modes existent pour supprimer les sauvegardes. Vous pouvez simplement copier des fichiers à l'aide d'outils OS standard: via le protocole ssh (rsync, scp) et éventuellement d'autres utilitaires qui le sont. Pourquoi il existe une telle opportunité, car ils vous permettent de paralléliser la copie. Pgbackrest ne fonctionne que de cette façon, barman, il peut fonctionner de cette façon, et il peut fonctionner en utilisant le protocole PostgreSQL.
Protocole PostgreSQL - lorsque l'utilitaire de sauvegarde se connecte à PostgreSQL et extrait tous les fichiers ainsi que les journaux d'archivage qui surviennent pendant le processus de sauvegarde à l'aide du protocole de réplication. Tout le monde et le barman peuvent le faire.
Fondamentalement, tout peut faire une sauvegarde à partir d'une réplique, cela dépend de la version de PostgreSQL. Avec PostgreSQL 10 et 11, nous pouvons supprimer des sauvegardes d'une réplique. Mais je ne le recommande pas, en général, aucune de nos sociétés ne le recommandera. Parce qu'il y a des situations où ils ont manqué la surveillance, ils ont pris une sauvegarde de la réplique pendant un mois, qui est tombée du serveur maître et n'est pas pertinente. En d'autres termes, les sauvegardes doivent toujours être supprimées du serveur maître. Dans ce cas seulement, vous serez sûr d'avoir une base de données de sauvegarde vraiment à jour.
Sauvegardes multithreads - tout le monde peut le faire, car tout est pour des raisons différentes, quelqu'un via le protocole ssh, quelqu'un implémenté au niveau de la copie de la base de données. Sauf pg_basebackup et BART, car l'opération BART ne se produit que sur pg_basebackup lorsque la sauvegarde est supprimée et, malheureusement, elle est monothread et ne sera pas multithread.



Un exemple de multithreading. Je restaurais une base de données de 8 To. Lorsque vous vous concentrez sur le choix d'un système pour supprimer les sauvegardes, sachez que wal-e est écrit en Python, wal-g est écrit en Golang. J'ai dû restaurer la base de 8 To. Wal-e a rencontré une limitation Python et m'a attiré avec AWS à une vitesse de 600 Mbps. Lorsque je suis passé à wal-g, il était dans une situation où il ne pouvait pas travailler avec les sauvegardes wal-e, mais il pouvait extraire des fichiers wal. Par conséquent, cette image du milieu ici est la restauration de la base de données. Puis roulé wal, qui se trouvait là en S3 et a été restauré à un certain moment. Wal-e a rencontré une limitation et une concurrence Python en Python, c'est tellement conditionnel. Un wal-g a couru dans l'interface S3, c'est-à-dire la vitesse à laquelle S3 pouvait donner à chaque instant, si rapidement que cela prenait. En moyenne, il était de 2 Go / s, ce qui est suffisant. Autrement dit, avec wal-e, une heure de modifications de la base de données a été reçue en 45 minutes de sauvegarde continue. Avec wal-g, il s'est avéré qu'ils ont roulé une heure quelque part dans la base de données pendant environ 5 minutes.



Modes de fonctionnement, ce qui est intéressant ici dans le système de sauvegarde.


  • RĂ©cupĂ©ration dans le temps jusqu'Ă  un point prĂ©cis. Si nous avons des journaux archivĂ©s et que nous les copions, nous pouvons les restaurer. Il vous permet de faire un système de sauvegarde, c'est comme un facteur standard. L'essentiel est que nous stockions des fichiers wal quelque part. Les dĂ©charges, bien sĂ»r, ne savent pas comment, car elles parlent un peu d’autre chose.
  • Ajuster la charge sur le rĂ©seau est une chose assez importante, car comme je l'ai dit, il est souhaitable de supprimer le vidage du serveur maĂ®tre, alors vous vous garantissez que vous obtenez vraiment la sauvegarde rĂ©elle. Eh bien, il arrive parfois que les serveurs soient tellement chargĂ©s qu'il est assez difficile d'y entrer. Certains clients collent une interface rĂ©seau distincte. Parfois, un temps de chargement minimal est effectuĂ©. C'est Ă©galement bon lorsque nous pouvons spĂ©cifier la charge sur le rĂ©seau lors de la crĂ©ation de la sauvegarde. Cela vous permet de faire pg_basebackup, barman et BART, wal-e, wal-g.
  • Compression Ă  la volĂ©e. Il s'agit de savoir combien nous transmettrons sur le rĂ©seau. Si nous pouvons compresser le fichier avant de l'envoyer au rĂ©fĂ©rentiel, alors c'est bien Ă  la volĂ©e. Et presque tout le monde peut le faire, ici. L'essentiel est d'indiquer le niveau de compression lĂ -bas.


Facilité d'entretien, qu'est-ce qui est intéressant ici pour les systèmes de sauvegarde?


  • CLI — , , , , . , CLI, , , . , , .
  • barman, pgbackrest BART, . , 20-30 , , , , backup- . , , .
  • – , , backup-, , backup-. , - . . .
  • – backup-, , - . , , . , , , , wal , , . wal-e, wal-g, , backup - . 7 backup .


backup. , backup, backup , , . , . , . . stage . , , backup . CLI , backup .


, , . , backup . , . , . , . . checksum PostgreSQL. , checksum PostgreSQL. checksum, .


pgbackrest pg_probackup backup , checksum. checksum.


, backup, checksum , , checksum . .



:



. , . , .



: , backup , , , . , , backup. , , - , , , , , , . - ?


: , , . . . - , , backup , , , . , . , , , , , , / . , , . , . , . , .


: , , ? .


: . 4 . . . backup. . , .


: ?


: . . wal-e, wal-g, pgbackrest. borman, pg_dump, basebackup. , , . .


: , - PostgreSQL, , , postgis - -?


: , backup , . checksum , PostgreSQL checksum, , . postgis, - . Pg_dump , , , SQL . SQL . . , , . dump, .


: , . , - ?


: . dump , . , – , , - , , . , . , - , .


: , , , bloat ?


: .


: — , - . , Symantec, Veritas Backup Exec . PostgreSQL?


: , , . PostgreSQL , pg_start_backup. , . .


: , - Symantec, Veritas Backup Exec .


: .


: , , . checksum - , , - ?


: — . stage , . stage . . . , -, . . .


: , WAL , S3. wal-e, wal-g - awscli . ?


( ): wal-g. wal-g. 40 wal-g . . , . , prefetch, wal , . , — , wal. wal , page cache , , wal, , . , .


: . , PostgreSQL — -> /dev/null, , . , . smoke . amcheck , . , , , .


: 10 . . . . wal — . ?


: . . . , .


: , pg_dump, . ?


: - . , .


: , , - ?


: pg_dump , .


: pg_dump, , , , , .


: , -, .


: , .


: , - .


: . . . . , , . . Pg_dump , - , exit_code . , , . , .


PS â„–1 pg_dump, pg_basebackup.


barmanwal-ewal-gpg_probackuppgbackrestBART
ssh (rsync, scp)++
++++++
S3+++
Azure++
Google Cloud++
+++++
++
++
barmanwal-ewal-gpg_probackuppgbackrestBART
++
+
-++++++
+++++
Récupération ponctuelle++++++
Ajustement de la charge réseau+++
Compression à la volée+++++
CLI++++++
Serveur dédié+++
barmanwal-ewal-gpg_probackuppgbackrestBart
Stockage de sauvegarde structuré++++++
Politiques de rétention+croncron+++
CLI pour la surveillance++++++
Validité de l'achèvement de la sauvegarde++++++
Checksum postgresql++

PS n ° 2 Erreurs, corrections sous l'article, ajouts au tableau croisé dynamique peuvent être effectués par demande Pull


PS # 3 Wal-g accueille des volontaires pour aider avec la documentation.


PS n ° 4 Pour installer wal-g en utilisant rpm, vous pouvez utiliser mon dépôt: Github , Fedora COPR .


PS n ° 5 Comment faire une sauvegarde complète et une sauvegarde incrémentielle lors de la création et du stockage dans S3, et enregistrer uniquement la sauvegarde complète sur bande? Si vous avez des idées, dites-le moi dans les commentaires ou en PM.



EnquĂŞte: Quels outils de sauvegarde utilisez-vous?


PS Telegram Channel Telegram PostgreSQL: https://t.me/pgsql

Source: https://habr.com/ru/post/fr485622/


All Articles