Dokumen ini memberikan contoh yang menunjukkan cara membuat dan mengonfigurasi cluster pelanggan secara manual. Cluster pelanggan adalah cluster database yang menerima data yang direplikasi dari cluster penayang.
Cuplikan kode di halaman ini adalah contoh yang dapat Anda gunakan sebagai model, yang mengganti nilai dengan nilai untuk resource AlloyDB Omni.
Sebelum memulai
- Menginstal Omni Operator di Kubernetes.
- Pastikan Anda membuat slot replikasi, cluster penayang, dan publikasi. Untuk 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.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 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 perlukan.
$ 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 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 21h
Ambil cadangan skema dari penayang sebagai salinan awal data yang dipublikasikan di database penayang. Replikasi logis tidak mendukung replikasi DDL. Skema atau tabel yang ingin Anda replikasi 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.sql
Ganti
PUBLISHER_IP_ADDRESS
dengan 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.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 replika.
- 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 dilanggani pelanggan.
- REPLICATION_SLOT_NAME: nama slot replika 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 dilanggani 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 mengilustrasikannya, buat tabel baru bernama
finance
dalam databasecustomer
di 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 PUBLICATION
Saat tabel baru ditambahkan ke cluster penayang, Anda akan menerapkan DDL secara manual (pembuatan tabel) 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)