Auf dieser Seite finden Sie eine Anleitung zum Replizieren von Daten zwischen AlloyDB Omni und anderen Datenbanken mithilfe der Erweiterung pglogical
.
Weitere Informationen finden Sie unter pglogical
-Erweiterung und pglogical
-Terminologie und grundlegende Komponenten.
Unterstützte Authentifizierungsmethoden
Die beiden wichtigsten Authentifizierungsmethoden, die mit der pglogical
-Erweiterung verwendet werden, sind die Passwort- und die Vertrauensauthentifizierung.
Die empfohlene Authentifizierungsmethode ist die Vertrauensauthentifizierung. Weitere Informationen finden Sie unter Unterstützte Authentifizierungsmethoden.
Hinweise
Sie können pglogical
als Erweiterung in einer bestimmten Datenbank installieren.
Bevor Sie die pglogical
-Erweiterung in AlloyDB Omni implementieren, müssen die folgenden Systemanforderungen erfüllt sein:
- Zugriff auf Ihren nicht AlloyDB-PostgreSQL-Cluster als
superuser
- Die
pglogical
-Erweiterung ist in Ihrem nicht AlloyDB-PostgreSQL-Cluster installiert. Eine Veröffentlichungs- und distributionsspezifische Installationsanleitung finden Sie in pglogical. - Ein installierter und konfigurierter AlloyDB Omni-Server Eine Anleitung zum Installieren von AlloyDB Omni finden Sie unter AlloyDB Omni installieren.
- Die IP-Adressen sowohl für den nicht AlloyDB-PostgreSQL-Cluster als auch für den AlloyDB Omni-Hostserver.
- Ein eingerichtetes und gesichertes Netzwerk zwischen dem PostgreSQL-Cluster, der nicht zu AlloyDB gehört, und dem AlloyDB Omni-Hostserver. Eine TCP-Verbindung zum PostgreSQL-Standardport 5432 ist erforderlich.
Parameter für den nicht AlloyDB-Anbieter anpassen
Legen Sie den Parameter
wal_level
auflogical
fest und hängen Sie in der Dateipostgresql.conf
dem Parametershared_preload_libraries
den Wertpglogical
an. Für diepglogical
-Erweiterung sind nur wenige Parameteranpassungen am Cluster des Drittanbieters erforderlich, der kein AlloyDB-Anbieter ist.cp postgresql.conf postgresql.bak
sed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.conf
sed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.conf
sed -r -i "s|',|'|" postgresql.conf
Prüfen Sie, ob die Parameter richtig festgelegt sind:
grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
Starten Sie Ihren Nicht-AlloyDB-Cluster neu, damit die Parameteränderungen wirksam werden.
Andere Parameter sind möglicherweise bereits auf ausreichende Werte festgelegt oder müssen je nach AlloyDB-Distribution und -Version angepasst werden.
Prüfen Sie die folgenden Parameter:
max_worker_processes
: eine pro Anbieterdatenbank und mindestens eine pro Abonnentenknoten. Der Standardwert für diesen Parameter ist mindestens 10.max_replication_slots
: eins pro Knoten auf Anbieterknoten.max_wal_senders
: eins pro Knoten auf Anbieterknoten.track_commit_timestamp
: Setzen Sie diese Option aufon
, wenn die letzte oder erste Aktualisierung bei der Konfliktlösung berücksichtigt werden soll.listen_addresses
: muss die AlloyDB Omni-IP-Adresse enthalten oder über einen abdeckenden CIDR-Block erwähnt werden.
Optional: Wenn Ihr nicht AlloyDB-Anbieter Amazon RDS oder Aurora ist, muss die pglogical-Erweiterung aktiviert und die erforderlichen Parameter über
cluster parameter group
-Anpassungen angepasst werden.Legen Sie in einer vorhandenen oder neuen Clusterparametergruppe die folgenden Parameter fest:
rds.logical_replication
bis1
max_replication_slots
nach50
max_wal_senders
nach50
max_worker_processes
nach64
shared_preload_libraries
bispg_stat_statements, pglogical
Starten Sie Ihren Amazon RDS- oder Aurora-Cluster neu, damit die Anpassungen der Clusterparametergruppe wirksam werden.
Prüfen Sie, ob alle Parameterwerte relevant sind:
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 Cluster eines anderen Anbieters als AlloyDB Omni
Der pglogical
stellt lokale TCP-Verbindungen zur Anbieterdatenbank her. Daher müssen Sie der AlloyDB Omni-Datei DATA_DIR/pg_hba.conf
die IP-Adresse des Hostservers hinzufügen. Dabei ist DATA_DIR
der Dateisystempfad zu Ihrem Datenverzeichnis, z. B. /home/$USER/alloydb-data
.
Fügen Sie der Datei
DATA_DIR/pg_hba.conf
einen Eintrag für die Vertrauensauthentifizierung für den lokalen Server hinzu, der für einen neuenpglogical_replication
-Nutzer spezifisch ist.Außerdem müssen sich Abonnentenknoten bei den Anbieterknoten authentifizieren können. Fügen Sie der Datei
DATA_DIR/pg_hba.conf
entweder die IP-Adresse jedes Teilnehmerknotens oder den entsprechenden CIDR-Block hinzu:echo -e "# pglogical entries: host all pglogical_replication samehost trust host all pglogical_replication SERVER_IP_ADDRESS/32 trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Ersetzen Sie
SERVER_IP_ADDRESS
durch die IP-Adresse der primären AlloyDB Omni-Instanz, von der repliziert werden soll.Prüfen Sie, ob die Einträge korrekt sind:
tail -3 DATA_DIR/pg_hba.conf
Starten Sie Ihren Nicht-AlloyDB-Cluster neu, damit die Parameteränderungen wirksam werden.
Parameter für den AlloyDB Omni-Abonnentencluster anpassen
Für die pglogical
sind auch einige Parameteranpassungen am AlloyDB Omni-Abonnentencluster erforderlich. Hängen Sie in der Datei DATA_DIR/postgresql.conf
pglogical
an den Parameter shared_preload_libraries
an. Wenn eine Datenbank im Cluster als Anbieterdatenbank dient, nehmen Sie die für Anbieterdatenbanken erforderlichen Parameteränderungen vor.
Passen Sie die Parameter an:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
Prüfen Sie, ob der Parameter richtig festgelegt ist:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
Starten Sie AlloyDB Omni neu, damit die Parameteränderung wirksam wird:
Docker
docker container restart CONTAINER_NAME
Ersetzen Sie
CONTAINER_NAME
durch den Namen, den Sie dem AlloyDB Omni-Container beim Starten zugewiesen haben.Podman
podman container restart CONTAINER_NAME
Ersetzen Sie
CONTAINER_NAME
durch den Namen, den Sie dem AlloyDB Omni-Container beim Starten zugewiesen haben.Legen Sie die AlloyDB Omni-Standardwerte für andere Anbieterdatenbankparameter fest:
max_worker_processes
: Eine pro Anbieterdatenbank und eine pro Abonnentenknoten.track_commit_timestamp
: Setzen Sie diese Option aufon
, wenn das letzte/erste Update bei Konflikten verwendet werden soll.
Prüfen Sie, ob alle Parameterwerte relevant sind:
Docker
docker exec CONTAINER_NAME 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; "
Podman
podman exec CONTAINER_NAME 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
Der pglogical
stellt lokale TCP-Verbindungen zur AlloyDB Omni-Abonnentendatenbank her. Daher musst du der AlloyDB Omni-DATA_DIR/pg_hba.conf
-Datei die IP-Adresse des Hostservers des Abonnenten hinzufügen.
Fügen Sie der Datei
DATA_DIR/pg_hba.conf
einen Eintrag für die Vertrauensauthentifizierung für den lokalen Server hinzu, der für einen neuenpglogical_replication
-Nutzer spezifisch ist:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Prüfen Sie, ob der Eintrag korrekt ist:
tail -2 DATA_DIR/pg_hba.conf
Starten Sie AlloyDB Omni neu, damit die Authentifizierungsänderung wirksam wird:
docker container restart CONTAINER_NAME
pglogical
-Nutzer sowohl in Anbieter- als auch in Abonnentenclustern erstellen
Sie müssen sowohl im Anbieter- als auch im Abonnentencluster einen neuen Nutzer erstellen.
Für pglogical
muss der Nutzer sowohl das superuser
- als auch das replication
-Attribut haben.
Erstellen Sie im Google Cloud AlloyDB-Anbietercluster die Nutzerrolle:
CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
Optional: Wenn Ihr nicht AlloyDB-Anbieter Amazon RDS oder Aurora ist, müssen Sie die folgende Rolle gewähren:
GRANT rds_superuser TO replication_user;
pglogical
und Knoten zur Datenbank des Drittanbieters hinzufügen, der nicht AlloyDB verwendet
Erforderliche Berechtigungen erteilen
Sie müssen die
pglogical
-Erweiterung in jeder Datenbank installieren und dem pglogical-Datenbanknutzer die Berechtigungusage
gewähren.Wenn Ihre Datenbank beispielsweise
my_test_db
heißt, führen Sie den folgenden Befehl aus:CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication;
Erstellen Sie einen
pglogical
-Knoten für die Anbieterdatenbanken.node_name
ist beliebig und der Stringdsn
muss eine gültige TCP-Verbindung zurück zur selben Datenbank sein.Führen Sie beispielsweise für die Datenbank
my_test_db
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 Standard-Replikations-Dataset hinzufügen
Erstellen Sie eine Tabelle und fügen Sie sie dem Standard-Replikations-Dataset in der Datenbank des nicht AlloyDB-Anbieters 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);
Fügen Sie die Testtabelle manuell dem Standard-Replikations-Dataset hinzu. Sie können entweder benutzerdefinierte pglogical-Replikationssätze erstellen oder die Standardreplizierungssätze verwenden. Beim Erstellen der Erweiterung wurden mehrere Standardreplizierungssätze wie
default
,default_insert_only
undddl_sql
erstellt. Sie können den Replikationssätzen Tabellen und Sequenzen einzeln oder für ein bestimmtes Schema alle auf einmal 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: Fügen Sie alle Tabellen in einem bestimmten Schema hinzu, z. B.
public
:-- 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
default
-Replikationssatz. Wenn es im Schema Tabellen gibt, die keinen Primärschlüssel oder keine Replikationsidentität haben, können nurINSERT
-Anweisungen repliziert werden. Wenn Sie diese Tabellen demdefault
-Replikationssatz automatisch über die Funktionreplication_set_add_all_tables
hinzugefügt haben, müssen Sie sie manuell aus diesem Replikationssatz entfernen und demdefault_insert_only
-Set hinzufü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');
Wenn Sie die neu erstellten Tabellen dem Replikationssatz automatisch hinzufügen möchten, fügen Sie den
pglogical_assign_repset
-Trigger wie in derpglogical
-Quelle vorgeschlagen hinzu.
Datenbank in den AlloyDB Omni-Abonnentencluster kopieren
Erstellen Sie mit dem Dienstprogramm
pg_dump
eine Sicherung nur des Schemas der Quelldatenbank.Führen Sie den Befehl
pg_dump
von Ihrem AlloyDB Omni-Abonnentenserver aus und verwenden Sie dabei die IP-Adresse oder den Endpunkt Ihres Nicht-AlloyDB-Servers.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
Importiere die Sicherung in die Abonnentendatenbank auf dem AlloyDB Omni-Server des Abonnenten:
Docker
docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Podman
podman exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Dadurch werden die Datenbank und das Schema ohne Zeilendaten erstellt. Zeilendaten werden von der pglogical
-Erweiterung repliziert. Kopieren oder erstellen Sie alle anderen erforderlichen Nutzer oder Rollen manuell.
Knoten und Abo in der AlloyDB Omni-Abonnentendatenbank erstellen
Erstelle einen Knoten in der AlloyDB Omni-Abonnentendatenbank. Fügen Sie das Passwort zu
dsn
hinzu, wenn Sie die Passwortauthentifizierung verwenden möchten.Docker
docker exec CONTAINER_NAME 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'); "
Podman
podman exec CONTAINER_NAME 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'); "
Erstelle ein Abo in der Abonnentendatenbank, das auf die Anbieterdatenbank auf dem AlloyDB Omni-Anbieterserver verweist.
Docker
docker exec CONTAINER_NAME 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'); "
Podman
podman exec CONTAINER_NAME 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'); "
Innerhalb weniger Sekunden oder Minuten sollten die ursprünglichen Daten vom Anbieter zum Abonnenten repliziert worden sein:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT * FROM test_table_1 ORDER BY 1; "
Podman
podman exec CONTAINER_NAME 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 in Echtzeit repliziert.
Weitere Hinweise zur Bereitstellung von pglogical
Die pglogical
-Erweiterung bietet viele erweiterte Funktionen, die in diesem Dokument nicht behandelt werden. Viele dieser Funktionen sind auf Ihre Implementierung anwendbar. Sie können die folgenden erweiterten Funktionen in Betracht ziehen:
- Konfliktlösung
- Multimaster- und bidirektionale Replikation
- Einschluss von Sequenzen
- Switchover- und Failover-Verfahren
Nächste Schritte
- Daten zwischen Google Cloud AlloyDB und AlloyDB Omni replizieren
- Switchover und Failover mit
pglogical
-Replikation