sql >> Database >  >> RDS >> PostgreSQL

Barman Cloud – Deel 1:WAL Archief

Inleiding

Hoeveel huidige Barman-gebruikers hebben nagedacht over het opslaan van back-ups op een externe bestemming in de cloud? Hoevelen hebben erover nagedacht om die back-up rechtstreeks van de PostgreSQL-server zelf te nemen?

Nou, sinds Barman 2.10 dit is nu mogelijk!
Hoe?
Laten we dat samen ontdekken in de volgende artikelen.

Vereisten

De volgende twee artikelen zijn bedoeld als praktische introductie tot het nieuwe barman-cloud-wal-archive en barman-cloud-backup tools toegevoegd in de barman-cli pakket.
Het eerste deel behandelt het barman-cloud-wal-archive commando terwijl de tweede de barman-cloud-backup . zal dekken command.
Lezers hebben basiskennis nodig van PostgreSQL WAL-archiverings- en back-upmethoden en Barman. Het wordt ook aanbevolen dat u op de hoogte bent van cloudtechnologieën voor opslagoplossingen zoals Amazon S3.

WAL-archief

Barman heeft jarenlang gefunctioneerd als een extern WAL-archief en het Barman CLI-pakket is ontworpen om de archiveringsbetrouwbaarheid en robuustheid aan de PostgreSQL-kant te vergroten. In feite barman-cli biedt scripts zoals barman-wal-restore waardoor een standby-knooppunt op een slimme en veilige manier WAL-bestanden uit een Barman-archief kan herstellen via de restore_command parameter in de postgresql.auto.conf bestand (of recovery.conf bestand tot PostgreSQL 12), en barman-wal-archive om WAL-bestanden van een hoofdknooppunt naar Barman te archiveren via het archive_command parameter geconfigureerd in de postgresql.conf bestand.

Cloud WAL-archief

Dankzij de feedback van gebruikers hebben de Barman-ontwikkelaars twee nieuwe tools geïntroduceerd in versie 2.10 :

  • barman-cloud-wal-archive
  • barman-cloud-backup

Versie 2.11 zal twee extra tools voor herstel bevatten, genaamd barman-cloud-wal-restore en barman-cloud-restore .
Dit bericht is volledig gewijd aan barman-cloud-wal-archive , die WAL-bestanden in de cloud kan opslaan, archivering op meerdere niveaus mogelijk maakt met Barman en het bewaarbeleid voor back-ups uitbreidt.
Inderdaad, barman-cloud-wal-archive kan worden gebruikt als een hook-script voor het configureren van het pre_archive_retry_script parameter in Barman, om WAL-bestanden naar de geconfigureerde cloudopslag te kopiëren, de redundantie van het archief te vergroten en het mogelijk te maken om een ​​langer bewaarbeleid te kiezen dan dat van Barman.

Dat is niet alles!

barman-cloud-wal-archive kan het barman-wal-archive . vervangen commando in de archive_command parameter, om WAL-bestanden direct in de cloud te archiveren, in plaats van ze naar de Barman-server te kopiëren. Op deze manier kan zelfs een PostgreSQL-cluster die geen aparte speciale back-upserver heeft, vertrouwen op externe opslagservice om WAL-bestanden te archiveren.

Hoe werkt het?

De volgende instructies zijn alleen voor het installeren en configureren van barman-cloud-wal-archive als de archive_command in PostgreSQL.
Bepaal eerst waar u WAL-bestanden wilt archiveren. In dit artikel zullen we Amazon S3 gebruiken, wat op het moment van schrijven de enige technologie is die wordt ondersteund. Hoewel andere technologieën die S3-achtige API ondersteunen (Google Cloud, DigitalOcean, Microsoft Azure, enz.) kunnen werken met de boto3-bibliotheek, zijn ze nog niet getest.

Vereisten

  1. barman-cli 2.10 (of hoger)
  2. Amazon AWS-account
  3. awscli
  4. S3-emmer
  5. Een PostgreSQL-instantie

In dit artikel zullen we Barman CLI . testen in een virtuele machine met Debian Buster en PostgreSQL 12 die al in gebruik is.

