Préambule
Combien d'utilisateurs actuels de Barman ont pensé à enregistrer des sauvegardes dans une destination distante dans le cloud ? Combien ont pensé à prendre cette sauvegarde directement depuis le serveur PostgreSQL lui-même ?
Eh bien, depuis Barman 2.10 c'est désormais possible !
Comment ?
Découvrons cela ensemble dans les articles suivants.
Exigences
Les deux articles suivants sont destinés à être une introduction pratique au nouveau barman-cloud-wal-archive
et barman-cloud-backup
outils ajoutés dans le barman-cli
package.
La première partie couvrira le barman-cloud-wal-archive
tandis que la seconde couvrira la commande barman-cloud-backup
command.
Les lecteurs ont besoin d'une connaissance de base des méthodes d'archivage et de sauvegarde PostgreSQL WAL, et de Barman. Il est également recommandé de connaître les technologies cloud pour les solutions de stockage telles qu'Amazon S3.
Archives WAL
Barman a agi comme une archive WAL distante pendant de nombreuses années, et le package Barman CLI a été conçu pour étendre la fiabilité et la robustesse de l'archivage du côté PostgreSQL. En fait barman-cli
fournit des scripts comme barman-wal-restore
permettant à un nœud de secours de restaurer intelligemment et en toute sécurité des fichiers WAL à partir d'une archive Barman via la restore_command
paramètre dans le postgresql.auto.conf
fichier (ou recovery.conf
jusqu'à PostgreSQL 12), et barman-wal-archive
pour archiver les fichiers WAL d'un nœud maître vers Barman via la archive_command
paramètre configuré dans le postgresql.conf
fichier.
Archives Cloud WAL
Grâce aux retours des utilisateurs, les développeurs de Barman ont introduit deux nouveaux outils dans la version 2.10 :
barman-cloud-wal-archive
barman-cloud-backup
La version 2.11 inclura deux outils supplémentaires pour la récupération, appelés barman-cloud-wal-restore
et barman-cloud-restore
.
Cet article est entièrement dédié à barman-cloud-wal-archive
, qui peut stocker des fichiers WAL dans le cloud, permettant un archivage multiniveau avec Barman et élargissant la politique de rétention des sauvegardes.
En effet, barman-cloud-wal-archive
peut être utilisé comme un hook-script configurant le pre_archive_retry_script
paramètre dans Barman, pour copier les fichiers WAL dans le stockage cloud configuré, augmentant la redondance de l'archive, et permettant de choisir une politique de rétention plus longue que celle de Barman.
Ce n'est pas tout !
barman-cloud-wal-archive
peut remplacer le barman-wal-archive
commande dans archive_command
paramètre, pour archiver directement les fichiers WAL dans le cloud, au lieu de les copier dans le serveur Barman. De cette façon, même un cluster PostgreSQL qui n'a pas de serveur de sauvegarde dédié séparé peut s'appuyer sur le service de stockage à distance pour archiver les fichiers WAL.
Comment ça marche ?
Les instructions suivantes sont juste pour installer et configurer barman-cloud-wal-archive
comme archive_command
dans PostgreSQL.
Tout d'abord, décidez où archiver les fichiers WAL. Dans cet article, nous utiliserons Amazon S3, qui, au moment de la rédaction, est la seule technologie prise en charge. Bien que d'autres technologies prenant en charge l'API de type S3 (Google Cloud, DigitalOcean, Microsoft Azure, etc.) puissent fonctionner avec la bibliothèque boto3, elles n'ont pas encore été testées.
Exigences
- barman-cli 2.10 (ou supérieur)
- Compte Amazon AWS
- awscli
- Compartiment S3
- Une instance PostgreSQL
Dans cet article, nous allons tester Barman CLI dans une machine virtuelle avec Debian Buster et PostgreSQL 12 qui est déjà opérationnel.
Installation
-
- Installer le référentiel public 2ndQuadrant
- Installez le paquet barman-cli
[email protected]:~# apt update [email protected]:~# apt install barman-cli
- Installer awscli
[email protected]:~# apt install awscli
Configuration et installation
Lisons le manuel :
[email protected]:~$ man barman-cloud-wal-archive [...] SYNOPSIS barman-cloud-wal-archive [OPTIONS] DESTINATION_URL SERVER_NAME WAL_PATH [...] POSITIONAL ARGUMENTS DESTINATION_URL URL of the cloud destination, such as a bucket in AWS S3. For example: s3://BUCKET_NAME/path/to/folder (where BUCKET_NAME is the bucket you have created in AWS). SERVER_NAME the name of the server as configured in Barman. WAL_PATH the value of the `%p' keyword (according to `archive_command'). [...]
Donc, pour l'utiliser correctement, il suffit de configurer les informations d'identification AWS avec le
awscli
outil commepostgres
utilisateur, en copiant la clé d'accès et la clé secrète précédemment créées dans la section IAM de la console AWS :[email protected]:~$ aws configure --profile barman-cloud AWS Access Key ID [None]: AKI***************** AWS Secret Access Key [None]: **************************************** Default region name [None]: eu-west-1 Default output format [None]: json
Assurez-vous d'avoir un compartiment S3 disponible sur AWS. J'ai choisi de l'appeler
barman-s3-test
pour que ce soit clair.
Nous devrions maintenant pouvoir tester lebarman-cloud-wal-archive
commande :[email protected]:~$ barman-cloud-wal-archive -t -P barman-cloud s3://barman-s3-test/ pg12 /var/lib/postgresql/12/main/pg_wal/000000010000000000000001 [email protected]:~$ echo $? 0
L'état de sortie confirme que la commande a réussi. Nous pouvons maintenant ajouter la ligne suivante en bas du fichier de configuration PostgreSQL et redémarrer l'instance :
archive_mode = on
[email protected]:~# systemctl restart [email protected]
Étant donné que nos données seront copiées dans un stockage distant, hors de notre contrôle, il est important que nous les stockions compressées et chiffré . Le
barman-cloud-wal-archive
La commande prend en charge deux méthodes de compression différentes :[email protected]:~$ barman-cloud-wal-archive --help [...] -z, --gzip gzip-compress the WAL while uploading to the cloud -j, --bzip2 bzip2-compress the WAL while uploading to the cloud -e ENCRYPTION, --encryption ENCRYPTION Enable server-side encryption for the transfer. Allowed values: 'AES256', 'aws:kms' [...]
L'option de chiffrement informera simplement le compartiment S3 de la méthode à utiliser pour stocker les données chiffrées. Les données chiffrées ne peuvent être lues par aucun autre utilisateur AWS que le propriétaire du compartiment. Le cloud Barman ne chiffre aucun objet avant de l'envoyer à S3, il demande simplement au bucket de les stocker chiffrés si S3 a été correctement configuré. Cependant, toutes les connexions à S3 sont établies de manière sécurisée via
https
.Ajoutons la ligne suivante au bas du
postgresql.conf
fichier :archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'
Cette fois, un simple rechargement de la configuration suffit pour appliquer les nouvelles modifications :
[email protected]:~$ psql -c “SELECT pg_reload_conf()”
Afin de tester si la nouvelle archive_command fonctionne, PostgreSQL devrait produire des fichiers WAL à archiver, nous devons donc faire du trafic avec l'aide de
pgbench
outil :[email protected]:~$ createdb pg_bench_db [email protected]:~$ pgbench -i -s10 pg_bench_db [some irrelevant output here] [email protected]:~$ pgbench -c 10 -j 2 -T 30 pg_bench_db starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 10 query mode: simple number of clients: 10 number of threads: 2 duration: 30 s number of transactions actually processed: 84501 latency average = 3.552 ms tps = 2815.224687 (including connections establishing) tps = 2815.427535 (excluding connections establishing)
À ce stade, nous devrions voir les fichiers WAL archivés dans le compartiment S3. Vérifions-le en construisant le chemin cible avec le nom du serveur et le répertoire de destination WAL :
[email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/ PRE 0000000100000000/
Jetons un coup d'œil dans le répertoire 0000000100000000 :
[email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/0000000100000000/ 2020-01-08 08:20:54 1624168 000000010000000000000001.bz2 2020-01-08 08:21:00 293422 000000010000000000000002.bz2 2020-01-08 08:21:06 301934 000000010000000000000003.bz2 2020-01-08 08:21:11 295648 000000010000000000000004.bz2 2020-01-08 08:21:16 293675 000000010000000000000005.bz2 2020-01-08 08:21:21 299348 000000010000000000000006.bz2 2020-01-08 08:21:27 551249 000000010000000000000007.bz2 2020-01-08 08:21:33 976523 000000010000000000000008.bz2 2020-01-08 08:21:37 4542104 000000010000000000000009.bz2 2020-01-08 08:21:46 5052693 00000001000000000000000A.bz2
Génial !
Les fichiers WAL sont compressés avant d'être téléchargés dans le compartiment S3 et sont stockés cryptés, ce qui nous permet d'économiser de l'espace (et de l'argent) et d'augmenter le niveau de sécurité de nos données.
Conclusion
Le
barman-cloud-wal-archive
commande est ce que les utilisateurs attendent depuis longtemps.Si vous faites partie de ceux qui ont utilisé
pre_archive_retry_script
pour implémenter un script personnalisé pour télécharger des fichiers WAL dans un compartiment S3, cela peut être utilisé comme un meilleur remplacement car il est développé et maintenu par les développeurs Barman, et il est testé et livré par le système de livraison continue 2ndQuadrant.Au cas où vous n'y auriez pas encore pensé, cela ouvre de nouvelles politiques de rétention qui peuvent être plus longues pour le stockage cloud que les locales Barman, augmentant l'âge des objets dans le cloud, tout en économisant de l'espace sur le stockage local, en configurant correctement une politique de rétention plus longue dans la configuration des buckets S3.
Sinon, il peut être utilisé comme nous l'avons fait dans cet article, pour archiver les fichiers WAL directement depuis le serveur PostgreSQL. Bien que cela supprime une étape intermédiaire, le RPO augmente par rapport à la méthode de streaming, car PostgreSQL n'archivera le fichier WAL qu'après l'avoir fermé. Par conséquent, en cas de problème sur le nœud PostgreSQL, nous pourrions perdre certaines modifications. Lorsque cela est possible, nous vous recommandons d'implémenter cette méthode avec le streaming vers un serveur Barman afin d'atteindre RPO=0 (avec diffusion synchrone).
Maintenant que nous avons mis en place un système d'archivage continu, nous pouvons effectuer notre première sauvegarde dans le cloud en utilisant le
barman-cloud-backup
outil.Rendez-vous dans la deuxième partie de l'article.