Questa pagina illustra i passaggi per replicare i dati tra AlloyDB Omni e altri database utilizzando l'estensione pglogical
.
Per ulteriori informazioni, vedi Informazioni sull'estensione pglogical
e Terminologia e componenti fondamentali di pglogical
.
Metodi di autenticazione supportati
I due principali metodi di autenticazione
utilizzati con l'estensione pglogical
sono i metodi di autenticazione con password e attendibilità.
Il metodo di autenticazione consigliato è il metodo di autenticazione attendibile. Per maggiori informazioni, consulta Metodi di autenticazione supportati.
Prima di iniziare
Puoi installare pglogical
come estensione all'interno di un determinato database.
Prima di implementare l'estensione pglogical
in AlloyDB Omni, assicurati di soddisfare i seguenti requisiti di sistema:
- Accedi al tuo cluster PostgreSQL non AlloyDB come
superuser
. - L'estensione
pglogical
è installata nel tuo cluster PostgreSQL non AlloyDB. Per istruzioni di installazione specifiche per la release e la distribuzione, consulta pglogical. - Un server AlloyDB Omni installato e configurato. Per istruzioni su come installare AlloyDB Omni, consulta Installare AlloyDB Omni.
- Gli indirizzi IP sia del cluster PostgreSQL non AlloyDB sia del server host AlloyDB Omni.
- Una rete stabilita e protetta tra il cluster PostgreSQL non AlloyDB e il server host AlloyDB Omni. È necessaria la connettività TCP sulla porta PostgreSQL standard 5432.
Modificare i parametri sul provider non AlloyDB
Imposta il parametro
wal_level
sulogical
e aggiungipglogical
al parametroshared_preload_libraries
nel filepostgresql.conf
. L'estensionepglogical
richiede un insieme minimo di aggiustamenti dei parametri sul cluster del fornitore non AlloyDB.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
Verifica che i parametri siano impostati correttamente:
grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
Riavvia il cluster non AlloyDB per applicare le modifiche ai parametri.
Altri parametri potrebbero essere già impostati su valori sufficienti o potrebbero richiedere aggiustamenti a seconda della distribuzione e della versione non AlloyDB.
Controlla i seguenti parametri:
max_worker_processes
: uno per database del fornitore e almeno uno per nodo di abbonato. Almeno 10 è lo standard per questo parametro.max_replication_slots
: uno per nodo sui nodi provider.max_wal_senders
: uno per nodo sui nodi provider.track_commit_timestamp
: impostato suon
se è richiesta la risoluzione dei conflitti in base all'ultimo o al primo aggiornamento.listen_addresses
: deve includere l'indirizzo IP di AlloyDB Omni o la menzione tramite un blocco CIDR che lo copra.
(Facoltativo) Se il tuo provider non AlloyDB è Amazon RDS o Aurora, l'estensione pglogical deve essere attivata e i parametri obbligatori aggiustati tramite aggiustamenti
cluster parameter group
.In un gruppo di parametri di cluster esistente o nuovo, imposta i seguenti parametri:
- Da
rds.logical_replication
a1
- Da
max_replication_slots
a50
- Da
max_wal_senders
a50
- Da
max_worker_processes
a64
- Da
shared_preload_libraries
apg_stat_statements, pglogical
- Da
Riavvia il cluster Amazon RDS o Aurora per applicare le modifiche ai gruppi di parametri del cluster.
Verifica che tutti i valori dei parametri siano pertinenti:
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;
Modifiche all'autenticazione basata sull'host al cluster del provider non AlloyDB Omni
pglogical
stabilisce connessioni TCP locali al database del fornitore. Pertanto,
devi aggiungere l'indirizzo IP del server host al file DATA_DIR/pg_hba.conf
AlloyDB Omni, dove DATA_DIR
è il percorso del file system alla directory dei dati, ad esempio /home/$USER/alloydb-data
.
Aggiungi al file
DATA_DIR/pg_hba.conf
una voce di autenticazione attendibile per il server locale, specifica per un nuovo utentepglogical_replication
.Inoltre, i nodi degli abbonati devono essere in grado di autenticarsi nei confronti dei nodi del fornitore. Aggiungi l'indirizzo IP di ogni nodo sottoscrittore o l'intervallo IP del blocco CIDR appropriato al file
DATA_DIR/pg_hba.conf
: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
Sostituisci
SERVER_IP_ADDRESS
con l'indirizzo IP dell'istanza principale AlloyDB Omni da cui eseguire la replica.Verifica che le voci siano corrette:
tail -3 DATA_DIR/pg_hba.conf
Riavvia il cluster non AlloyDB per applicare le modifiche ai parametri.
Modifica i parametri del cluster di abbonati AlloyDB Omni
pglogical
richiede anche un insieme minimo di aggiustamenti dei parametri sul cluster di abbonati AlloyDB Omni. Devi aggiungere pglogical
al parametro shared_preload_libraries
nel file DATA_DIR/postgresql.conf
. Se un database all'interno del cluster agisce come database del provider, apporta le modifiche ai parametri richieste per i database del provider.
Modifica i parametri:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
Verifica che il parametro sia impostato correttamente:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
Riavvia AlloyDB Omni per rendere effettiva la modifica del parametro:
Docker
docker container restart CONTAINER_NAME
Sostituisci
CONTAINER_NAME
con il nome assegnato al contenitore AlloyDB Omni quando lo hai avviato.Podman
podman container restart CONTAINER_NAME
Sostituisci
CONTAINER_NAME
con il nome assegnato al contenitore AlloyDB Omni quando lo hai avviato.Imposta i valori predefiniti di AlloyDB Omni per altri parametri del database del fornitore:
max_worker_processes
: uno per database del fornitore e uno per nodo dell'abbonato.track_commit_timestamp
: impostato suon
se è necessaria la risoluzione dei conflitti in base all'ultimo/primo aggiornamento.
Verifica che tutti i valori dei parametri siano pertinenti:
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; "
Modifiche all'autenticazione basata sull'host al cluster di abbonati AlloyDB Omni
pglogical
stabilisce connessioni TCP locali al database degli abbonati AlloyDB Omni. Pertanto, devi aggiungere l'indirizzo IP del server host dell'abbonato al
file AlloyDB Omni DATA_DIR/pg_hba.conf
.
Aggiungi una voce di autenticazione attendibile per il server locale, specifica per un nuovo
pglogical_replication
utente, al fileDATA_DIR/pg_hba.conf
:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Verifica che la voce sia corretta:
tail -2 DATA_DIR/pg_hba.conf
Riavvia AlloyDB Omni per applicare la modifica dell'autenticazione:
docker container restart CONTAINER_NAME
Crea un utente pglogical
nei cluster di provider e abbonati
Devi creare un nuovo utente sia nel cluster del provider sia in quello dell'abbonato.
pglogical
richiede all'utente di disporre sia degli attributi superuser
che di replication
.
Nel cluster del provider AlloyDB in Google Cloud , crea il ruolo utente:
CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
(Facoltativo) Se il tuo provider non AlloyDB è Amazon RDS o Aurora, devi concedere il seguente ruolo:
GRANT rds_superuser TO replication_user;
Aggiungi pglogical
e i nodi al database del fornitore non AlloyDB
Concedi i privilegi richiesti.
Devi installare l'estensione
pglogical
in ogni database e concedere l'autorizzazioneusage
all'utente del database pglogical.Ad esempio, se il database è
my_test_db
, esegui il seguente comando:CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication;
Crea un nodo
pglogical
per i database del provider.node_name
è arbitrario e la stringadsn
deve essere una connessione TCP valida allo stesso database.Ad esempio, per il database
my_test_db
, esegui il seguente comando:SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
Crea una tabella e aggiungila al set di replica predefinito
Crea una tabella e aggiungila al set di replica predefinito nel database del fornitore non AlloyDB.
Crea una tabella di test denominata
test_table_1
nel database del provider:CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);
Aggiungi manualmente la tabella di test al set di replica predefinito. Puoi creare set di replica pglogical personalizzati o utilizzare quelli predefiniti. Quando hai creato l'estensione, sono stati creati diversi set di replica predefiniti, ad esempio
default
,default_insert_only
eddl_sql
. Puoi aggiungere tabelle e sequenze ai set di replica singolarmente o tutte contemporaneamente per uno schema specificato.-- 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;
(Facoltativo) Aggiungi tutte le tabelle di uno schema specificato, ad esempio
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;
Rimuovi la tabella dal set di replica
default
. Se nello schema sono presenti tabelle che non hanno una chiave primaria o un'identità replica, è possibile replicare solo le istruzioniINSERT
. Se hai aggiunto queste tabelle al set di replicadefault
automaticamente tramite la funzionereplication_set_add_all_tables
, devi rimuoverle manualmente da quel set di replica e aggiungerle al setdefault_insert_only
.-- 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');
Se vuoi aggiungere automaticamente le tabelle appena create al set di replica, aggiungi l'attivatore
pglogical_assign_repset
come suggerito nell'originepglogical
.
Copia il database nel cluster di abbonati AlloyDB Omni
Crea un backup solo dello schema del database di origine utilizzando l'utilità
pg_dump
.Esegui il comando
pg_dump
dal server di abbonamento AlloyDB Omni utilizzando l'indirizzo IP o l'endpoint del server non AlloyDB.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
Importa il backup nel database dell'abbonato sull'Omniserver AlloyDB dell'abbonato:
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
In questo modo vengono creati il database e lo schema, senza i dati delle righe. I dati delle righe vengono replicati dall'estensione pglogical
. Copia o ricrea manualmente gli altri utenti o ruoli necessari.
Crea un nodo e un abbonamento nel database degli abbonati AlloyDB Omni
Crea un nodo nel database degli abbonati AlloyDB Omni. Aggiungi la password al tuo
dsn
se scegli di utilizzare l'autenticazione tramite password.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'); "
Crea un abbonamento nel database degli abbonati che rimandi al database del fornitore nel server del fornitore AlloyDB Omni.
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'); "
Entro pochi secondi o minuti, i dati iniziali dovrebbero essere stati replicati dal fornitore all'abbonato:
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; "
Anche le righe aggiuntive aggiunte al database del fornitore vengono replicate in tempo reale entro pochi secondi.
Considerazioni aggiuntive sul deployment di pglogical
L'estensione pglogical
include molte funzionalità avanzate non trattate in questo
documento. Molte di queste funzionalità sono applicabili alla tua implementazione. Puoi prendere in considerazione le seguenti funzionalità avanzate:
- Risoluzione dei conflitti
- Replica multimaster e bidirezionale
- Inclusione di sequenze
- Procedure di switchover e failover
Passaggi successivi
- Eseguire la replica dei dati tra Google Cloud AlloyDB e AlloyDB Omni
- Switchover e failover con la replica
pglogical