PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Barman Cloud – Partie 1 :Archive WAL

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

  1. barman-cli 2.10 (ou supérieur)
  2. Compte Amazon AWS
  3. awscli
  4. Compartiment S3
  5. 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

    1. Installer le référentiel public 2ndQuadrant
    2. Installez le paquet barman-cli
      [email protected]:~# apt update
      [email protected]:~# apt install barman-cli
    3. 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 comme postgres 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 le barman-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.