Vorbereitung auf ein Postgres-Upgrade
- Risikobewertung: Eine Liste der Risiken erstellen, die während des Upgrades auftreten können, und sie nach Wichtigkeit sortieren.
- Lösungswege für Risiken suchen: Lösungen in Betracht ziehen, die Risiken vollständig beseitigen oder über die Zeit verteilen können.
- Risikoliste aktualisieren: Die Liste aktualisieren, wenn während des Projekts neue Risiken entdeckt werden.
Zu Monitoring und Metriken
- System-Monitoring: Gründliche Tools einsetzen, um den Zustand der Datenbank und des Systems zu überwachen.
- Wichtige Metriken beobachten: Zentrale Metriken wie Transaction IDs, CPU-Auslastung, wartende Sessions, Query-Latenz und API-Antwortlatenz überwachen.
Postgres-Upgrade-Optionen
In-Place-Upgrade (für ein Zero-Downtime-Upgrade ungeeignet)
- Grenzen des In-Place-Upgrades: Beim Betrieb auf AWS RDS ist ein Neustart der Datenbank erforderlich; je nach Datenmenge kann das Zeit kosten.
Replikationsbasiertes Upgrade
- Wahl eines replikationsbasierten Upgrades: Ermöglicht schrittweise Migrationsphasen, Tests der neuen Datenbank mit echter Workload und realen Daten sowie mehr Kontrolle über das Upgrade.
- Einrichtung von Quell- und Zieldatenbank: Replikations-Slots einrichten,
wal_level auf logical setzen.
Auswahl der Methode zur Tabellenreplikation
Replikation „kleiner“ Tabellen
- Replikation kleiner Tabellen: Kann durch einfaches Hinzufügen und Aktualisieren des Subscriptions-Status repliziert werden.
Große, append-only Tabellen
- Replikation append-only Tabellen: Die Option
copy_data auf false setzen, sodass nur zukünftige Änderungen repliziert werden; ältere Daten anschließend aus einem Backup nachfüllen.
Große Tabellen mit vielen Updates
- Replikation großer Tabellen mit vielen Updates: Tabellengröße reduzieren,
VACUUM ausführen, Tabellenpartitionierung in Betracht ziehen.
Status der Tabellenreplikation prüfen
- Replikationsstatus überwachen: Den Replikationsstatus über die Systemtabelle
pg_subscription_rel prüfen; empfohlen wird, jeweils nur eine Tabelle gleichzeitig zu replizieren.
Replikation stoppen
- So wird die Replikation gestoppt: Bei Bedarf kann die Tabellenreplikation gestoppt und per Subscription-Refresh ein Rollback durchgeführt werden.
Hinweise zur Übertragung von Replikations-Slots
- Problem bei der Übertragung von Replikations-Slots: Das LSN eines Replikations-Slots ist für die jeweilige Primärdatenbank eindeutig und kann daher nicht direkt in die neue Datenbank kopiert werden.
Abschluss der Migration
- Konsistenz der Tabellen prüfen: Sicherstellen, dass die Anzahl der Tabellenzeilen in beiden Datenbanken übereinstimmt; falls nötig, die Datenkonsistenz per Zufallsstichprobe verifizieren.
Änderungen auf Anwendungsebene
- Änderung der Datenbankverbindung: Die Anwendung so umstellen, dass sie sich mit der neuen Datenbank verbindet, und eine Strategie für die Verkehrsumschaltung festlegen.
Zusätzliche Hinweise zu Sequenzen
- Synchronisierung von Sequenzen: Da Sequenzwerte während der Replikation nicht synchronisiert werden, müssen sie manuell gesetzt werden.
Checkliste für die Abschlussprüfung
- Abschlussprüfung: Tabellenkonsistenz, Subscription-Status, Schema-Übereinstimmung, Datenbankgröße, Hinzufügen von Replikaten, Neuaufbau von Indizes, Performance-Tests, Risikobewertung und Übungen in der Staging-Umgebung prüfen.
Finale Umschaltung
- Durchführung der finalen Umschaltung: Die Tabellenreplikation in den Abendstunden durchführen, sie mehrfach in der Staging-Umgebung üben und anschließend die Abschlussprüfung sowie das Umschalten des Flags vornehmen.
Meinung von GN⁺
- Bedeutung: Knock hat den komplexen Prozess eines Zero-Downtime-Upgrades von Postgres 11.9 auf 15.3 erfolgreich durchgeführt. Das setzt einen wichtigen Meilenstein für Datenbankverwaltung und Service-Verfügbarkeit.
- Interessant: Der replikationsbasierte Upgrade-Ansatz ermöglicht Datenbankadministratoren einen reibungslosen Übergang zu einer neuen Datenbank und dürfte in der technischen Community auf großes Interesse stoßen.
- Bemerkenswert: Der Upgrade-Prozess von Knock zeigt anhand eines systematischen Risiko-Managements und strukturierter Problemlösung ein Best-Practice-Beispiel dafür, wie sich komplexe technische Herausforderungen bewältigen lassen.
1 Kommentare
Hacker-News-Kommentare
Es gibt einen besseren Weg, als große Tabellen zu kopieren.
Der hier vorgestellte Ansatz ist interessant und gut dokumentiert, aber der Aussage „Moderne Kunden erwarten 100 % Verfügbarkeit“ wird nicht zugestimmt.
AWS unterstützt inzwischen Blue-Green-Deployments.
Es wurde ein Tool geschrieben, das die meisten Probleme automatisiert.
Bei hava.io läuft gerade eine Migration von AWS RDS PostgreSQL 11.13 auf 15.5.
Es wird infrage gestellt, dass jegliche Downtime für den Knock-Service inakzeptabel sei.
Es überrascht, dass sich Replikation nicht aus einem Backup initialisieren lässt.
Es wird gefragt, ob Interesse an einem All-in-One-Tool besteht, das nur mit Datenbank-Credentials Zero-Downtime-Postgres-Updates durchführt.
Das Thema der Verwendung von Sequenzen ist interessant.
Es wird scherzhaft angemerkt, dass sich Probleme in verteilten Systemen mit einem passenden
sleep(1000)lösen lassen.