pglogical beschrieben.
Weitere Informationen finden Sie unter Informationen zur pglogical Erweiterung und
pglogical Terminologie und grundlegende Komponenten.
Unterstützte Authentifizierungsmethoden
Die beiden wichtigsten Authentifizierungsmethoden
die mit der Erweiterung pglogical verwendet werden, sind die Passwort- und die Trust-Authentifizierungsmethoden.
Die empfohlene Authentifizierungsmethode ist die Trust-Authentifizierungsmethode. Weitere Informationen finden Sie unter Unterstützte Authentifizierungsmethoden.
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:
- Zugriff auf Ihren Nicht-AlloyDB-PostgreSQL-Cluster als
superuser. - Die Erweiterung
pglogicalist in Ihrem Nicht-AlloyDB-PostgreSQL-Cluster installiert. Installationsanleitungen für bestimmte Releases und Distributionen finden Sie unter siehe pglogical. - Ein AlloyDB Omni-Server ist installiert und konfiguriert. Eine Anleitung zum Installieren von AlloyDB Omni finden Sie unter AlloyDB Omni installieren.
- Die IP-Adressen für den Nicht-AlloyDB-PostgreSQL-Cluster und den AlloyDB Omni-Hostserver.
- Ein eingerichtetes und sicheres Netzwerk zwischen dem Nicht-AlloyDB-PostgreSQL-Cluster und dem AlloyDB Omni-Hostserver. Eine TCP-Verbindung über den PostgreSQL-Standardport 5432 ist erforderlich.
Parameter für den Nicht-AlloyDB-Anbieter anpassen
Legen Sie den
wal_levelParameter auflogicalfest und fügen Siepglogicaldemshared_preload_librariesParameter in derpostgresql.confDatei hinzu. Die Erweiterungpglogicalerfordert eine Mindestanzahl von Parameteranpassungen im Cluster des Nicht-AlloyDB-Anbieters.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.confPrüfen Sie, ob die Parameter richtig festgelegt sind:
grep -iE 'wal_level|shared_preload_libraries' postgresql.confStarten 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 Nicht-AlloyDB-Distribution und -Version angepasst werden.
Prüfen Sie die folgenden Parameter:
max_worker_processes: einer pro Anbieterdatenbank und mindestens einer pro Abonnentenknoten. Der Standardwert für diesen Parameter ist mindestens 10.max_replication_slots: einer pro Knoten auf Anbieterknoten.max_wal_senders: einer pro Knoten auf Anbieterknoten.track_commit_timestamp: aufonsetzen, wenn die Konfliktlösung „Letzte oder erste Aktualisierung gewinnt“ erforderlich ist.listen_addresses: muss die AlloyDB Omni-IP-Adresse enthalten oder über einen umfassenden CIDR-Block erwähnt werden.
Optional: Wenn Ihr Nicht-AlloyDB-Anbieter Amazon RDS oder Aurora ist, muss die Erweiterung „pglogical“ aktiviert und die erforderlichen Parameter über Anpassungen der
cluster parameter groupangepasst werden.Legen Sie in einer vorhandenen oder neuen Clusterparametergruppe die folgenden Parameter fest:
rds.logical_replicationauf1max_replication_slotsnach50max_wal_sendersnach50max_worker_processesnach64shared_preload_librariesaufpg_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;
Hostbasierte Authentifizierungsanpassungen am Nicht-AlloyDB Omni-Anbietercluster
Die Erweiterung pglogical stellt lokale TCP-Verbindungen zur Anbieterdatenbank her. Daher müssen Sie die IP-Adresse des Hostservers der Datei DATA_DIR/pg_hba.conf
von AlloyDB Omni hinzufügen. DATA_DIR ist der Dateisystempfad zu Ihrem Datenverzeichnis, z. B. /home/$USER/alloydb-data.
Fügen Sie der Datei
DATA_DIR/pg_hba.confeinen Eintrag für die Trust-Authentifizierung für den lokalen Server hinzu, der für einen neuenpglogical_replicationNutzer spezifisch ist.trustAußerdem müssen sich Abonnentenknoten bei den Anbieterknoten authentifizieren können. Fügen Sie der Datei
DATA_DIR/pg_hba.confentweder die IP-Adresse jedes Abonnentenknotens oder den entsprechenden CIDR-Block IP-Bereich 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.confErsetzen Sie
SERVER_IP_ADDRESSdurch 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.confStarten Sie Ihren Nicht-AlloyDB-Cluster neu, damit die Parameteränderungen wirksam werden.
Parameter für den AlloyDB Omni-Abonnentencluster anpassen
Die Erweiterung pglogical erfordert auch eine Mindestanzahl von Parameteranpassungen im AlloyDB Omni-Abonnentencluster. Sie müssen pglogical
dem shared_preload_libraries Parameter in der DATA_DIR/postgresql.conf
Datei hinzufügen. Wenn eine Datenbank im Cluster als Anbieterdatenbank fungiert, nehmen Sie die für Anbieterdatenbanken erforderlichen Parameteränderungen vor.
Parameter anpassen:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.confPrüfen Sie, 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:
Docker
docker container restart CONTAINER_NAMEErsetzen Sie
CONTAINER_NAMEdurch den Namen, den Sie dem AlloyDB Omni-Container beim Starten zugewiesen haben.Podman
podman container restart CONTAINER_NAMEErsetzen Sie
CONTAINER_NAMEdurch 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: einer pro Anbieterdatenbank und einer pro Abonnentenknoten.track_commit_timestamp: aufonsetzen, wenn die Konfliktlösung „Letzte/erste Aktualisierung gewinnt“ erforderlich ist.
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; "
Hostbasierte Authentifizierungsanpassungen am AlloyDB Omni-Abonnentencluster
Die Erweiterung 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 Trust-Authentifizierung 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 Sie, ob der Eintrag korrekt ist:
tail -2 DATA_DIR/pg_hba.confStarten Sie AlloyDB Omni neu, damit die Authentifizierungsänderung wirksam wird:
docker container restart CONTAINER_NAME
pglogical-Nutzer in Anbieter- und Abonnentenclustern erstellen
Sie müssen sowohl im Anbieter- als auch im Abonnentencluster einen neuen Nutzer erstellen.
pglogical erfordert, dass der Nutzer sowohl die Attribute superuser als auch replication hat.
Erstellen Sie im AlloyDB for PostgreSQL-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 der Nicht-AlloyDB-Anbieterdatenbank hinzufügen
Erforderliche Berechtigungen gewähren.
Sie müssen die Erweiterung
pglogicalin jeder Datenbank installieren und dempglogical-Datenbanknutzer die Berechtigungusagegewähren.Wenn Ihre Datenbank beispielsweise
my_test_dbheiß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. Dernode_nameist beliebig und derdsn-String muss eine gültige TCP-Verbindung zurück zur selben Datenbank sein.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 Nicht-AlloyDB-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);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 auf einmal 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: 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 Replikationssatz
default. Wenn im Schema Tabellen ohne Primärschlüssel oder Replikationsidentität vorhanden sind, können nurINSERT-Anweisungen repliziert werden. Wenn Sie diese Tabellen automatisch über diereplication_set_add_all_tablesFunktion zumdefaultReplikationssatz hinzugefügt haben, müssen Sie sie manuell aus diesem Replikationssatz entfernen und demdefault_insert_onlySatz 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');Optional können Sie den
pglogical_assign_repsetTrigger hinzufügen, wie in derpglogicalQuelle vorgeschlagen, wenn Sie die neu erstellten Tabellen automatisch dem Replikationssatz hinzufügen möchten.
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 oder dem Endpunkt Ihres Nicht-AlloyDB-Servers 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:
Docker
docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sqlPodman
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 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. Fügen Sie das Passwort Ihrem
dsnhinzu, wenn Sie die Passwort-Authentifizierung 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'); "Erstellen Sie 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 ersten 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 in Echtzeit 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 for PostgreSQL und AlloyDB Omni replizieren
- Switchover und Failover mit
pglogical-Replikation