PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

pghoard-Alternativen - PostgreSQL-Sicherungsverwaltung mit ClusterControl

Die manuelle Verwaltung von Sicherungen kann eine komplexe und riskante Aufgabe sein. Sie müssen wissen, dass die Sicherung gemäß Ihrer Sicherungsrichtlinie funktioniert, da Sie nicht in die Situation geraten möchten, dass Sie die Sicherung benötigen und sie nicht funktioniert oder nicht existiert. Das wird sicher ein großes Problem. Daher ist es hier am besten, eine kampferprobte Sicherungsverwaltungsanwendung zu verwenden, um Probleme im Falle eines Ausfalls zu vermeiden.

PGHoard ist ein PostgreSQL-Backup-Daemon und ein Wiederherstellungssystem, das Backup-Daten in Cloud-Objektspeichern speichert. Es unterstützt PostgreSQL 9.3 oder höher bis PostgreSQL 11, die derzeit aktuellste unterstützte Version. Die aktuelle PGHoard-Version ist 2.1.0, veröffentlicht im Mai 2019 (vor 1 Jahr).

ClusterControl ist eine agentenlose Verwaltungs- und Automatisierungssoftware für Datenbank-Cluster. Es hilft bei der Bereitstellung, Überwachung, Verwaltung und Skalierung Ihres Datenbankservers/Clusters direkt über die ClusterControl-Benutzeroberfläche oder mithilfe der ClusterControl-CLI. Es enthält Sicherungsverwaltungsfunktionen und unterstützt die Versionen PostgreSQL 9.6, 10, 11 und 12. Die aktuelle ClusterControl-Version ist 1.7.6, veröffentlicht im April 2020.

In diesem Blog vergleichen wir PGHoard mit der ClusterControl Backup Management-Funktion und wir werden sehen, wie man beide Systeme installiert und verwendet. Dazu verwenden wir einen Ubuntu 18.04-Server und PostgreSQL11 (da dies die neueste unterstützte Version für die Verwendung von PGHoard ist). Wir installieren PGHoard auf demselben Datenbankserver und importieren es in ClusterControl.

Vergleich der Sicherungsverwaltungsfunktionen

PGHoard

