pglogical
-Erweiterung, ihre Vorteile und Einschränkungen.
Übersicht
Die pglogical
-Erweiterung ist ein robustes und flexibles Tool für die logische Replikation, das für PostgreSQL entwickelt wurde und auch Hochverfügbarkeit und Notfallwiederherstellung unterstützt.
Bei der herkömmlichen binären Replikation, die auch als physische Replikation bezeichnet wird, werden Änderungen auf Dateisystem- und Blockebene repliziert. Dadurch entsteht ein physischer Spiegel im Zielsystem. Die physische Replikation ist zwar robust und schützt den gesamten Datenbankcluster, sie ist aber nur unidirektional und erfordert Zugriff auf die zugrunde liegenden Datenbankdatendateien und Write-Ahead-Log-Dateien (WAL).
Die Erweiterung pglogical
extrahiert SQL-Änderungen aus einer Anbieterdatenbank, repliziert sie und spielt sie dann in einer oder mehreren Abonnentendatenbanken ab. Diese Replikation wird als logische Replikation bezeichnet.
Mit der pglogical
-Erweiterung können Sie Folgendes tun:
- Daten zwischen mehreren AlloyDB Omni-Datenbanken replizieren.
- Daten zwischen AlloyDB Omni und Google Cloud AlloyDB replizieren.
- Daten zwischen AlloyDB Omni und anderen PostgreSQL-Distributionen replizieren, einschließlich vieler in Cloud-Diensten von Drittanbietern.
Vorteile
Die logische Replikation mit der pglogical
-Erweiterung bietet folgende Vorteile:
Selektive Replikation:Sie können Filter und Regeln festlegen, um zu bestimmen, welche Daten repliziert werden sollen und wohin. Sie können auswählen, welche Tabellen einbezogen werden sollen und wie neue Tabellen behandelt werden sollen, unabhängig davon, ob sie einbezogen werden oder nicht. Sie können auch Spalten- und Zeilenfilter hinzufügen. Optional kann
apply delay
hinzugefügt werden, wenn der Abonnent einen bestimmten Zeitpunkt in der Vergangenheit des Anbieters repräsentieren soll.Bidirektionale und Multi-Primary-Replikation:Alle Mitgliedsdatenbanken sind im Lese-/Schreibmodus geöffnet und können vollständig verwendet werden. Jede Endpunktdatenbank fungiert sowohl als Anbieter als auch als Abonnent, was die Erstellung komplexer Replikationsszenarien und Datenaktualisierungen an verschiedenen Endpunkten ermöglicht.
Unterstützung durch Cloud-Anbieter:Cloud-Anbieter wie Google erkennen den Wert der
pglogical
-Erweiterung und integrieren sie in ihre Cloud-Dienste wie Google Cloud SQL for PostgreSQL und AlloyDB. Andere Cloud-Anbieter bieten diepglogical
-Erweiterung ebenfalls als Option an, was Multi-Cloud- oder Hybrid-Cloud-Konfigurationen ermöglicht.Versionsübergreifende Replikation:Da pglogical die tatsächlichen SQL-Anweisungen repliziert, ist die Replikation zwischen Hauptversionen von PostgreSQL möglich. Insbesondere wenn die Quelldatenbank des Anbieters eine niedrigere Version als die Zieldatenbank des Abonnenten hat, kann die versionsübergreifende Replikation zuverlässig implementiert werden.
Die Erweiterung
pglogical
bietet Unterstützung für viele frühere Versionen von PostgreSQL, z. B. Version 9.4 und höher. Daher ist es eine optimale Wahl für Szenarien, in denen Sie mit Legacy-Systemen arbeiten und Daten in modernere Versionen von PostgreSQL replizieren möchten, z. B. in die Versionen, die in AlloyDB Omni und Google Cloud AlloyDB verwendet werden.
Zusammenfassend lässt sich sagen, dass die pglogical
-Erweiterung eine funktionsreiche Lösung für die logische Replikation bietet, die mit älteren Versionen von PostgreSQL und Cloud-verwalteten Diensten wie Google Cloud SQL for PostgreSQL und AlloyDB kompatibel ist.
Einschränkungen der logischen Replikation
Alle Technologien für die logische Replikation, einschließlich der Technologien, die mit anderen relationalen Datenbankplattformen verwendet werden, haben einige Einschränkungen. Eine falsche Verwaltung kann den Replikationsprozess unterbrechen.
Beachten Sie die folgenden Punkte für eine zuverlässige Implementierung:
- Überlegungen zum Umgang mit datenbankbezogenen und clusterbezogenen Objekten, die außerhalb des Replikationsbereichs liegen. Die
pglogical
-Erweiterung funktioniert auf Datenbankebene und nur für einen bestimmten Satz von Tabellen und Sequenzen. Andere Objekttypen wie Funktionen und Prozeduren müssen mit einer anderen Methode repliziert werden. - Es wird empfohlen, dass alle Replikationstabellen einen Primärschlüssel haben.
Mit der Funktion
REPLICA IDENTITY
der Tabelle können Sie der Erweiterungpglogical
mitteilen, welche Spalten die Zeilen eindeutig identifizieren. Das sollte nach Möglichkeit vermieden werden. Tabellen ohne Primärschlüssel sind statisch und werden nieUPDATED
oderDELETED
. Sie unterstützen nurINSERTS
. Für diese Tabellentypen sind keine Primärschlüssel erforderlich. - Verwaltung von Triggern und Sequenzen in Abonnentendatenbanken. Standardmäßig werden Trigger als
ORIGIN
- oderLOCAL
-Trigger definiert und werden nicht in der Abonnentendatenbank ausgelöst, wenn die Zeilen repliziert werden. Alle Trigger sollten geprüft werden, um sicherzustellen, dass die OptionREPLICA
für jeden Trigger festgelegt ist, damit er nicht auf der Abonnentenseite ausgelöst wird, es sei denn, dies ist erforderlich. - Konflikte manuell oder automatisch mithilfe von
who wins
-Regeln beheben. - Replikation von DDL-Befehlen (Data Definition Language) durch manuelle Implementierung auf allen Endpunkten oder automatische Replikation von DDL in Abonnentendatenbanken mit der entsprechenden
pglogical
-API-Funktion in der Anbieterdatenbank. - Sorgen Sie dafür, dass neu erstellte Tabellen und Sequenzen manuell oder automatisch Replikationssets in primären Datenbanken hinzugefügt werden.
- Sorgen Sie dafür, dass ein robustes, leistungsstarkes, zuverlässiges und sicheres TCP-Netzwerk zwischen allen Endpunkten in der Replikationstopologie vorhanden ist.
Für die pglogical
-Erweiterung gelten die folgenden zusätzlichen Einschränkungen:
- Für
pglogical
Version 2.4.3 sind Superuser-Berechtigungen erforderlich. - Die meisten Tabellen und Sequenzen können repliziert werden, andere Objekttypen jedoch nicht. Die Tabellen
TEMPORARY
undUNLOGGED
werden nicht repliziert.pglogical
- Zum Replizieren von DDL muss die pglogical API-Funktion verwendet werden. Native DDL-Befehle werden nicht repliziert, mit Ausnahme des Befehls
TRUNCATE
. - Wird auf Objektebene pro Tabelle und pro Sequenz ausgeführt und pro Datenbank bereitgestellt. Das bedeutet, dass einige Objekte, einschließlich clusterbezogener Objekte wie
users
undroles
, von der Replikation ausgeschlossen sind und separat verwaltet werden müssen.
Nächste Schritte
- Daten zwischen AlloyDB for PostgreSQL und AlloyDB Omni replizieren
- Daten zwischen AlloyDB Omni und anderen Datenbanken replizieren.