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

Automatisiertes Testen des Upgrade-Prozesses für PostgreSQL

Das Testen ist eine zeitraubende Aufgabe, aber es ist ein Muss vor jedem Upgrade-Prozess für jede Technologie. Je nach Art des Upgrades kann es schwieriger oder einfacher sein, aber es ist immer notwendig, wenn Sie sicherstellen möchten, dass Ihre Daten sicher sind. Je nach Geschäft und Ausfalltoleranz gibt es unterschiedliche Ansätze für ein Upgrade. Beispielsweise könnte der Prozess Ihre Anwendung in einer separaten Umgebung mit der neuen Version testen, sodass Sie dafür einen neuen Cluster erstellen müssen. Eine weitere Option besteht darin, Ihre aktuelle Produktionsumgebung zu klonen und zu aktualisieren, was nützlich sein könnte, da Sie den gesamten Upgrade-Prozess emulieren und zukünftige Überraschungen vermeiden können.

Wenn Sie diesen gesamten Testprozess manuell durchführen, besteht eine große Wahrscheinlichkeit menschlicher Fehler und der Prozess wird langsam sein, was sich auf das Recovery Time Objective (RTO) auswirken könnte. In diesem Blog werden wir sehen, wie Sie Tests für das Upgrade Ihrer PostgreSQL-Datenbanken mit ClusterControl automatisieren.

Art der Datenbank-Upgrades

Es gibt zwei Arten von Upgrades:Minor Upgrades und Major Upgrades.

Kleinere Upgrades

Dies ist das gebräuchlichste und sicherste Upgrade, und in den meisten Fällen wird dies an Ort und Stelle durchgeführt. Da nichts 100 % sicher ist, müssen Sie immer über Backups und Standby-Knoten verfügen. Falls beim Upgrade etwas schief geht, können Sie einen Standby-Knoten in der vorherigen Version heraufstufen und Ihre Systeme können weiterhin ohne Unterbrechung arbeiten.

Sie können diese Art von Upgrade mit ClusterControl durchführen. Gehen Sie dazu zu ClusterControl -> Select your PostgreSQL Cluster -> Manage -> Upgrades.

Auf jedem ausgewählten Knoten wird das Upgrade-Verfahren:

  • Stoppknoten

  • Upgrade-Knoten

  • Startknoten

Der Master-Knoten in einer PostgreSQL-Topologie wird nicht aktualisiert. Um den Master zu aktualisieren, muss zuerst ein anderer Knoten zum neuen Master befördert werden.

Große Upgrades

Für größere Upgrades wird das In-Place-Upgrade nicht empfohlen, da das Risiko, dass etwas schief geht, für eine Produktionsumgebung zu hoch ist. Stattdessen gibt es verschiedene Ansätze für Upgrades.

Sie können Ihren aktuellen Datenbank-Cluster klonen, ihn aktualisieren und Ihre Anwendung dort testen, und wenn Sie fertig sind, wenn alles geklappt hat, können Sie ihn neu erstellen, um den Vorgang zu wiederholen und das eigentliche Upgrade durchzuführen , oder Sie können auch einen neuen Cluster in der neuen Version erstellen, Ihre Anwendung testen und den Datenverkehr wechseln, wenn er bereit ist, und es gibt mehr Optionen ... Die Verwendung von Load Balancern ist hier nützlich, um die Hochverfügbarkeit zu verbessern. Der beste Ansatz hängt von der Ausfalltoleranz und dem Recovery Time Objective (RTO) ab.

Sie können größere Upgrades nicht direkt mit ClusterControl durchführen, da Sie, wie bereits erwähnt, zuerst alles testen müssen, um sicherzustellen, dass das Upgrade sicher ist, aber Sie können verschiedene ClusterControl-Funktionen verwenden, um dies vorzunehmen diese Aufgabe leichter. Sehen wir uns also einige dieser Funktionen an.

Bereitstellen einer Testumgebung

Dazu müssen Sie nicht alles von Grund auf neu erstellen. Stattdessen können Sie ClusterControl verwenden, um dies manuell oder automatisiert zu tun.