Einige der wichtigsten Funktionen von PGHoard sind:

  • Automatische periodische Basissicherungen
  • Automatische Backups von Transaktionsprotokollen
  • Eigenständige Hot-Backup-Unterstützung
  • Cloud-Objektspeicherunterstützung (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Backup-Wiederherstellung direkt aus dem Objektspeicher, komprimiert und verschlüsselt
  • Point-in-Time-Recovery (PITR)
  • Initialisieren Sie einen neuen Standby aus Objektspeichersicherungen, der automatisch als replizierender Hot-Standby konfiguriert wird
  • Parallele Komprimierung und Verschlüsselung

Eine Möglichkeit, es zu verwenden, besteht darin, eine separate Backup-Maschine zu haben, damit PGHoard sich mit pg_receivexlog verbinden kann, um WAL-Dateien von der Datenbank zu erhalten. Ein anderer Modus ist die Verwendung von pghoard_postgres_command als PostgreSQL archive_command. In beiden Fällen erstellt PGHoard regelmäßige Basissicherungen mit pg_basebackup.

ClusterControl

Sehen wir uns auch einige der wichtigsten Merkmale dieses Systems an:

  • Benutzerfreundliche Benutzeroberfläche
  • Sichern und Wiederherstellen (im selben Knoten oder in einem separaten)
  • Backups planen
  • Cluster aus Backup erstellen
  • Automatische Sicherungsüberprüfung
  • Komprimierung
  • Verschlüsselung
  • Automatischer Cloud-Upload
  • Point-in-Time-Recovery (PITR)
  • Verschiedene Backup-Methoden (logisch, physisch, vollständig, inkrementell usw.)
  • Betriebsberichte sichern

Da dies nicht nur ein Backup-Verwaltungssystem ist, werden wir auch verschiedene wichtige Funktionen erwähnen, die nicht nur die Backup-bezogenen sind:

  • Datenbanken bereitstellen/importieren:Standalone, Cluster/Replikation, Load Balancer
  • Skalierung:Knoten hinzufügen/entfernen, Read Replicas, Cluster-Klonen, Cluster-zu-Cluster-Replikation
  • Überwachung:Benutzerdefinierte Dashboards, Fehlererkennung, Abfrageüberwachung, Leistungsberater, Alarme und Benachrichtigungen, Entwicklung benutzerdefinierter Berater
  • Automatische Wiederherstellung:Knoten- und Clusterwiederherstellung, Failover, Hochverfügbarkeitsumgebungen
  • Verwaltung:Konfigurationsverwaltung, Datenbank-Patch-Upgrades, Datenbankbenutzerverwaltung, Cloud-Integration, Ops-Berichte, ProxySQL-Verwaltung
  • Sicherheit:Schlüsselverwaltung, rollenbasierte Zugriffskontrolle, Authentifizierung über LDAP/Active Directory, SSL-Verschlüsselung

Die empfohlene Topologie besteht darin, einen separaten Knoten zum Ausführen von ClusterControl zu haben, um sicherzustellen, dass Sie im Fehlerfall die Vorteile der automatischen Wiederherstellung und der Failover-ClusterControl-Funktionen (neben anderen nützlichen Funktionen) nutzen können. .

Systemanforderungen

PGHoard

Laut der Dokumentation kann PGHoard PostgreSQL-Versionen 9.3 und höher sichern und wiederherstellen. Der Daemon ist in Python implementiert und funktioniert mit CPython Version 3.5 oder neuer. Abhängig von den Anforderungen können die folgenden Python-Module erforderlich sein:

  • psycopg2 zum Nachschlagen von Transaktionsprotokoll-Metadaten
  • Anfragen für die interne Client-Server-Architektur
  • Azure für Microsoft Azure-Objektspeicherung
  • botocore für AWS S3 (oder Ceph-S3) Objektspeicher
  • Google-API-Client für Google Cloud-Objektspeicherung
  • Kryptografie für Sicherungsverschlüsselung und -entschlüsselung (Version 0.8 oder neuer erforderlich)
  • snappy für Snappy-Komprimierung und -Dekomprimierung
  • zstandard für Zstandard (zstd)-Komprimierung und -Dekomprimierung
  • systemd für systemd-Integration
  • swiftclient für OpenStack Swift-Objektspeicherung
  • paramiko für sftp-Objektspeicherung

Das unterstützte Betriebssystem wird nicht erwähnt, aber es heißt, dass es auf modernen Linux x86-64-Systemen getestet wurde, aber auf anderen Plattformen funktionieren sollte, die die erforderlichen Module bereitstellen.

ClusterControl

Folgende Software wird vom ClusterControl-Server benötigt:

  • MySQL-Server/-Client
  • Apache-Webserver (oder nginx)
  • mod_rewrite
  • mod_ssl
  • Überschreiben von .htaccess zulassen
  • PHP (5.4 oder höher)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Linux Kernel Security (SElinux oder AppArmor) – muss deaktiviert oder auf den Permissive-Modus eingestellt sein
  • OpenSSH-Server/Client
  • BASH (empfohlen:Version 4 oder höher)
  • NTP-Server – Die Zeit aller Server muss unter einer Zeitzone synchronisiert werden
  • socat oder netcat - für Streaming-Backups

Und es unterstützt verschiedene Betriebssysteme:

  • Red Hat Enterprise Linux 6.x/7.x/8.x
  • CentOS 6.x/7.x/8.x
  • Ubuntu 12.04/14.04/16.04/18.04 LTS
  • Debian 7.x/8.x/9.x/10.x

Wenn ClusterControl per Installationsskript (install-cc) oder Paketmanager (yum/apt) installiert wird, werden alle Abhängigkeiten automatisch erfüllt.

Bei PostgreSQL werden die Versionen 9.6/10.x/11.x/12.x unterstützt. Eine vollständige Liste der unterstützten Datenbanken finden Sie in der Dokumentation.

Es erfordert lediglich einen passwortlosen SSH-Zugriff auf die Datenbankknoten (unter Verwendung privater und öffentlicher Schlüssel) und einen privilegierten Betriebssystembenutzer (es könnte ein Root- oder Sudo-Benutzer sein).

Der Installationsprozess

PGHoard-Installationsprozess

Wir gehen davon aus, dass Sie Ihre PostgreSQL-Datenbank eingerichtet und ausgeführt haben, also lassen Sie uns die restlichen Pakete installieren. PGHoard ist ein Python-Paket. Nachdem Sie die erforderlichen Pakete installiert haben, können Sie es mit dem Pip-Befehl installieren:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

Als Teil dieses Installationsvorgangs müssen Sie die PostgreSQL-Instanz für die Arbeit mit diesem Tool vorbereiten. Dazu müssen Sie die postgresql.conf bearbeiten, um das WAL-Archiv zuzulassen und die max_wal_senders:

zu erhöhen
wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Diese Änderung erfordert einen Neustart der Datenbank:

$ service postgresql restart

Erstellen wir nun einen Datenbankbenutzer für PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Und fügen Sie die folgende Zeile in die Datei pg_hba.conf ein:

host    replication  pghoard  127.0.0.1/32/32  md5

Datenbankdienst neu laden:

$ service postgresql reload

Damit es funktioniert, müssen Sie eine JSON-Konfigurationsdatei für PGHoard erstellen. Wir werden dies im nächsten Abschnitt „Verwendung“ sehen.

ClusterControl-Installationsprozess

Es gibt verschiedene Installationsmethoden, wie in der Dokumentation erwähnt. Im Falle einer manuellen Installation werden die erforderlichen Pakete in derselben Dokumentation angegeben, und es gibt eine Schritt-für-Schritt-Anleitung für den gesamten Vorgang.

Sehen wir uns ein Beispiel mit dem automatischen Installationsskript an.

$ wget http://www.severalnines.com/downloads/cmon/install-cc

$ chmod +x install-cc

$ sudo ./install-cc   # omit sudo if you run as root

Das Installationsskript versucht, die folgenden Aufgaben zu automatisieren:

  • Installieren und konfigurieren Sie einen lokalen MySQL-Server (der von ClusterControl zum Speichern von Überwachungsdaten verwendet wird)
  • Installieren und konfigurieren Sie das ClusterControl-Controller-Paket über den Paketmanager
  • ClusterControl-Abhängigkeiten über den Paketmanager installieren
  • Apache und SSL konfigurieren
  • ClusterControl-API-URL und -Token konfigurieren
  • ClusterControl Controller mit minimalen Konfigurationsoptionen konfigurieren
  • Aktiviere den CMON-Dienst beim Booten und starte ihn

Wenn Sie das erwähnte Skript ausführen, erhalten Sie eine Frage zum Senden von Diagnosedaten:

$ sudo ./install-cc

!!

Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported

Minimum system requirements: 2GB+ RAM, 2+ CPU cores

Server Memory: 1024M total, 922M free

MySQL innodb_buffer_pool_size set to 512M

Severalnines would like your help improving our installation process.

Information such as OS, memory and install success helps us improve how we onboard our users.

None of the collected information identifies you personally.

!!

=> Would you like to help us by sending diagnostics data for the installation? (Y/n):

Dann beginnt es mit der Installation der erforderlichen Pakete. Die nächste Frage betrifft den verwendeten Hostnamen:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Wenn die lokale Datenbank installiert ist, sichert das Installationsprogramm sie und erstellt ein Root-Passwort, das Sie eingeben müssen:

=> Starting database. This may take a couple of minutes. Do NOT press any key.

Redirecting to /bin/systemctl start mariadb.service

=> Securing the MySQL Server ...

=> !! In order to complete the installation you need to set a MySQL root password !!

=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

=> Press any key to proceed ...

Und ein CMON-Benutzerkennwort, das von ClusterControl verwendet wird:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

Das ist es. Auf diese Weise haben Sie alles an Ort und Stelle, ohne etwas manuell zu installieren oder zu konfigurieren.

=> ClusterControl installation completed!

Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.

Public/external IP => http://10.10.10.10/clustercontrol

Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Wenn Sie zum ersten Mal auf die Benutzeroberfläche zugreifen, müssen Sie sich für die 30-tägige kostenlose Testphase registrieren.

Nach Ablauf Ihrer 30-tägigen kostenlosen Testversion wird Ihre Installation automatisch in die Community Edition, es sei denn, Sie haben eine kommerzielle Lizenz.

Nutzung der Sicherungsverwaltung

PGHoards-Nutzung

Nachdem dieses Tool installiert wurde, müssen Sie eine JSON-Datei (pghoard.json) mit der PGHoard-Konfiguration erstellen. Dies ist ein Beispiel:

{

"backup_location": "/var/lib/pghoard",

"backup_sites": {

"default": {

"nodes": [

{

"host": "127.0.0.1",

"password": "Password",

"port": 5432,

"user": "pghoard"

}

],

"object_storage": {

"storage_type": "local",

"directory": "./backups"

},

"pg_data_directory": "/var/lib/postgresql/11/main/"

}

}

}

In diesem Beispiel erstellen wir ein Backup und speichern es lokal, aber Sie können auch ein Cloud-Konto konfigurieren und es dort speichern:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Weitere Details zur Konfiguration finden Sie in der Dokumentation.

Lassen Sie nun die Sicherung mit dieser JSON-Datei ausführen:

$ pghoard --short-log --config pghoard.json

INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'

INFO Creating a new basebackup for 'default' because there are currently none

INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057

INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'

INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s

INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -

INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0

INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s

INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s

Im Verzeichnis „backup_location“ (in diesem Fall /var/lib/pghoard) finden Sie eine Datei pghoard_state.json mit dem aktuellen Stand:

$ ls -l /var/lib/pghoard

total 48

drwxr-xr-x 6 root root  4096 May 21 13:13 default

-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json

Und ein Site-Verzeichnis (in diesem Fall „default/“ genannt) mit dem Backup:

$ ls -l /var/lib/pghoard/default/

total 16

drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup

drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming

Sie können die Backup-Liste mit dem folgenden Login-Befehl überprüfen:

$ pghoard_restore list-basebackups --config pghoard.json

Available 'default' basebackups:

Basebackup                                Backup size    Orig size  Start time

----------------------------------------  -----------  -----------  --------------------

default/basebackup/2020-05-21_13-13_0            4 MB        23 MB  2020-05-21T13:13:31Z

ClusterControl-Nutzung

Hierfür gehen wir davon aus, dass Sie Ihren PostgreSQL-Datenbank-Cluster in ClusterControl importiert haben oder ihn mit diesem System bereitgestellt haben.

Wählen Sie in ClusterControl Ihren Cluster aus und gehen Sie zum Abschnitt "Sicherung". Wählen Sie dann "Sicherung erstellen".

Für dieses Beispiel verwenden wir die Option „Sicherung planen“. Beim Planen einer Sicherung müssen Sie zusätzlich zur Auswahl der allgemeinen Optionen wie Methode oder Speicher auch Zeitplan/Häufigkeit angeben.

Sie müssen eine Methode auswählen, nämlich den Server, von dem die Sicherung erstellt wird , und wo Sie es speichern möchten. Sie können Ihr Backup auch in die Cloud (AWS, Google oder Azure) hochladen, indem Sie die entsprechende Schaltfläche aktivieren.

Dann müssen Sie die Verwendung von Komprimierung, Verschlüsselung und Aufbewahrung angeben Ihres Backups. In diesem Schritt können Sie auch die Funktion „Backup überprüfen“ aktivieren, mit der Sie bestätigen können, dass das Backup verwendbar ist, indem Sie es auf einem anderen Knoten wiederherstellen.

Wenn Sie die Option „Backup in die Cloud hochladen“ aktivieren, werden Sie dies tun siehe Abschnitt zum Angeben des Cloud-Anbieters und der Anmeldeinformationen. Wenn Sie Ihr Cloud-Konto nicht mit ClusterControl integriert haben, müssen Sie zu ClusterControl -> Integrationen -> Cloud-Anbieter gehen, um es hinzuzufügen.

Im Sicherungsabschnitt können Sie den Fortschritt der Sicherung sehen und Informationen wie Methode, Größe, Ort und mehr.

ClusterControl-Befehlszeile (s9s)

Für Skripterstellung und Automatisierung von Aufgaben, oder auch wenn Sie einfach die Befehlszeile bevorzugen, hat ClusterControl das s9s-Tool. Es ist ein Befehlszeilentool zum Verwalten Ihres Datenbankclusters. Sehen wir uns ein Beispiel an, wie Sie Backups mit diesem Tool erstellen und auflisten:

$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait

Weitere Beispiele und Informationen finden Sie im Abschnitt ClusterControl CLI-Dokumentation.

Fazit

Als Fazit des Vergleichs dieser genannten Backup-Management-Systeme können wir sagen, dass PGHoard eine kostenlose, aber komplexe Lösung für diese Aufgabe ist. Sie werden einige Zeit brauchen, um zu verstehen, wie es funktioniert und wie man es konfiguriert, da die offizielle Dokumentation dazu etwas dürftig ist. Außerdem sieht es etwas veraltet aus, da die neueste Version vor 1 Jahr veröffentlicht wurde. Darüber hinaus ist ClusterControl ein All-in-One-Managementsystem mit vielen Funktionen, nicht nur Backup-Management, mit einer benutzerfreundlichen und einfach zu bedienenden Benutzeroberfläche. Es gibt Community- (mit begrenzt verfügbaren Funktionen) und kostenpflichtige Versionen mit einer 30-tägigen kostenlosen Testphase. Die Dokumentation ist klar und vollständig, mit Beispielen und detaillierten Informationen.

Wir hoffen, dass dieser Blog Ihnen hilft, die beste Entscheidung zum Schutz Ihrer Daten zu treffen.