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
- barman-cli 2.10 (of hoger)
- Amazon AWS-account
- awscli
- S3-emmer
- 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
-
- Installeer de 2ndQuadrant Public repository
- Installeer het barman-cli-pakket
[email protected]:~# apt update [email protected]:~# apt install barman-cli
- 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 depostgres
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 debarman-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.