Cuplikan kode di halaman ini adalah contoh yang dapat Anda gunakan sebagai model, dengan mengganti nilai dengan nilai untuk resource AlloyDB Omni Anda.
Sebelum memulai
- Instal Operator Omni di Kubernetes.
- Pastikan Anda membuat slot replikasi, cluster penayang, dan publikasi. Untuk mengetahui informasi selengkapnya, lihat Membuat slot replikasi dan publikasi.
Membuat dan mengonfigurasi cluster pelanggan
Buat cluster pelanggan.
$ 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: "15.7.1" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: memory: MEMORY_SIZE cpu: CPU_COUNT disks: - name: DataDisk size: DISK_SIZE EOFGanti kode berikut:
DB_CLUSTER_NAME: nama cluster database ini—misalnya,subscriber-cluster.ENCODED_PASSWORD: sandi login database untuk peran penggunapostgresdefault, yang dienkode sebagai string base64—misalnya,Q2hhbmdlTWUxMjM=untukChangeMe123.CPU_COUNT: jumlah CPU yang tersedia untuk setiap instance database di cluster database ini.MEMORY_SIZE: jumlah memori per instance database dari cluster database ini. Sebaiknya tetapkan nilai ini ke 8 gigabyte per CPU. Misalnya, jika Anda menetapkancpuke2sebelumnya dalam manifes ini, sebaiknya tetapkanmemoryke16Gi.DISK_SIZE: ukuran disk per instance database—misalnya,10Gi.
Temukan pod yang Anda butuhkan.
$ 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"Login ke pod database cluster pelanggan.
$ 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:/$Ganti
SUBSCRIBER_POD_NAMEdengan nama pod pelanggan.Temukan alamat IP load balancer di DBcluster penayang, seperti
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 21hBuat cadangan skema dari penayang sebagai salinan awal data yang dipublikasikan di database penayang. Replikasi logis tidak mendukung replikasi DDL. Skema atau tabel yang Anda rencanakan untuk direplikasi harus ada di tujuan (cluster pelanggan) sebelum replikasi logis dimulai.
postgres@al-3513-subscriber-0:/$ pg_dump -h PUBLISHER_IP_ADDRESS -U postgres --create --schema-only customer > /tmp/customer.schema-only.sqlGanti
PUBLISHER_IP_ADDRESSdengan alamat IP load balancer di DBcluster penayang.Terapkan cadangan di database pelanggan.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres < /tmp/customer.schema-only.sqlOpsional: Pastikan tidak ada data di tabel.
# There is no data in table company customer=# select * from company; id | name | age | salary ----+------+-----+-------- (0 rows)Buat langganan untuk database. Pastikan publikasi sudah dibuat di DBCluster penayang.
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');Ganti kode berikut:
- REPLICATION_USER: nama pengguna yang terhubung ke slot replikasi.
- DATABASE_NAME: tetapkan ke nama database yang perubahannya ingin Anda streaming dari slot replikasi.
- PUBLISHER_CLUSTER_PASSWORD: sandi login database
untuk pengguna
postgresDBCluster penayang. - PUBLICATION_NAME: nama publikasi yang dilanggan oleh pelanggan.
- REPLICATION_SLOT_NAME: nama slot replikasi yang dibuat di DBCluster penayang.
Opsional: Verifikasi replikasi di cluster pelanggan.
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)Di cluster penayang, tambahkan baris ke tabel.
# 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);Ganti TABLE_NAME dengan nama tabel di DBCluster penayang yang dilanggan oleh pelanggan.
Di cluster pelanggan, pastikan baris yang ditambahkan ke tabel di cluster penayang telah direplikasi ke tabel di cluster pelanggan.
# 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)
Membuat tabel tambahan secara manual
Replikasi logis tidak otomatis menyinkronkan perubahan DDL, tidak seperti replicate_ddl_command di pglogical. Meskipun alat open source
pgl_ddl_deploy
menawarkan solusi, Anda juga dapat menjalankan perintah DDL secara manual di
pelanggan.
Untuk mengilustrasikan hal ini, buat tabel baru bernama
financedi databasecustomerdi cluster penayang.# 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 PUBLICATIONSaat tabel baru ditambahkan ke cluster penayang, Anda akan menerapkan DDL (pembuatan tabel) secara manual di pelanggan, lalu memverifikasi replikasi dengan menjalankan perintah berikut di cluster pelanggan.
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)