Sicherung auf eigenständigem Host wiederherstellen

Wählen Sie im Bereich Sicherung eine Sicherung aus und Sie sehen die Option „Auf eigenständigem Host wiederherstellen und überprüfen“, um eine Sicherung in einem separaten Knoten wiederherzustellen.

Hier können Sie angeben, ob ClusterControl die Software im neuen installieren soll Node und deaktivieren Sie die Firewall oder AppArmor/SELinux (je nach Betriebssystem). Dazu benötigen Sie einen dedizierten Host (oder VM), der nicht Teil des Clusters ist.

Sie können den Knoten am Laufen halten oder ClusterControl kann die Datenbank herunterfahren Dienst bis zum nächsten Wiederherstellungsjob. Wenn es fertig ist, sehen Sie das wiederhergestellte/verifizierte Backup in der Backup-Liste mit einem Häkchen markiert.

Wenn Sie diese Aufgabe nicht manuell ausführen möchten, können Sie einen Zeitplan erstellen diesen Vorgang mithilfe der Sicherungsfunktion überprüfen, um diesen Auftrag regelmäßig in einem Sicherungsauftrag zu wiederholen. Wir werden im nächsten Abschnitt sehen, wie das geht.

Automatische ClusterControl-Backup-Verifizierung

Um diese Aufgabe zu automatisieren, gehen Sie zu ClusterControl -> Select your PostgreSQL Cluster -> Backup -> Create Backup und wählen Sie die Option Scheduled Backup. Die Funktion zum automatischen Überprüfen der Sicherung ist nur für geplante Sicherungen verfügbar.

Vergewissern Sie sich im zweiten Schritt, dass Sie die Option Sicherung überprüfen aktiviert haben, und vervollständigen Sie die erforderlichen Informationen.

Wenn der Job abgeschlossen ist, sehen Sie das Verifizierungssymbol im ClusterControl Backup-Bereich, derselbe, den Sie haben werden, wenn Sie die Überprüfung auf manuelle Weise durchführen, mit dem Unterschied, dass Sie sich nicht um die Wiederherstellungsaufgabe kümmern müssen. ClusterControl stellt das Backup jedes Mal automatisch wieder her und Sie können Ihre Anwendung mit den neuesten Daten testen.

Cluster aus Backup erstellen

Eine andere Möglichkeit, eine Testumgebung zu erstellen, besteht darin, einen neuen Cluster aus einer Sicherung Ihres primären Clusters zu erstellen. Gehen Sie dazu zu ClusterControl -> Select your PostgreSQL cluster -> Backup. Wählen Sie dort die wiederherzustellende Sicherung aus der Liste aus und wählen Sie Wiederherstellen -> Cluster aus Sicherung erstellen.

Diese Option erstellt einen neuen PostgreSQL-Cluster aus der ausgewählten Sicherung.

Sie müssen die Betriebssystem- und Datenbankanmeldeinformationen sowie die Informationen zum Bereitstellen hinzufügen neue Cluster. Wenn dieser Job abgeschlossen ist, sehen Sie den neuen Cluster in der ClusterControl-Benutzeroberfläche.

Cluster-zu-Cluster-Replikation

Seit ClusterControl 1.7.4 gibt es eine Funktion namens Cluster-zu-Cluster-Replikation. Es ermöglicht Ihnen, eine Replikation zwischen zwei autonomen Clustern laufen zu lassen.

Cluster-zu-Cluster-Replikation erstellen

Gehen Sie zu ClusterControl -> Wählen Sie Ihren PostgreSQL-Cluster -> Cluster-Aktionen -> Slave-Cluster erstellen.

Der Slave-Cluster wird durch Streaming von Daten aus dem aktuellen primären Cluster erstellt.

Sie müssen SSH-Anmeldeinformationen und -Port angeben, einen Namen für Ihren Slave-Cluster, und wenn Sie möchten, dass ClusterControl die entsprechende Software und Konfigurationen für Sie installiert.

