pglogical einrichten. Mit dieser Erweiterung können Sie Datenbankparameter anpassen, einen Replikationsnutzer erstellen, die Replikationsknoten konfigurieren, das Datenbankschema kopieren und das Replikationsabo erstellen.
Eine Übersicht über pglogical in AlloyDB Omni, die
Vorteile und Einschränkungen finden Sie unter
Informationen zur Erweiterung „pglogical“.
Schlüsselkomponenten von pglogical
Die wichtigsten Komponenten der Erweiterung pglogical sind:
- Knoten: Referenz für die Datenbank in einem PostgreSQL-Cluster.
Die Erweiterung
pglogicalwird in einer beliebigen Anzahl von Datenbanken im Cluster installiert und funktioniert mit diesen. Jede Datenbank fungiert als separater „pglogical“-Knoten. Jeder Knoten kann entweder ein Anbieter (auch als Replikationsquelle bezeichnet) oder ein Abonnent (auch als Replikationsziel bezeichnet) oder beides gleichzeitig sein. Pro Datenbank ist nur ein Knoten zulässig. - Replikationssatz: In der Anbieterdatenbank als logische Gruppierung von
zu migrierenden Tabellen und Sequenzen definiert. Außerdem werden die SQL-Anweisungen wie
INSERT, UPDATE, DELETE, TRUNCATEdefiniert, die repliziert werden müssen. Sie können Tabellen mehreren Replikationssätzen zuweisen. Standardmäßig werden drei vorkonfigurierte Replikationssätze wiedefault,default_insert_onlyundddl_sqlbereitgestellt. Sie können beliebig viele zusätzliche Replikationssätze hinzufügen, um Ihre Anforderungen zu erfüllen. - Abo: Enthält Details zu den Änderungen, die aus Anbieter
datenbanken in die Abonnentendatenbank repliziert werden. Das Abo gibt die Anbieterdatenbank über eine Verbindungs-String an und optional, welche Replikationssätze von diesem Anbieter kopiert werden sollen. Außerdem können Sie angeben, ob beim Erstellen des Abos
apply delayverwendet werden soll.
In dieser Bereitstellung ist der AlloyDB for PostgreSQL-Dienst der Anbieter und die lokale AlloyDB Omni-Instanz der Abonnent. Beachten Sie, dass auch die umgekehrte Konfiguration möglich ist.
Unterstützte Authentifizierungsmethoden
Sie müssen die Netzwerk- und Sicherheitsaspekte zwischen den Replikationsknoten berücksichtigen, bevor Sie die Erweiterung pglogical in AlloyDB Omni implementieren.
Die beiden wichtigsten Authentifizierungsmethoden
die mit der Erweiterung pglogical verwendet werden, sind die Passwort- und die Vertrauensauthentifizierung
smethoden.
Die empfohlene Authentifizierungsmethode ist die Vertrauensauthentifizierung, da bei der Passwortauthentifizierung Passwörter im Klartextformat in Datenbanktabellen gespeichert werden, die zu pglogical gehören. Diese Passwörter sind für alle Nutzer mit Datenbankberechtigungen zum Abfragen dieser Tabellen, in nicht binären Sicherungen,
und in den PostgreSQL-Logdateien im Klartext sichtbar.
Wenn Sie die Vertrauensauthentifizierung verwenden, müssen Sie bestimmte Einträge in der hostbasierten Authentifizierungsdatei pg_hba.conf vornehmen, um maximale Sicherheit zu gewährleisten. Sie können den Zugriff einschränken, indem Sie die Zieldatenbanken angeben und nur die Replikationsoption oder bestimmte Datenbanken, den Replikationsnutzer und nur von der spezifischen IP-Adresse des Abonnenten zulassen.
Hinweis
Sie können pglogical als Erweiterung in einer bestimmten Datenbank installieren.
Bevor Sie die Erweiterung pglogical in AlloyDB Omni implementieren, müssen die folgenden Systemanforderungen erfüllt sein:
- Ein AlloyDB for PostgreSQL-Cluster und Lese- und Schreibzugriff auf die primäre Instanz als AlloyDB for PostgreSQL-Administrator. Eine Anleitung zum Bereitstellen eines AlloyDB for PostgreSQL-Clusters finden Sie unter AlloyDB for PostgreSQL-Datenbank erstellen und eine Verbindung herstellen.
- Ein AlloyDB Omni-Server, der installiert und konfiguriert ist. Eine Anleitung zum Installieren von AlloyDB Omni finden Sie unter AlloyDB Omni installieren.
- Die IP-Adressen für die primäre AlloyDB for PostgreSQL-Instanz und den AlloyDB Omni-Hostserver.
- Ein eingerichtetes und sicheres Netzwerk zwischen AlloyDB for PostgreSQL und dem AlloyDB Omni-Hostserver. TCP-Konnektivität am Standard-PostgreSQL-Port 5432 ist erforderlich.
Parameter im AlloyDB for PostgreSQL-Anbieter anpassen
Die Erweiterung pglogical erfordert eine minimale Anzahl von Parameteranpassungen im AlloyDB for PostgreSQL-Anbietercluster. Sie müssen den
wal_level Parameter auf logical setzen und pglogical an den shared_preload_libraries
Parameter in der postgresql.conf Datei anhängen.
cp postgresql.conf postgresql.baksed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.confsed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.confsed -r -i "s|',|'|" postgresql.conf
Im AlloyDB for PostgreSQL-Dienst können Sie Parameter anpassen, indem Sie die entsprechenden Cluster-Flags festlegen.
Sie müssen Parameter für die folgenden AlloyDB for PostgreSQL-Flags anpassen:
alloydb.enable_pglogical = onalloydb.logical_decoding = on
Informationen zum Festlegen von Datenbank-Flags in AlloyDB for PostgreSQL finden Sie unter Datenbank-Flags einer Instanz konfigurieren.
Für die anderen erforderlichen Datenbankparameter des Anbieterknotens müssen Sie die AlloyDB for PostgreSQL-Standardwerte wie folgt festlegen:
max_worker_processes: einer pro Anbieterdatenbank und mindestens einer pro Abonnentenknoten. Standardmäßig ist für diesen Parameter mindestens 10 festgelegt.max_replication_slots: einer pro Knoten auf Anbieterknoten.max_wal_senders: einer pro Knoten auf Anbieterknoten.track_commit_timestamp: aufonsetzen, wenn eine Konfliktlösung erforderlich ist, bei der die letzte oder erste Aktualisierung gewinnt.listen_addresses: muss die AlloyDB Omni-IP-Adresse enthalten oder über einen entsprechenden CIDR-Block erwähnt werden.
Sie können diese Parameter mit einem beliebigen Abfragetool wie psql prüfen.
Parameter im AlloyDB Omni-Abonnentencluster anpassen
Die Erweiterung pglogical erfordert auch eine minimale Anzahl von Parameteranpassungen im AlloyDB Omni-Abonnenten. Sie müssen pglogical
an den shared_preload_libraries Parameter in der DATA_DIR/postgresql.conf
Datei anhängen. Wenn eine Datenbank im Cluster als Anbieterdatenbank fungiert, nehmen Sie die für Anbieterdatenbanken erforderlichen Parameteränderungen vor.
Ersetzen Sie DATA_DIR durch den Dateisystempfad zu Ihrem Datenverzeichnis, z. B. /home/$USER/alloydb-data.
Parameter anpassen:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.confPrüfen, ob der Parameter richtig festgelegt ist:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.confStarten Sie AlloyDB Omni neu, damit die Parameteränderung wirksam wird:
sudo systemctl restart alloydbomni18Legen Sie die AlloyDB Omni-Standardwerte für andere Anbieterdatenbankparameter fest:
max_worker_processes: einer pro Anbieterdatenbank und einer pro Abonnentenknoten.track_commit_timestamp: aufonsetzen, wenn eine Konfliktlösung erforderlich ist, bei der die letzte oder erste Aktualisierung gewinnt.
Prüfen, ob alle Parameterwerte richtig festgelegt sind:
/usr/lib/postgresql/18/bin/psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name;"
Anpassungen der hostbasierten Authentifizierung am AlloyDB Omni-Abonnentencluster
pglogical stellt lokale TCP-Verbindungen zur AlloyDB Omni-Abonnentendatenbank her. Daher müssen Sie die IP-Adresse des Hostservers des Abonnenten zu
der Datei DATA_DIR/pg_hba.conf von AlloyDB Omni hinzufügen.
Fügen Sie der Datei
DATA_DIR/pg_hba.confeinen Eintrag für die Vertrauensauthentifizierung für den lokalen Server hinzu, der für einen neuenpglogical_replicationNutzer spezifisch ist:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.confPrüfen, ob der Eintrag korrekt ist:
tail -2 DATA_DIR/pg_hba.confStarten Sie AlloyDB Omni neu, damit die Authentifizierungsänderung wirksam wird:
sudo systemctl restart alloydbomni18
pglogical-Nutzer in Bereitsteller- und Abonnentenclustern erstellen
Sie müssen sowohl im Anbieter- als auch im Abonnentencluster einen neuen Nutzer erstellen.
pglogical erfordert, dass der Nutzer sowohl die Berechtigungen superuser als auch replication hat.
Erstellen Sie im AlloyDB for PostgreSQL-Anbietercluster den Nutzer und gewähren Sie die Rolle
alloydbsuperuser:CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; GRANT alloydbsuperuser TO pglogical_replication;Erstellen Sie im AlloyDB Omni-Abonnentencluster den Nutzer und gewähren Sie die Attribute
replicationundsuperuser:CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
pglogical und Knoten zur AlloyDB for PostgreSQL-Anbieterdatenbank hinzufügen
Erforderliche Berechtigungen gewähren.
Sie müssen die Erweiterung
pglogicalin jeder Datenbank installieren und dem „pglogical“-Datenbanknutzer die Berechtigungusagegewähren. In AlloyDB for PostgreSQL müssen Sie Berechtigungen für daspglogical-Schema gewähren.Wenn Ihre Datenbank beispielsweise
my_test_dbheißt, führen Sie den folgenden Befehl für die AlloyDB for PostgreSQL-Anbieterdatenbank aus:\c my_test_db; CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication; -- For AlloyDB for PostgreSQL you also need to manually grant privileges: GRANT ALL PRIVILEGES ON ALL tables IN SCHEMA pglogical TO pglogical_replication;Erstellen Sie einen
pglogical-Knoten für die Anbieterdatenbanken. Dernode_nameist beliebig und derdsn-String muss eine gültige TCP-Verbindung zurück zur selben Datenbank sein. Für AlloyDB for PostgreSQL ist der Hostteil desdsndie IP-Adresse, die für die primäre Instanz angegeben wurde.Für AlloyDB for PostgreSQL ist die Vertrauensauthentifizierung nicht zulässig und das Passwortargument muss im
dsnenthalten sein. Parameter.Führen Sie für die Datenbank
my_test_dbbeispielsweise den folgenden Befehl aus:SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
Tabelle erstellen und dem Standardreplikationssatz hinzufügen
Erstellen Sie eine Tabelle und fügen Sie sie dem Standardreplikationssatz in der AlloyDB for PostgreSQL-Anbieterdatenbank hinzu.
Erstellen Sie in der Anbieterdatenbank eine Testtabelle mit dem Namen
test_table_1:CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);Gewähren Sie
SELECTfür die einzelnen Tabellen oder führen Sie den BefehlGRANT SELECT ON ALL TABLESaus. Für alle Tabellen, die Teil eines Replikationssatzes sein sollen, muss dem Replikationsnutzerpglogical_replicationdie Berechtigung zum Abfragen gewährt werden.GRANT SELECT ON ALL TABLES IN SCHEMA public TO pglogical_replication;Fügen Sie die Testtabelle manuell dem Standardreplikationssatz hinzu. Sie können entweder benutzerdefinierte „pglogical“-Replikationssätze erstellen oder die Standardreplikationssätze verwenden. Beim Erstellen der Erweiterung wurden mehrere Standardreplikationssätze wie
default,default_insert_only, undddl_sqlerstellt. Sie können Tabellen und Sequenzen einzeln oder alle gleichzeitig für ein bestimmtes Schema zu den Replikationssätzen hinzufügen.-- Add the specified table to the default replication set: SELECT pglogical.replication_set_add_table(set_name := 'default', relation := 'test_table_1', synchronize_data := TRUE); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table;Optional: Alle Tabellen in einem bestimmten Schema wie
publichinzufügen:-- Add all "public" schema tables to the default replication set: SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table; -- Add all "public" schema sequences to the default replication: SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']); -- Check which sequences have been added to all replication sets: SELECT * FROM pglogical.replication_set_seq;Entfernen Sie die Tabelle aus dem Replikationssatz
default. Wenn es im Schema Tabellen ohne Primärschlüssel gibt, können Sie entweder die Replikation nur für INSERT-Vorgänge einrichten oder die Spalten festlegen, die die Zeile eindeutig identifizieren. Verwenden Sie dazu das FeatureREPLICA IDENTITYmit dem BefehlALTER TABLE. Wenn Sie diese Tabellen mit der Funktionreplication_set_add_all_tablesautomatisch dem Replikationssatzdefaulthinzugefügt haben, müssen Sie sie manuell aus diesem Replikationssatz entfernen und dem Satzdefault_insert_onlyhinzufügen.-- Remove the table from the **default** replication set: SELECT pglogical.replication_set_remove_table(set_name := 'default', relation := 'test_table_2');-- Manually add to the **default_insert_only** replication set: SELECT pglogical.replication_set_add_table(set_name := 'default_insert_only', relation := 'test_table_2');Optional können Sie den Trigger
pglogical_assign_repsethinzufügen, wenn Sie die neu erstellten Tabellen automatisch dem Replikationssatz hinzufügen möchten. Eine Anleitung dazu finden Sie in derpglogicalQuelle.
Datenbank in den AlloyDB Omni-Abonnentencluster kopieren
Erstellen Sie mit dem Dienstprogramm
pg_dumpeine Sicherung der Quelldatenbank, die nur das Schema enthält.Führen Sie den Befehl
pg_dumpvon Ihrem AlloyDB Omni-Abonnentenserver mit der IP-Adresse der primären AlloyDB for PostgreSQL-Instanz aus.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sqlImportieren Sie die Sicherung in die Abonnentendatenbank auf dem AlloyDB Omni-Abonnentenserver:
sudo -u postgres psql -h localhost -U postgres < my_test_db.schema-only.sql
Ignorieren Sie Fehler wie alloydbsuperuser not existing. Diese Rolle ist spezifisch für AlloyDB for PostgreSQL.
Dadurch werden die Datenbank und das Schema ohne Zeilendaten erstellt. Zeilendaten werden von der Erweiterung pglogical repliziert. Kopieren oder erstellen Sie alle anderen erforderlichen Nutzer oder Rollen manuell.
Knoten und Abo in der AlloyDB Omni-Abonnentendatenbank erstellen
Erstellen Sie einen Knoten in der AlloyDB Omni-Abonnentendatenbank:
sudo -u postgres psql -h localhost -U postgres -d my_test_db -c " SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication');"Erstellen Sie ein Abo in der Abonnentendatenbank, das auf die primäre Instanz der AlloyDB for PostgreSQL-Anbieterdatenbank verweist.
/usr/lib/postgresql/18/bin/psql -h localhost -U postgres -d my_test_db -c " SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');"Je nach Tabellengröße und zu replizierenden Daten kann die Replikationszeit zwischen Sekunden und Minuten variieren. Danach sollten die ursprünglichen Daten vom Anbieter zum Abonnenten repliziert worden sein:
/usr/lib/postgresql/18/bin/psql -h localhost -U postgres -d my_test_db -c " SELECT * FROM test_table_1 ORDER BY 1;"Zusätzliche Zeilen, die der Anbieterdatenbank hinzugefügt werden, werden ebenfalls innerhalb von Sekunden repliziert.
Weitere Überlegungen zur Bereitstellung von pglogical
Die Erweiterung pglogical bietet viele erweiterte Funktionen, die in diesem Dokument nicht behandelt werden.
Viele dieser Funktionen sind für Ihre Implementierung relevant. Sie können die folgenden erweiterten Funktionen in Betracht ziehen:
- Konfliktlösung
- Multimaster- und bidirektionale Replikation
- Einbeziehung von Sequenzen
- Switchover- und Failover-Verfahren
Nächste Schritte
- Daten zwischen AlloyDB Omni und anderen Datenbanken replizieren
- Switchover und Failover mit
pglogical-Replikation