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 Omni Operator 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: "16.8.0" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: memory: MEMORY_SIZE cpu: CPU_COUNT disks: - name: DataDisk size: DISK_SIZE EOF
Ganti kode berikut:
DB_CLUSTER_NAME
: nama cluster database ini—misalnya,subscriber-cluster
.ENCODED_PASSWORD
: sandi login database untuk peran penggunapostgres
default, yang dienkode sebagai string base64—misalnya,Q2hhbmdlTWUxMjM=
untukChangeMe123
.CPU_COUNT
: jumlah CPU yang tersedia untuk setiap instance database dalam cluster database ini.MEMORY_SIZE
: jumlah memori per instance database dari cluster database ini. Sebaiknya tetapkan setelan ini ke 8 gigabyte per CPU. Misalnya, jika Anda menetapkancpu
ke2
sebelumnya dalam manifes ini, sebaiknya tetapkanmemory
ke16Gi
.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_NAME
dengan nama pod subscriber.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 21h
Buat cadangan skema dari penayang sebagai salinan awal data yang dipublikasikan di database penayang. Replikasi logis tidak mendukung replikasi DDL. Skema atau tabel yang akan direplikasi harus ada di tujuan (klaster 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.sql
Ganti
PUBLISHER_IP_ADDRESS
dengan alamat IP load balancer di DBcluster publisher.Terapkan cadangan di database pelanggan.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres < /tmp/customer.schema-only.sql
Opsional: Pastikan tidak ada data dalam 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: ditetapkan ke nama database yang perubahannya ingin Anda streaming dari slot replikasi.
- PUBLISHER_CLUSTER_PASSWORD: sandi login database
untuk pengguna
postgres
dari DBCluster penayang. - PUBLICATION_NAME: nama publikasi yang menjadi langganan pelanggan.
- REPLICATION_SLOT_NAME: nama slot replikasi yang dibuat di DBCluster publisher.
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 penerbit yang menjadi langganan pelanggan.
Di cluster pelanggan, verifikasi bahwa baris yang ditambahkan ke tabel di cluster penerbit 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 mengilustrasikannya, buat tabel baru bernama
finance
di databasecustomer
pada cluster penerbit.# 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 PUBLICATION
Saat tabel baru ditambahkan ke cluster penerbit, Anda menerapkan DDL (pembuatan tabel) secara manual di pelanggan, lalu memverifikasi replikasi dengan menjalankan berikut ini 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)