Nachdem Sie die SSH-Zugangsdaten eingerichtet haben, müssen Sie die Datenbankversion definieren, datadir, Port und Admin-Anmeldeinformationen. Da die Streaming-Replikation verwendet wird, stellen Sie sicher, dass Sie dieselbe Datenbankversion verwenden und dass die Anmeldeinformationen dieselben sein müssen, die vom primären Cluster verwendet werden.

In diesem Schritt müssen Sie den Server zum neuen Slave-Cluster hinzufügen . Für diese Aufgabe können Sie sowohl die IP-Adresse als auch den Hostnamen des Datenbankknotens eingeben.

Sie können den Auftragsstatus im Aktivitätsmonitor von ClusterControl überwachen. Sobald die Aufgabe abgeschlossen ist, können Sie den Cluster auf dem Hauptbildschirm von ClusterControl sehen.

Automatische Wiederherstellung und Failover

Wenn die automatische Wiederherstellungsfunktion aktiviert ist, stuft ClusterControl im Fehlerfall den fortschrittlichsten Standby-Knoten zum primären Knoten ein und benachrichtigt Sie über das Problem. Außerdem wird ein Failover für die restlichen Standby-Knoten durchgeführt, um vom neuen primären Server zu replizieren.

Wenn es Load Balancer in der Topologie gibt, wird ClusterControl sie neu konfigurieren, um die Topologieänderungen anzuwenden.

Sie können ein Failover bei Bedarf auch manuell ausführen. Gehen Sie zu ClusterControl -> Wählen Sie Ihren PostgreSQL-Cluster aus -> Nodes -> Wählen Sie den zu befördernden Node aus -> Node Actions -> Promote Slave.

Auf diese Weise können Sie, wenn während des Upgrades etwas schief geht, ClusterControl verwenden, um es so schnell wie möglich zu beheben.

Automatisierung von Dingen mit der ClusterControl-CLI

ClusterControl CLI, auch als s9s bekannt, ist ein in ClusterControl Version 1.4.1 eingeführtes Befehlszeilentool zur Interaktion, Steuerung und Verwaltung von Datenbank-Clustern mithilfe des ClusterControl-Systems. Die ClusterControl-CLI öffnet eine Tür für die Cluster-Automatisierung, wo Sie sie einfach in vorhandene Bereitstellungsautomatisierungstools wie Ansible, Puppet, Chef usw. integrieren können. Sehen wir uns nun einige Beispiele für dieses Tool an.

Upgrade

$ s9s cluster --cluster-id=9 \
--check-pkg-upgrades \
--log
$ s9s cluster --cluster-id=9 \
--available-upgrades \
--nodes=10.10.10.122 \
--log \
--print-json
$ s9s cluster --cluster-id=9 \
--upgrade-cluster \
--nodes=10.10.10.122 \
--log

Sicherungen überprüfen

$ s9s backup --verify \
--backup-id=2 \
--test-server=10.10.10.124 \
--cluster-id=9 \
--log

Cluster-zu-Cluster-Replikation

$ s9s cluster --create \
--cluster-name=PostgreSQL-c2c \
--cluster-type=postgresql \
--provider-version=13 \
--nodes=10.10.10.125 \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--db-admin=admin \
--db-admin-passwd=********* \
--vendor=postgres \
--remote-cluster-id=9 \
--log

Slave-Knoten befördern

$ s9s cluster --promote-slave \
--cluster-id=9 \
--nodes='10.10.10.122' \
--log

Fazit

Upgrades sind notwendige, aber zeitraubende Aufgaben, da Sie Ihre Anwendung testen müssen, um Probleme während des Prozesses zu vermeiden. Die Bereitstellung einer Testumgebung jedes Mal, wenn Sie diese aktualisieren und auf dem neuesten Stand halten müssen, ohne ein Automatisierungstool, könnte schwierig sein.

Mit ClusterControl können Sie kleinere Upgrades über die ClusterControl-Benutzeroberfläche oder -CLI durchführen oder sogar die Testumgebung bereitstellen, um die Upgrade-Aufgabe einfacher und sicherer zu machen. Sie können es auch in verschiedene Automatisierungstools wie Ansible, Puppet und mehr integrieren.