Präambel
Wie viele aktuelle Barman-Benutzer haben darüber nachgedacht, Backups an einem entfernten Ziel in der Cloud zu speichern? Wie viele haben daran gedacht, diese Sicherung direkt vom PostgreSQL-Server selbst zu nehmen?
Nun, seit Barmann 2.10 das ist jetzt möglich!
Wie?
Das entdecken wir gemeinsam in den folgenden Artikeln.
Anforderungen
Die folgenden zwei Artikel sollen eine praktische Einführung in das neue barman-cloud-wal-archive
sein und barman-cloud-backup
Werkzeuge, die im barman-cli
hinzugefügt wurden Paket.
Der erste Teil behandelt das barman-cloud-wal-archive
Befehl, während der zweite das barman-cloud-backup
abdeckt Befehl.
Leser benötigen Grundkenntnisse der PostgreSQL-WAL-Archivierungs- und Sicherungsmethoden sowie von Barman. Es wird außerdem empfohlen, dass Sie sich mit Cloud-Technologien für Speicherlösungen wie Amazon S3 auskennen.
WAL-Archiv
Barman fungiert seit vielen Jahren als Remote-WAL-Archiv, und das Barman-CLI-Paket wurde entwickelt, um die Archivierungszuverlässigkeit und -robustheit auf der PostgreSQL-Seite zu erweitern. Genau genommen barman-cli
bietet Skripte wie barman-wal-restore
ermöglicht einem Standby-Knoten die intelligente und sichere Wiederherstellung von WAL-Dateien aus einem Barman-Archiv durch den restore_command
-Parameter in der postgresql.auto.conf
Datei (oder recovery.conf
Datei bis PostgreSQL 12) und barman-wal-archive
um WAL-Dateien von einem Master-Knoten zu Barman durch den archive_command
zu archivieren Parameter, der in der postgresql.conf
konfiguriert ist Datei.
Cloud WAL-Archiv
Dank des Feedbacks der Benutzer haben die Barman-Entwickler zwei neue Tools in Version 2.10 eingeführt :
barman-cloud-wal-archive
barman-cloud-backup
Version 2.11 enthält zwei zusätzliche Wiederherstellungstools namens barman-cloud-wal-restore
und barman-cloud-restore
.
Dieser Beitrag ist ausschließlich barman-cloud-wal-archive
gewidmet , das WAL-Dateien in der Cloud speichern kann, eine mehrschichtige Archivierung mit Barman ermöglicht und die Aufbewahrungsrichtlinie für Backups erweitert.
In der Tat, barman-cloud-wal-archive
kann als Hook-Skript verwendet werden, das das pre_archive_retry_script
konfiguriert Parameter in Barman, um WAL-Dateien in den konfigurierten Cloud-Speicher zu kopieren, die Redundanz des Archivs zu erhöhen und es möglich zu machen, eine längere Aufbewahrungsrichtlinie als die von Barman zu wählen.
Das ist noch nicht alles!
barman-cloud-wal-archive
kann das barman-wal-archive
ersetzen Befehl im archive_command
-Parameter, um WAL-Dateien direkt in der Cloud zu archivieren, anstatt sie auf den Barman-Server zu kopieren. Auf diese Weise kann sich sogar ein PostgreSQL-Cluster, der keinen separaten dedizierten Sicherungsserver hat, auf den Remote-Speicherdienst verlassen, um WAL-Dateien zu archivieren.
Wie funktioniert es?
Die folgenden Anweisungen dienen lediglich der Installation und Konfiguration von barman-cloud-wal-archive
als archive_command
in PostgreSQL.
Entscheiden Sie zuerst, wo WAL-Dateien archiviert werden sollen. In diesem Artikel verwenden wir Amazon S3, das zum Zeitpunkt des Schreibens die einzige unterstützte Technologie ist. Obwohl andere Technologien, die eine S3-ähnliche API unterstützen (Google Cloud, DigitalOcean, Microsoft Azure usw.), mit der boto3-Bibliothek funktionieren können, wurden sie noch nicht getestet.
Anforderungen
- barman-cli 2.10 (oder höher)
- Amazon AWS-Konto
- awscli
- S3-Bucket
- Eine PostgreSQL-Instanz
In diesem Artikel testen wir Barman CLI in einer virtuellen Maschine mit Debian Buster und PostgreSQL 12 die bereits läuft.
Installation
-
- Installieren Sie das öffentliche 2ndQuadrant-Repository
- Installieren Sie das barman-cli-Paket
[email protected]:~# apt update [email protected]:~# apt install barman-cli
- Installieren Sie awscli
[email protected]:~# apt install awscli
Konfiguration und Einrichtung
Lesen wir das Handbuch:
[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'). [...]
Um es richtig zu verwenden, müssen wir also nur die AWS-Anmeldeinformationen mit
awscli
konfigurieren alspostgres
Benutzer, indem Sie den zuvor im IAM-Abschnitt der AWS-Konsole erstellten Zugriffsschlüssel und geheimen Schlüssel kopieren:[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
Stellen Sie sicher, dass Sie einen verfügbaren S3-Bucket auf AWS haben. Ich habe mich für den Namen
barman-s3-test
entschieden um es deutlich zu machen.
Wir sollten jetzt in der Lage sein, dasbarman-cloud-wal-archive
zu testen Befehl:[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
Der Exit-Status bestätigt, dass der Befehl erfolgreich war. Wir können jetzt die folgende Zeile am Ende der PostgreSQL-Konfigurationsdatei hinzufügen und die Instanz neu starten:
archive_mode = on
[email protected]:~# systemctl restart [email protected]
Da unsere Daten außerhalb unserer Kontrolle in einen externen Speicher kopiert werden, ist es wichtig, dass wir sie komprimiert speichern und verschlüsselt . Das
barman-cloud-wal-archive
Der Befehl unterstützt zwei verschiedene Komprimierungsmethoden:[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' [...]
Die Verschlüsselungsoption teilt dem S3-Bucket lediglich mit, welche Methode zum Speichern der verschlüsselten Daten verwendet werden soll. Verschlüsselte Daten können von keinem anderen AWS-Benutzer außer dem Eigentümer des Buckets gelesen werden. Die Barman-Cloud verschlüsselt kein Objekt, bevor es an S3 gesendet wird. Sie fordert den Bucket lediglich auf, sie verschlüsselt zu speichern, wenn S3 ordnungsgemäß konfiguriert wurde. Alle Verbindungen zu S3 werden jedoch sicher über
https
hergestellt .Lassen Sie uns die folgende Zeile am Ende der
postgresql.conf
hinzufügen Datei:archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'
Diesmal genügt ein Neuladen der Konfiguration, um die neuen Änderungen zu übernehmen:
[email protected]:~$ psql -c “SELECT pg_reload_conf()”
Um zu testen, ob der neue archive_command funktioniert, sollte PostgreSQL zu archivierende WAL-Dateien erzeugen, daher müssen wir mit Hilfe von
pgbench
etwas Verkehr machen Werkzeug:[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)
An diesem Punkt sollten wir WAL-Dateien sehen, die im S3-Bucket archiviert sind. Lassen Sie es uns überprüfen, indem wir den Zielpfad mit dem Servernamen und dem WAL-Zielverzeichnis erstellen:
[email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/ PRE 0000000100000000/
Werfen wir einen Blick in das Verzeichnis 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
Großartig!
WAL-Dateien werden vor dem Hochladen in den S3-Bucket komprimiert und verschlüsselt gespeichert, wodurch wir Platz (und Geld) sparen und das Sicherheitsniveau unserer Daten erhöhen.
Schlussfolgerungen
Das
barman-cloud-wal-archive
Befehl ist das, worauf Benutzer lange gewartet haben.Wenn Sie einer von denen sind, die
pre_archive_retry_script
verwendet haben um ein benutzerdefiniertes Skript zum Hochladen von WAL-Dateien in einen S3-Bucket zu implementieren, kann dies als besserer Ersatz verwendet werden, da es von Barman-Entwicklern entwickelt und gepflegt und vom 2ndQuadrant Continuous Delivery-System getestet und bereitgestellt wird.Falls Sie noch nicht darüber nachgedacht haben, eröffnet dies neue Aufbewahrungsrichtlinien, die für Cloud-Speicher länger sein können als die lokalen Barman-Richtlinien, wodurch das Alter der Objekte in der Cloud erhöht und gleichzeitig Speicherplatz auf dem lokalen Speicher gespart wird, indem sie richtig eingestellt werden eine längere Aufbewahrungsrichtlinie in der Konfiguration der S3-Buckets.
Andernfalls kann es wie in diesem Artikel verwendet werden, um WAL-Dateien direkt vom PostgreSQL-Server zu archivieren. Dadurch entfällt zwar ein Zwischenschritt, der RPO erhöht sich im Vergleich zur Streaming-Methode, da PostgreSQL die WAL-Datei erst archiviert, nachdem sie geschlossen wurde. Daher könnten wir bei Problemen auf dem PostgreSQL-Knoten einige Änderungen verlieren. Wenn möglich, empfehlen wir, diese Methode zusammen mit dem Streaming auf einen Barman-Server zu implementieren, um RPO=0 zu erreichen (mit synchronem Streaming).
Jetzt, da wir ein kontinuierliches Archivierungssystem eingerichtet haben, können wir unser erstes Cloud-Backup erstellen mit dem
barman-cloud-backup
Werkzeug.Wir sehen uns im zweiten Teil des Artikels.