Installatie

    1. Installeer de 2ndQuadrant Public repository
    2. Installeer het barman-cli-pakket
      [email protected]:~# apt update
      [email protected]:~# apt install barman-cli
    3. Installeer awscli
      [email protected]:~# apt install awscli

    Configuratie en configuratie

    Laten we de handleiding lezen:

    [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').
    [...]
    

    Dus om het correct te gebruiken, hoeven we alleen AWS-inloggegevens te configureren met de awscli tool als de postgres gebruiker, kopieert de toegangssleutel en geheime sleutel die eerder zijn gemaakt in de IAM-sectie in de AWS-console:

    [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
    

    Zorg ervoor dat u een beschikbare S3-bucket op AWS hebt. Ik koos ervoor om het barman-s3-test te noemen om het duidelijk te maken.
    We zouden nu in staat moeten zijn om de barman-cloud-wal-archive te testen commando:

    [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
    

    De afsluitstatus bevestigt dat de opdracht is geslaagd. We kunnen nu de volgende regel onderaan het PostgreSQL-configuratiebestand toevoegen en de instantie opnieuw opstarten:
    archive_mode = on

    [email protected]:~# systemctl restart [email protected]
    

    Aangezien onze gegevens worden gekopieerd in een externe opslag, buiten onze controle, is het belangrijk dat we ze gecomprimeerd opslaan en versleuteld . Het barman-cloud-wal-archive commando ondersteunt twee verschillende methoden voor compressie:

    [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'
    [...]
    

    De coderingsoptie informeert de S3-bucket alleen welke methode moet worden gebruikt om de gegevens versleuteld op te slaan. Versleutelde gegevens kunnen niet worden gelezen door een andere AWS-gebruiker dan de eigenaar van de bucket. Barman Cloud versleutelt geen enkel object voordat het naar S3 wordt verzonden, het vraagt ​​de bucket alleen om ze versleuteld op te slaan als S3 correct is geconfigureerd. Eventuele verbindingen met S3 worden echter veilig tot stand gebracht via https .

    Laten we de volgende regel toevoegen onderaan de postgresql.conf bestand:

    archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'

    Deze keer is het opnieuw laden van de configuratie voldoende om de nieuwe wijzigingen toe te passen:

    [email protected]:~$ psql -c “SELECT pg_reload_conf()”
    

    Om te testen of het nieuwe archive_command werkt, zou PostgreSQL WAL-bestanden moeten produceren die gearchiveerd moeten worden, daarom moeten we wat verkeer genereren met behulp van de pgbench hulpmiddel:

    [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)
    

    Op dit punt zouden we WAL-bestanden moeten zien die zijn gearchiveerd in de S3-bucket. Laten we eens kijken en het doelpad bouwen met de servernaam en de WAL-bestemmingsdirectory:

    [email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/
                            PRE 0000000100000000/
    

    Laten we eens kijken in de directory 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
    

    Geweldig!

    WAL-bestanden worden gecomprimeerd voordat ze worden geüpload naar de S3-bucket en worden versleuteld opgeslagen, wat ons ruimte (en geld) bespaart en het beveiligingsniveau van onze gegevens verhoogt.

    Conclusies

    Het barman-cloud-wal-archive commando is waar gebruikers lang op hebben gewacht.

    Als jij een van degenen bent die pre_archive_retry_script . heeft gebruikt om een ​​aangepast script te implementeren voor het uploaden van WAL-bestanden naar een S3-bucket, dan kan dit worden gebruikt als een betere vervanging omdat het is ontwikkeld en onderhouden door Barman-ontwikkelaars, en het wordt getest en geleverd door het 2ndQuadrant Continuous Delivery-systeem.

    Voor het geval je er nog niet over hebt nagedacht, opent dit nieuwe bewaarbeleid dat langer kan zijn voor cloudopslag dan de lokale Barman, waardoor de leeftijd van de objecten in de cloud wordt verhoogd, terwijl ruimte wordt bespaard op de lokale opslag, door de juiste instelling een langer bewaarbeleid in de configuratie van de S3-buckets.

    Anders kan het worden gebruikt, zoals we in dit artikel hebben gedaan, om WAL-bestanden rechtstreeks vanaf de PostgreSQL-server te archiveren. Hoewel hiermee een tussenstap wordt verwijderd, is de RPO neemt toe in vergelijking met de streamingmethode, omdat PostgreSQL het WAL-bestand pas archiveert nadat het is gesloten. Daarom kunnen we in het geval van problemen op het PostgreSQL-knooppunt enkele wijzigingen verliezen. Indien mogelijk raden we aan deze methode samen met de streaming naar een Barman-server te implementeren om RPO=0 te bereiken (met synchrone streaming).

    Nu we een continu archiveringssysteem hebben, kunnen we onze eerste cloudback-up . maken met behulp van de barman-cloud-backup gereedschap.

    Tot ziens in het tweede deel van het artikel.


  1. Controleer niet-verzonden e-mail in SQL Server (T-SQL)

  2. Berekeningen doen in MySQL versus PHP

  3. Hoe wordt de JDBC-querytime-out van Oracle geïmplementeerd?

  4. MySQL OP DUPLICATE KEY - laatste invoeg-ID?