Migration auf PostgreSQL – so gelingt das Erstellen und Wiedereinspielen von Backups mit Veeam

Strategiewechsel in der Datenbankenwelt

Immer mehr Unternehmen reviewen zurzeit ihre Datenbankstrategie. Gründe dafür sind der überall herrschende Kostendruck aber auch die Reduzierung des Vendor Lock-ins. Dabei verabschieden sich viele von der klassischen Oracle-Datenbank und fällen die Entscheidung in Richtung PostgreSQL.

Ein funktionierendes Backup ist bei jeder Datenbank das A und O. Gerade wenn es sich um ein Single-Node-Cluster handelt und die Daten nicht auf einen weiteren Server repliziert werden, ist ein Backup oft die einzige Maßnahme, um Datenverlust bei einem Ausfall zu verhindern. Hierbei stellt sich, wie bei allen Systemen, die Frage: Mit welchem Backuptool sorge ich für Datensicherheit?

Zudem wollen viele Unternehmen bei ihrer derzeitigen Backup-Lösung bleiben, um zusätzliche Lizenzkosten zu vermeiden. Mit dem größten Marktanteil in seinem Segment hat sich Veeam als führende und bewährte Backup-Lösung für Unternehmen etabliert. Ganz im Sinne des Mottos “Entweder man geht mit der Zeit, oder man muss mit der Zeit gehen” folgt auch Veeam diesem Trend und hat mit der Version 12.3, welche im Dezember 2024 veröffentlicht wurde, Application-Aware-Processing sowie Item-Level-Recovery für PostgreSQL hinzugefügt2. Dies ermöglicht, neben normalen Backups des Systems, mit dessen zugehörigen Write-Ahead-Logs eine Point-in-Time Recovery durchzuführen.

Wie der Name verrät, lässt sich hierbei der Zeitpunkt, auf welchen das System zurückgesetzt werden soll, genau auswählen. Dafür werden keine weiteren Tools wie pgBackRest oder Barman benötigt. Dieser Blogpost zielt darauf, DBAs bei der Einrichtung von Veeam mit PostgreSQL zu unterstützen.

PostgreSQL Konfiguration

Die Konfiguration von PostgreSQL wird anhand eines Szenarios erläutert, in dem ein Single-Node-Cluster mit PostgreSQL 16.9 unter Ubuntu 22.04 betrieben sowie ein Windows Server 2022 mit Veeam Backup & Replication in der Version 12 genutzt wird. Ebenfalls wurde das Szenario mit der neueren PostgreSQL-Version 17.6 erfolgreich getestet. Falls noch nicht geschehen, muss PostgreSQL über einen Paketmanager mit z.B. apt install postgresql installiert werden. Daraufhin müssen einige Änderungen an der Konfiguration von PostgreSQL vorgenommen werden. Dies geschieht in der postgresql.conf, in der Regel zu finden unter:

/etc/postgresql/<version>/main 

oder

/var/lib/postgresql/<version>/main

Folgende Parameter müssen angepasst werden:

archive_mode= on
archive_command='' # Muss leer bleiben, da dies von Veeam gesteuert wird
wal_level= replica # Alternativ auch 'logical' möglich
  • “archive_mode= on” sorgt dafür, dass eine Kopie der Write-Ahead-Logs erstellt wird, wenn diese rotiert werden.
  • “archive_command= “ ist ein Command, mit welchem die Logs in ein anderes Verzeichnis kopiert werden. In diesem Fall wird der Command durch Veeam gesteuert.
  • “wal_level= replica oder logical” bestimmt den Detaillierungsgrad der Informationen, die in den WAL-Dateien gespeichert werden. In diesem Fall wird es auf replica gestellt, logical ist aber ebenfalls möglich.

Um die Verbindung zwischen Veeam und Postgres herzustellen, kann entweder der Standardbenutzer postgres genutzt oder ein dedizierter Nutzer für Veeam angelegt werden. In diesem Beispiel wird der postgres-User genutzt. Da der User standardmäßig kein Passwort besitzt, wird zunächst eines gesetzt. Dazu verbindet man sich mit dem Command-Line-Tool psql auf die Datenbank.

sudo su postgres
psql -h localhost -p 5432
ALTER USER postgres WITH PASSWORD 'postgres';

Dieser User muss dann für den Zugriff in PostgreSQLs Host-Based-Authentication-Datei pg_hba.conf berechtigt werden. Die Datei ist oft im gleichen Verzeichnis wie die postgresql.confzu finden. Hierzu muss die folgende Zeile hinzugefügt werden:

host  all  postgres  IP_VEEAM_SERVER/CIDR  scram-sha-256

IP_VEEAM_SERVER/CIDR ist mit der IP und der CIDR des tatsächlichen Servers zu ersetzen. Empfohlen wird ein sicheres Authentifizierungsverfahren wie SHA-256.
Daraufhin muss der PostgreSQL-Service neu gestartet werden, um die Änderungen anzuwenden.

