Gli snippet di codice in questa pagina sono esempi che puoi utilizzare come modelli, sostituendo i valori con i valori delle risorse AlloyDB Omni.
Prima di iniziare
- Installa Omni Operator su Kubernetes.
- Assicurati di creare uno slot di replica, un cluster di pubblicazione e una pubblicazione. Per ulteriori informazioni, vedi Creare slot di replica e pubblicazione.
Creare e configurare il cluster di sottoscrizione
Crea un cluster di sottoscrizione.
$ cat << EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: db-pw-DB_CLUSTER_NAME type: Opaque data: DB_CLUSTER_NAME: "ENCODED_PASSWORD" # Password is odspassword --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: subscriber spec: databaseVersion: "18.1.0" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: memory: MEMORY_SIZE cpu: CPU_COUNT disks: - name: DataDisk size: DISK_SIZE EOFSostituisci quanto segue:
DB_CLUSTER_NAME: il nome di questo cluster di database, ad esempiosubscriber-cluster.ENCODED_PASSWORD: la password di accesso al database per il ruolo utentepostgrespredefinito, codificata come stringa base64, ad esempioQ2hhbmdlTWUxMjM=perChangeMe123.CPU_COUNT: il numero di CPU disponibili per ogni istanza di database in questo cluster di database.MEMORY_SIZE: la quantità di memoria per istanza di database di questo cluster di database. Ti consigliamo di impostare questo valore su 8 gigabyte per CPU. Ad esempio, se in precedenza in questo manifest hai impostatocpusu2, ti consigliamo di impostarememorysu16Gi.DISK_SIZE: le dimensioni del disco per istanza di database, ad esempio10Gi.
Trova il pod di cui hai bisogno.
$ kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME, alloydbomni.internal.dbadmin.goog/task-type=database, dbs.internal.dbadmin.goog/ha-role=Primary"Accedi al pod del database del cluster di sottoscrizione.
$ kubectl get pod NAME READY STATUS RESTARTS AGE al-2bce-publisher-0 3/3 Running 0 20h $ kubectl exec -ti SUBSCRIBER_POD_NAME -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-3513-subscriber-0:/$Sostituisci
SUBSCRIBER_POD_NAMEcon il nome del pod di sottoscrizione.Trova l'indirizzo IP del bilanciatore del carico sul cluster di database di pubblicazione, ad esempio
10.116.14.190.$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE al-publisher-rw-ilb ClusterIP 10.116.14.190 <none> 5432/TCP 21hEsegui un backup dello schema dal publisher come copia iniziale dei dati pubblicati nel database del publisher. La replica logica non supporta la replica DDL. Uno schema o una tabella che intendi replicare deve esistere nella destinazione (cluster di sottoscrizione) prima dell'inizio della replica logica.
postgres@al-3513-subscriber-0:/$ pg_dump -h PUBLISHER_IP_ADDRESS -U postgres --create --schema-only customer > /tmp/customer.schema-only.sqlSostituisci
PUBLISHER_IP_ADDRESScon l'indirizzo IP del bilanciatore del carico sul cluster di database di pubblicazione.Applica il backup nel database di sottoscrizione.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres < /tmp/customer.schema-only.sql(Facoltativo) Verifica che nella tabella non siano presenti dati.
# There is no data in table company customer=# select * from company; id | name | age | salary ----+------+-----+-------- (0 rows)Crea un abbonamento per il database. Assicurati che la pubblicazione sia già stata creata sul cluster di database di pubblicazione.
postgres@al-3513-subscriber-0:/$ CREATE SUBSCRIPTION sub_customer CONNECTION 'host=PUBLISHER_IP_ADDRESS port=5432 user=REPLICATION_USER dbname=DATABASE_NAME password=PUBLISHER_CLUSTER_PASSWORD sslmode=require' PUBLICATION PUBLICATION_NAME WITH (slot_name='REPLICATION_SLOT_NAME');Sostituisci quanto segue:
- REPLICATION_USER: il nome dell'utente che si connette allo slot di replica.
- DATABASE_NAME: imposta il nome del database di cui vuoi eseguire lo streaming delle modifiche dallo slot di replica.
- PUBLISHER_CLUSTER_PASSWORD: la password di accesso al database
per l'utente
postgresdel cluster di database di pubblicazione. - PUBLICATION_NAME: il nome della pubblicazione a cui si abbona il sottoscrittore.
- REPLICATION_SLOT_NAME: il nome dello slot di replica creato sul cluster di database di pubblicazione.
(Facoltativo) Verifica la replica sul cluster di sottoscrizione.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# select * from public.company; id | name | age | salary ----+-------+-----+-------- 1 | Quinn | 25 | 65000 2 | Kim | 22 | 72250 3 | Bola | 31 | 53000 4 | Sasha | 33 | 105000 5 | Yuri | 27 | 85000 (5 rows)Nel cluster di pubblicazione, aggiungi una riga alla tabella.
# On the publisher database $ kubectl exec -ti al-2bce-publisher-0 -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-2bce-publisher-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# insert into TABLE_NAME (id, name, age, salary) values (6, 'Alex', 39, 100000);Sostituisci TABLE_NAME con il nome della tabella nel cluster di database di pubblicazione a cui è abbonato il sottoscrittore.
Nel cluster di sottoscrizione, verifica che la riga aggiunta alla tabella nel cluster di pubblicazione sia stata replicata nella tabella nel cluster di sottoscrizione.
# On the subscriber database, data is synced. postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# select * from TABLE_NAME; id | name | age | salary ----+-------+-----+-------- 1 | Quinn | 25 | 65000 2 | Kim | 22 | 72250 3 | Bola | 31 | 53000 4 | Sasha | 33 | 105000 5 | Yuri | 27 | 85000 6 | Alex | 39 | 100000 (6 rows)
Creare manualmente tabelle aggiuntive
A differenza di replicate_ddl_command in pglogical, la replica logica non sincronizza automaticamente le modifiche DDL. Sebbene lo strumento open source
pgl_ddl_deploy
offra una soluzione, puoi anche eseguire manualmente i comandi DDL sul
sottoscrittore.
Per illustrare questo, crea una nuova tabella denominata
financenel databasecustomersul cluster di pubblicazione.# On the publisher database $ kubectl exec -ti al-2bce-publisher-0 -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-2bce-publisher-0:/$ psql -h localhost -U postgres customer customer=# create table finance (row text); CREATE TABLE customer=# insert into finance values ('critical data'); INSERT 0 1 customer=# ALTER PUBLICATION pub_customer ADD TABLE finance; ALTER PUBLICATIONQuando viene aggiunta una nuova tabella al cluster di pubblicazione, applichi manualmente il DDL (creazione della tabella) nel sottoscrittore, quindi verifichi la replica eseguendo quanto segue sul cluster di sottoscrizione.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres customer customer=# create table finance (row text); CREATE TABLE customer=# ALTER SUBSCRIPTION sub_customer REFRESH PUBLICATION; ALTER SUBSCRIPTION customer=# select * from finance; row --------------- critical data (1 row)