1. Introduzione
Questo codelab mostra come configurare la replica logica tra istanze AlloyDB Omni indipendenti. Eseguirai il deployment di più istanze di AlloyDB Omni su una singola VM Compute Engine e configurerai la replica tra loro utilizzando l'estensione pglogical.
L'esecuzione di più istanze su un singolo nodo è utile per lo sviluppo, il test o la simulazione di ambienti di replica. Al termine di questo codelab, avrai una configurazione di replica funzionante con un'istanza che funge da fornitore e un'altra da abbonato.
Prerequisiti
- Accesso a un progetto Google Cloud e a Cloud Shell dalla console Google Cloud.
- Google Cloud SDK (
gcloud) installato e configurato. Per informazioni dettagliate sull'installazione di gcloud, consulta gcloud-install.
Obiettivi didattici
- Come creare e preparare una VM Compute Engine per più istanze AlloyDB Omni utilizzando
gcloud. - Come installare i pacchetti RPM di AlloyDB Omni.
- Come configurare e inizializzare più istanze AlloyDB Omni utilizzando i modelli
systemd. - Come configurare la replica logica tra le istanze AlloyDB Omni utilizzando
pglogical. - Come verificare la replica replicando i dati dal fornitore all'abbonato.
Che cosa ti serve
- Ottieni un link URL agli RPM di AlloyDB Omni. I link vengono inviati alla tua email, incluso un link al server dell'URL del repository. Inizializza la seguente variabile di ambiente per mantenere l'URL pronto per l'uso durante il codelab.
export ALLOYDB_OMNI_REPOSITORY_URL="..." - Un terminale funzionante con accesso a Google Cloud. A questo scopo, puoi utilizzare Cloud Shell.
2. Configurazione e requisiti
Configurazione del progetto
Creare un progetto Google Cloud
- Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
- Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.
Avvia Cloud Shell
Sebbene tu possa gestire Google Cloud da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

- Apri la console Google Cloud e fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra.Puoi anche aprire Cloud Shell in uno dei seguenti modi:
- Se utilizzi la console Google Cloud, premi G e poi S.
- Fai clic su questo link.
In genere, Cloud Shell richiede pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine dell'operazione, visualizzerai un output simile al seguente:

3. Crea la VM di Compute Engine
In questa sezione, crea una singola macchina virtuale (VM) Compute Engine utilizzando lo strumento a riga di comando gcloud. Utilizza un'immagine Rocky Linux 9, completamente compatibile con gli RPM di AlloyDB Omni.
- Definisci le variabili di ambiente per l'ID progetto, il nome della VM, la zona e la regione.
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Accedi con il tuo account Google Cloud e configura il progetto predefinito.
gcloud auth login gcloud config set project $PROJECT - Per consentire le connessioni SSH alla tua VM utilizzando Identity-Aware Proxy (IAP), crea una regola firewall.
gcloud compute firewall-rules create allow-ssh-alloydb-omni \ --project=$PROJECT \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges="0.0.0.0/0" - Poiché la VM viene creata senza un indirizzo IP pubblico, configura un router Cloud e un gateway Cloud NAT per consentire alla VM di accedere ai repository di pacchetti esterni e scaricare il software richiesto.
gcloud compute routers create alloydb-omni-router \ --project=$PROJECT \ --network=default \ --region=$REGION gcloud compute routers nats create alloydb-omni-nat \ --project=$PROJECT \ --router=alloydb-omni-router \ --region=$REGION \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips - Verifica che la tua rete Virtual Private Cloud (VPC) abbia una route del gateway internet predefinita valida. Questa route è necessaria per consentire a Cloud NAT di inoltrare il traffico in uscita a internet.
gcloud compute routes create default-internet-route \ --project=$PROJECT \ --network=default \ --destination-range=0.0.0.0/0 \ --next-hop-gateway=default-internet-gateway - Crea l'istanza VM di Compute Engine con le specifiche richieste (16 vCPU, disco permanente bilanciato da 20 GB, Rocky Linux 9). Per una maggiore sicurezza, utilizza il flag
--no-addressper assicurarti che alla VM non venga assegnato un indirizzo IP pubblico.gcloud compute instances create $INSTANCE_NAME \ --project=$PROJECT \ --zone=$ZONE \ --machine-type=n2-highmem-16 \ --image-family=rocky-linux-9 \ --image-project=rocky-linux-cloud \ --boot-disk-size=20GB \ --boot-disk-type=pd-balanced \ --no-address - Dopo aver creato la VM, verifica il suo stato.
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. Prepara la VM
In questa sezione, ti connetti alla VM appena creata e prepari l'ambiente del sistema operativo.
- Connettiti alla VM tramite SSH utilizzando IAP. Poiché la VM non ha un indirizzo IP pubblico,
gcloudesegue automaticamente il tunneling della connessione SSH tramite IAP.gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - Definisci una variabile di ambiente per la directory di dati di base.
export BASE_PGDATA="/var/lib/alloydbomni" - Crea la directory di base dei dati.
sudo mkdir -p $BASE_PGDATA - Installa il pacchetto
policycoreutils-python-utilsin modo che sia possibile configurare il criterio SELinux.sudo dnf install -y policycoreutils-python-utils
5. Installa AlloyDB Omni
Ora che la VM è preparata, puoi configurare il repository dei pacchetti e installare il pacchetto RPM di AlloyDB Omni.
- Configura il repository YUM sulla VM creando il file di configurazione del repository. Sostituisci
$ALLOYDB_OMNI_REPOSITORY_URLcon l'URL che hai ricevuto.export ALLOYDB_OMNI_REPOSITORY_URL="..." sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF [alloydbomni] name=alloydbomni baseurl=$ALLOYDB_OMNI_REPOSITORY_URL enabled=1 repo_gpgcheck=0 gpgcheck=1 gpgkey=https://dl.google.com/linux/linux_signing_key.pub EOF - Aggiorna la cache YUM.
sudo yum makecache - Installa la versione 18 del pacchetto RPM di AlloyDB Omni.
sudo dnf install -y alloydbomni18
6. Configura più istanze
In questa sezione, configura due istanze: inst1 e inst2.
- Per supportare più istanze, crea il
systemdfile di servizio del modelloalloydbomni18@.service.sudo tee /etc/systemd/system/alloydbomni18@.service << EOF [Unit] Description=AlloyDB Omni Database server instance %I After=syslog.target After=network-online.target [Service] SyslogIdentifier=alloydbomni-%I Type=notify User=postgres Group=postgres # Load configuration for the instance EnvironmentFile=/etc/alloydbomni/%I.conf OOMScoreAdjust=-1000 Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj Environment=PG_OOM_ADJUST_VALUE=0 ExecStartPre=/usr/lib/postgresql/18/bin/alloydbomni18-check-db-dir \${PGDATA} ExecStart=/usr/lib/postgresql/18/bin/postgres -D \${PGDATA} ExecReload=/bin/kill -HUP \$MAINPID KillMode=mixed KillSignal=SIGINT TimeoutSec=0 TimeoutStartSec=0 TimeoutStopSec=1h [Install] WantedBy=multi-user.target EOF - Ricarica la configurazione del gestore
systemdper riconoscere il nuovo servizio di modelli.sudo systemctl daemon-reload - Crea la directory di configurazione per le istanze AlloyDB Omni.
sudo mkdir -p /etc/alloydbomni - Configura la directory dei dati per
inst1.sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOF - Configura la directory dei dati per
inst2.sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF - Imposta le autorizzazioni appropriate sui file di configurazione.
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - Crea le directory di dati per entrambe le istanze e imposta la proprietà corretta.
sudo mkdir -p /var/lib/alloydbomni/inst1 sudo mkdir -p /var/lib/alloydbomni/inst2 sudo chown -R postgres:postgres /var/lib/alloydbomni sudo chmod 750 /var/lib/alloydbomni/inst1 /var/lib/alloydbomni/inst2 - (Facoltativo) Imposta i limiti delle risorse per ogni istanza. In questo modo, un'istanza non consuma tutte le risorse VM. Crea directory e file di override
systemdper entrambe le istanze.Nota:i limiti delle risorse utilizzati nelle seguenti configurazioni (40%) sono valori di esempio. Modifica i limiti in base al carico di lavoro specifico e alla capacità della VM.Perinst1: Persudo mkdir -p /etc/systemd/system/alloydbomni18@inst1.service.d sudo tee /etc/systemd/system/alloydbomni18@inst1.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOFinst2:sudo mkdir -p /etc/systemd/system/alloydbomni18@inst2.service.d sudo tee /etc/systemd/system/alloydbomni18@inst2.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOF
7. Inizializzare e preparare i database
Inizializza e prepara ogni istanza del database separatamente.
- Configura SELinux in modalità permissiva per la configurazione.
Attenzione: l'impostazione di SELinux in modalità permissiva disattiva l'applicazione e deve essere utilizzata con cautela. Viene utilizzato in questo codelab per semplificare l'installazione. In produzione, configura le policy SELinux appropriate per AlloyDB Omni in modo che venga eseguito in modalità di applicazione. Puoi riattivare l'applicazione dopo la configurazione eseguendosudo setenforce 0sudo setenforce 1. - Definisci una password efficace per l'utente amministratore
postgresdi PostgreSQL. Questa password viene utilizzata per entrambe le istanze in questo codelab. Nota: il passaggio delle password utilizzando le variabili di ambiente nella riga di comando (ad es.export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD) viene utilizzato qui per semplicità nel codelab, ma può esporre la password negli elenchi dei processi. In produzione, utilizza metodi più sicuri come un file.pgpasso un secret manager.
Configura inst1
- Inizializza la directory del database per
inst1.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configura l'istanza in modo che ascolti sulla porta
5433aggiornando il filepostgresql.conf.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf - Prepara l'istanza del database per AlloyDB Omni.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
Configura inst2
- Inizializza la directory del database per
inst2.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configura l'istanza in modo che sia in ascolto sulla porta
5434.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - Prepara l'istanza di database.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. Avvia i servizi AlloyDB Omni
Ora puoi avviare i servizi systemd per entrambe le istanze.
- Per riconoscere la nuova configurazione e gli override, ricarica la configurazione del gestore
systemd.sudo systemctl daemon-reload - Attiva e avvia il servizio per
inst1.sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1 - Attiva e avvia il servizio per
inst2.sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2 - Verifica che entrambi i servizi siano attivi e in esecuzione.
Verifica che l'output per entrambi indichisudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running).
9. Verifica delle istanze AlloyDB Omni
Verifica che entrambe le istanze funzionino correttamente e siano indipendenti.
- Connettiti a
inst1(porta 5433). Ti viene chiesto di inserire la password che hai configurato in Inizializzare e preparare i database./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W - Esegui una query per verificare la connessione.
postgres=# SELECT version(); - Disconnettiti dall'istanza.
postgres=# \q - Connettiti a
inst2(porta 5434)./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W - Esegui una query per verificare la connessione.
postgres=# SELECT version(); - Disconnettiti dall'istanza.
postgres=# \q
10. Configura per la replica pglogical
Configura la replica logica tra le due istanze utilizzando l'estensione pglogical. In questo scenario, inst1 funge da fornitore e inst2 da abbonato.
Nota:questo codelab utilizza il superutente postgres per le connessioni di replica. In un ambiente di produzione, crea un utente di replica dedicato con privilegi REPLICATION e concedigli l'accesso solo alle tabelle replicate.
Configura le istanze per pglogical
- Attiva
pglogicalinshared_preload_librariese configura altri parametri di replica inpostgresql.confperinst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst1/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst1/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Configura le impostazioni per
inst2che hai configurato perinst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst2/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst2/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Per applicare le modifiche alla configurazione, riavvia entrambe le istanze.
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
Configura ruoli e tabelle di replica
- Su
inst1(provider, porta 5433), crea un ruolo di replica e la tabella da replicare./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; " - Su
inst2(abbonato, porta 5434), crea la stessa struttura di ruolo e tabella./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; "
Configura i nodi e l'abbonamento pglogical
- Inizializza il nodo del provider pglogical su
inst1./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.replication_set_add_table('default', 'replication_test'); " - Inizializza il nodo di sottoscrizione pglogical e crea la sottoscrizione su
inst2. Nota:dopo aver creato l'abbonamento, potrebbe essere necessario un po' di tempo prima che la sincronizzazione iniziale venga completata./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=5434 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.create_subscription( subscription_name := 'test_subscription', provider_dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); "
11. Verifica la replica pglogical
Verifica che la replica funzioni come previsto inserendo i dati nel provider ed eseguendo una query su di essi nel sottoscrittore.
- Verifica che l'abbonamento sia attivo. Il passaggio a
replicatingpotrebbe richiedere alcuni secondi./usr/lib/postgresql/18/bin/psql -t -A -h localhost -p 5434 \ -U postgres -d postgres -c " SELECT status FROM pglogical.show_subscription_status() WHERE subscription_name = 'test_subscription'; " - Prima di continuare, verifica che l'output mostri
replicating. - Inserisci una riga di test sul fornitore (
inst1)./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " INSERT INTO replication_test (data) VALUES ('Hello from replication provider!'); " - Per verificare che i dati siano stati replicati, esegui una query sulla tabella in
inst2. Verifica di visualizzare la riga inserita il giorno/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1.
12. Esegui la pulizia
Libera spazio dalle risorse. Innanzitutto, elimina le istanze AlloyDB Omni sulla VM, poi elimina le risorse Google Cloud.
Elimina le istanze AlloyDB Omni
Prima di eliminare la VM, puoi liberare spazio nelle istanze AlloyDB Omni interrompendo e disattivando i servizi e rimuovendo la loro configurazione e i loro dati.
- Interrompi e disattiva il servizio per
inst1e rimuovi i relativi dati e la configurazione.sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.conf - Interrompi e disattiva il servizio per
inst2e rimuovi i relativi dati e la configurazione.sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf - Ricarica la configurazione del gestore systemd e reimposta le unità non riuscite.
sudo systemctl daemon-reload sudo systemctl reset-failed
Libera spazio dalle risorse Google Cloud
Dopo aver liberato spazio dalle istanze, elimina la VM Compute Engine e le altre risorse.
- Disconnettiti dalla sessione SSH.
exit - Elimina l'istanza VM di Compute Engine.
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - Elimina la regola firewall.
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Elimina Cloud NAT e il router.
gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet - Elimina la route internet predefinita.
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. Complimenti
Hai eseguito il deployment e la configurazione di più istanze di AlloyDB Omni su una singola VM Compute Engine.
Argomenti trattati
- Come eseguire il provisioning e preparare una VM di Compute Engine.
- Come installare i pacchetti RPM di AlloyDB Omni.
- Come configurare i modelli
systemdper più istanze. - Come inizializzare, configurare e avviare più servizi indipendenti su porte diverse.
- Come verificare l'indipendenza di ogni istanza.
Scopri di più
- Per ulteriori informazioni su installazione e configurazione, consulta la documentazione di AlloyDB Omni.
- Per informazioni dettagliate sull'estensione di replica utilizzata in questo codelab, consulta la documentazione di pglogical.