systemctl restart postgresql

Zu guter Letzt muss ein Verzeichnis erstellt werden, auf welchen Veeam die Write-Ahead-Logs abfragen kann. Dazu bietet sich das /tmp-Verzeichnis an.

mkdir /tmp/veeam

Damit ist PostgreSQL-seitig alles eingerichtet und es kann mit Veeam fortgefahren werden.

Konfiguration von Veeam

Falls noch nicht vorhanden, muss Veeam Backup & Replication in der Version 12 installiert werden. Hierzu muss das Datenträgerimage (ISO) heruntergeladen und entweder physisch oder im Falle eines Hypervisors in der VM-Konfiguration angegeben werden.

Veeam Backup & Replikation ist nur unter Windows verfügbar. Es wird auf eine bestehende Windows Instanz installiert, in diesem Fall Windows Server. Hier kann einfach den Installationsschritten im Setup gefolgt werden.

Nach erfolgreicher Installation kann mit der Einrichtung begonnen werden. Hierzu wird zunächst ein neuer Backup-Job erstellt vom Typ “Linux computer” erstellt.

Screenshot des Veeam-Menüs. Der Menüpunkt "Backup Job" ist ausgewählt und blau unterlegt.
Abb. 1: Erstellen eines Backup-Jobs

Der Job-Type ist Server und der Mode, welcher genutzt wird, ist „Managed by backup server“.

Screenshot eines Menüs. Der Reiter "Job Mode" ist ausgewählt und dunkelgrau unterlegt. Im Lesebereich ist der Type "Server" und der Mode "Managed by backup server" ausgewählt.
Abb. 2: Job-Type sowie Modus auswählen

Der Name des Jobs sowie die Priorität kann beliebig gewählt werden. Im nächsten Teil wird der Server selbst hinzugefügt, in diesem Fall ein „Individual Computer“. Dies kann über die IP oder den Hostnamen geschehen.

Wichtig: Wird die IP gewählt, muss diese später für eine Wiederherstellung entweder im DNS oder in der Hosts-Datei des Servers, auf welchem Veeam installiert wurde, hinterlegt sein.

In unserem Fall erfolgt die Verbindung über die IP-Adresse. Ebenfalls wichtig ist, dass dabei der root-User oder ein User, welcher die Möglichkeit hat, Befehle mit “sudo” auszuführen, angegeben wird. Für diesen Test wird der root-User genutzt. Ebenfalls können auch Zertifikate zur Verifizierung des Users genutzt werden.

Screenshot einer Einstellung, um einen Computer hinzuzufügen. Der erste Punkt "Connect using admin credentials" wurde ausgewählt und darunter "root" im Drop-Downmenü ausgewählt.
Abb. 3: Computer zu einem Job hinzufügen

Als Backup Mode wird „Entire Computer“ genutzt. Wenn benötigt, kann im nächsten Schritt ein alternatives Repository gewählt werden, auf dem die Backups gespeichert werden sollen.

Nun erfolgt der entscheidende Schritt: Application-Aware-Processing muss aktiviert werden. Ebenfalls müssen die Guest OS Credentials passen. Unter dem Reiter „Applications“ werden dann weitere Einstellungen vorgenommen.

Screenshot eines Menüs. Der Reiter "Guest Processing" auf der linken Seite ist ausgewählt und dunkelgrau unterlegt. Auf der rechten Seite wurde die Checkbox "Enable application-aware processing" ausgewählt.
Abb. 4: Application-Aware-Processing aktivieren

Hier muss der Server, falls noch nicht vorhanden, hinzugefügt und im „General“-Tab „Require success“ aktiviert werden. Im Tab PostgreSQL muss der für Veeam erstellte User oder der postgres-User selbst hinzugefügt werden, je nachdem wie in pg_hba.conf konfiguriert.

Des weiteren ist es wichtig, die Option „Backup logs“ mit einer sinnvollen Zeitspanne zu aktivieren. Damit sind die WAL-Files gemeint. In diesen Zeitabständen werden die Daten-Unterschiede für die PITR gespeichert. Hier wird ebenfalls der zuvor erstellte Pfad im /tmp-Verzeichnis hinterlegt.

Screenshot eines Menüs. Der Reiter "Guest Processing" auf der linken Seite ist ausgewählt und dunkelgrau unterlegt. Zusätzlich sind die "Processing Settings" zu sehen, in denen "Database user with password", "backup logs every 5 minutes" und "until the corresponding image-level backup is deleted" ausgewählt wurden.
Abb. 5: PostgreSQL-spezifische Einstellungen unter Application-Aware-Processing

Zu guter Letzt kann „Run daily“ aktiviert werden, um Sicherungen zu automatisieren. Somit kann die Erstellung des Jobs abgeschlossen werden.

Backups erstellen

Es lassen sich Voll-Backups sowie Inkrementelle Backups erstellen, mit beiden kann eine PITR durchgeführt werden. Hier empfiehlt es sich eine gute Balance bzw. Schedule zwischen den beiden Backuparten zu finden, um Speicherplatz zu sparen aber trotzdem auf einen aktuellen Backupstand zurückgreifen zu können. Durch das Starten des Jobs wird ein Inkrementelles Backup ausgeführt. Mit „Activate Full“ wird ein Voll-Backup erstellt. Nach der ersten Ausführung wird ein Child-Prozess vom Typ „Linux Agent Log Backup“ erstellt. Dieser fragt regelmäßig die Write-Ahead-Logs ab und speichert diese.

Screenshot einer Tabelle mit 2 Zeilen und 4 Spalten, die den Child-Prozess beschreibt. Dargestellt sind Job Name, Session Type, Status und Start Time.
Abb. 6: Erstellter Child-Prozess, um WAN-Logs zu speichern

Falls es während der Ausführung des Backups zu einer Fehlermeldung wie „Peer authen-tication failed for user“ kommt, bitte die Angaben in der pg_hba.conf prüfen.

Backups wiederherstellen & Point-in-Time Recovery durchführen

Um ein Backup wiederherzustellen oder eine Point-in-Time Recovery durchzuführen, wird “Agent Restore” genutzt.

Screenshot eines Menüs. Der Reiter "Restore" ist ausgewählt und blau unterlegt.
Abb. 7: Durchführung einer Wiederherstellung der Datenbank

Hier wird „Database restore“ und „PostgreSQL Database“ ausgewählt. Daraufhin wird der Job-Name sowie dessen Backup, von welchem man den Restore aus durchführen will, ausgewählt. Dies startet den Veeam PostgreSQL-Explorer. In diesem wird das Backup geladen und man kann die PostgreSQL-Instanz auswählen, welche man wiederherstellen möchte. Ebenfalls gibt es die Möglichkeit, die Wiederherstellung auf einen anderen Server zu ermöglichen.

Screenshot eines Menüs zur Wiederherstellung einer Datenbankinstanz. Im Untermenü auf der linken Seite ist "psotgres-veeam-db-2:5432" ausgewählt. Im Lesebereich auf der rechten Seite stehen Informationen zur Instanz.
Abb. 8: Auswählen der wiederherzustellenden Datenbankinstanz

Zum Abschluss wird der exakte Zeitpunkt, auf den man den Server zurücksetzen möchte, ausgewählt.

Screenshot des Restore Wizards. Dargestellt ist die Einstellung "specify restore point". Ausgewählt wurde die zweite Option "Restore a specific point in time (requires WAL log backups)".
Abb. 9: Durchführen einer Point-in-Time Recovery

Dadurch startet die Point-in-Time Recovery. Gegebenenfalls gibt es während des Vorgangs eine Rückfrage, ob man das aktuelle Verzeichnis überschreiben möchte. Dies dient als letzte Abfrage, ob die Daten auf dem derzeitigen Cluster überschrieben werden sollen.

Nach Abschluss wurde die Point-in-Time Recovery erfolgreich durchgeführt.

Testen des Backups

Am einfachsten kann man die Wiederherstellung testen, in dem man die Daten zwischen den WAL-Backups verändert und mit der Funktion SELECT pg_switch_wal(); unter psql ausführt. Dies sorgt dafür, dass das aktuelle WAL-File geschlossen und archiviert wird. Nach der Recovery sollten die Dateien dann auf dem vorherigen Stand sein. Wenn das der Fall ist, wurde die Recovery richtig konfiguriert.

Fazit: Ein erleichterter Umstieg mit einem etablierten Tool

Mit dem Umstieg auf PostgreSQL können Lizenzkosten eingespart sowie die Abhängigkeit von proprietären Systemen reduziert werden. Dabei ist PostgreSQL mindestens eine gute Alternative, wenn nicht sogar ein Upgrade des bisherigen DBMS.

Mit dem hinzugefügten Support von PostgreSQL unter Veeam steht nun ein bewährtes Backup-Tool zur Verfügung, wodurch sich das Datenbankmanagementsystem besser in eine vorhandene Infrastruktur integrieren lässt. Dies erleichtert den Umstieg, da keine neuen Tools und dessen Lizenzen eingekauft werden müssen und Administratoren mit einem vertrauten Tool weiterarbeiten können.

Die in diesem Artikel beschriebenen Schritte bieten einen Einblick in den Aufbau einer PostgreSQL-Umgebung in Kombination mit Veeam. Sie bieten die Grundlage für einen praxisnahen Einsatz von Veeam in Verbindung mit PostgreSQL für die Erstellung und Wiederherstellung von Backups sowie einer Point-in-Time Recovery ohne zusätzliche Tools.

Ich hoffe, ich konnte mit diesem Artikel einen hilfreichen Einblick über den Umgang mit Veeam & PostgreSQL sowie dessen Möglichkeiten im Zusammenspiel geben.

Quellen

1: Veeam Marketshare

2: Veeam fügt PostgreSQL-Support hinzu