Dokumen ini menjelaskan cara membuat slot replikasi logis di AlloyDB Omni. Di PostgreSQL, replikasi logis adalah metode untuk menyalin perubahan data dari database penayang ke satu atau beberapa subscriber, yang dapat berupa database atau aplikasi lainnya. Anda dapat mengaktifkan dan mengonfigurasi replika logika di cluster yang Anda buat menggunakan Operator Kubernetes AlloyDB Omni.
Perubahan yang di-streaming dapat berupa pembaruan, penyisipan, atau penghapusan baris satu per satu. Pelanggan terhubung ke penayang melalui slot replikasi unik yang memastikan koneksi yang persisten. Koneksi persisten mempertahankan status streaming data, sehingga jika terjadi gangguan, streaming akan dilanjutkan dari tempatnya berhenti.
Untuk mengetahui informasi selengkapnya tentang replikasi logis di PostgreSQL, lihat Replikasi Logis.
Cuplikan kode di halaman ini adalah contoh yang dapat Anda gunakan sebagai model, yang mengganti nilai dengan nilai untuk resource AlloyDB Omni.
Sebelum memulai
Membuat cluster penayang
Sebelum membuat slot replikasi, Anda harus membuat cluster penayang
dengan replikasi logis yang diaktifkan. Anda harus menetapkan parameter wal_level
ke
logical
dalam manifes DBCluster
.
Untuk membuat cluster database penayang dengan replikasi logis diaktifkan, terapkan manifes berikut:
apiVersion: v1
kind: Secret
metadata:
name: db-pw-DB_CLUSTER_NAME
namespace: DB_CLUSTER_NAMESPACE
type: Opaque
data:
DB_CLUSTER_NAME: "ENCODED_PASSWORD"
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
name: DB_CLUSTER_NAME
namespace: DB_CLUSTER_NAMESPACE
spec:
databaseVersion: "ALLOYDB_OMNI_VERSION"
spec:
availability:
numberOfStandbys: 1
primarySpec:
parameters:
wal_level: "logical"
adminUser:
passwordRef:
name: db-pw-DB_CLUSTER_NAME
resources:
cpu: CPU_COUNT
memory: MEMORY_SIZE
disks:
- name: DataDisk
size: DISK_SIZE
Ganti kode berikut:
DB_CLUSTER_NAME
: nama cluster database ini—misalnya,publisher
.DB_CLUSTER_NAMESPACE
(Opsional): namespace tempat Anda ingin membuat cluster database—misalnya,publisher-namespace
.ENCODED_PASSWORD
: sandi login database untuk peran penggunapostgres
default, yang dienkode sebagai string base64—misalnya,Q2hhbmdlTWUxMjM=
untukChangeMe123
.ALLOYDB_OMNI_VERSION
: versi AlloyDB Omni,15.7.0
atau yang lebih baru.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
.
Membuat slot replikasi
Setelah membuat cluster penayang, Anda dapat membuat slot replikasi
logika menggunakan resource Replication
di cluster penayang. Setiap resource Replication
dikaitkan dengan resource cluster database yang sesuai. Cluster database dapat memiliki beberapa resource replikasi logis
yang terkait dengannya.
Untuk mengonfigurasi slot replikasi di cluster penayang, terapkan manifes berikut:
$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: USER_PASSWORD_SECRET_NAME
namespace: USER_PASSWORD_SECRET_NAMESPACE
type: Opaque
---
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Replication
metadata:
name: REPLICATION_NAME
namespace: NAMESPACE
spec:
dbcluster:
name: DB_CLUSTER_NAME
upstream:
logicalReplication:
pluginName: DECODER_PLUGIN
databaseName: DATABASE_NAME
applicationName: APPLICATION_NAME
replicationSlotName: REPLICATION_SLOT_NAME
synchronous: "REPLICATION_MODE"
username: APPLICATION_USER
password:
name: USER_PASSWORD_SECRET_NAME
namespace: USER_PASSWORD_SECRET_NAMESPACE
EOF
Ganti kode berikut:
- REPLICATION_NAME: nama untuk resource
Replication
ini—misalnya,replication-1
. - NAMESPACE: namespace Kubernetes untuk resource
Replication
ini. Nama ini harus cocok dengan namespace cluster database. - DB_CLUSTER_NAME: nama cluster database, yang Anda tentukan saat membuatnya.
- DECODER_PLUGIN: ditetapkan ke plugin decoding, seperti
pgoutput
, yang ingin Anda gunakan untuk replikasi logis. Untuk informasi selengkapnya tentang berbagai plugin decoding, lihat Plugin output. - DATABASE_NAME: ditetapkan ke nama database yang perubahannya ingin Anda streaming ke slot replikasi. Pastikan database sudah dibuat di cluster penayang.
- APPLICATION_NAME (Opsional): ditetapkan ke nama aplikasi yang akan terhubung ke slot replika. Kolom ini diperlukan jika mode streaming disetel ke sinkron.
- REPLICATION_MODE (Opsional): ditetapkan ke
false
untuk replikasi asinkron. Jika Anda ingin mengaktifkan replikasi sinkron, tetapi mengorbankan kecepatan, tetapkan nilai ini sebagaitrue
. Nilai defaultnya adalahfalse
, jika tidak ditetapkan secara eksplisit. - REPLICATION_SLOT_NAME: nama slot replika yang
akan dibuat, dan digunakan oleh pelanggan—misalnya,
logicalrepltestslot
. - REPLICATION_USER (Opsional): nama pengguna yang terhubung ke slot replikasi. Jika Anda menetapkan pengguna replikasi, Anda harus menetapkan nama secret, namespace, dan sandi.
- USER_PASSWORD_SECRET_NAME (Opsional): nama Kubernetes Secret pengguna aplikasi. Wajib, jika pengguna aplikasi ditetapkan.
- USER_PASSWORD_SECRET_NAMESPACE (Opsional): namespace tempat rahasia Kubernetes untuk pengguna aplikasi berada. Wajib, jika pengguna aplikasi ditetapkan.
Melihat status slot replikasi
Untuk melihat status slot replika, jalankan perintah berikut:
kubectl get replication.alloydbomni.dbadmin.goog REPLICATION_NAME -n NAMESPACE -oyaml
Kolom status
beserta detail lainnya disertakan dalam respons:
apiVersion: alloydbomni.dbadmin.goog/v1
kind: Replication
metadata:
name: REPLICATION_NAME
namespace: NAMESPACE
...
...
status:
conditions:
- lastTransitionTime: "2025-01-25T06:49:25Z"
message: Ready for replication
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2025-01-25T06:49:25Z"
message: Replication slot is not being used
reason: Unhealthy
status: "False"
type: Healthy
observedGeneration: 2
upstream:
host: DATABASE_ENDPOINT
password:
name: USER_PASSWORD_SECRET_NAME
namespace: USER_PASSWORD_SECRET_NAMESPACE
port: DATABASE_PORT
replicationSlotName: REPLICATION_SLOT_NAME
username: APPLICATION_USER
DATABASE_ENDPOINT
menampilkan alamat IP yang Anda gunakan untuk terhubung ke database. Status TRUE
di kolom READY
menunjukkan bahwa slot
sudah siap di-streaming. Saat DBCluster atau aplikasi pelanggan terhubung ke slot replikasi, status di kolom HEALTHY
akan berubah menjadi TRUE
.
Mengonfigurasi cluster penayang
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"
Hubungkan ke pod utama di cluster penayang menggunakan
psql
:psql -h IP_ADDRESS -U USERNAME -d DATABASE_NAME
Ganti kode berikut:
- IP_ADDRESS: alamat IP pod utama cluster penayang.
- USERNAME: pengguna postgres database.
- DATABASE_NAME: database yang ingin diikuti oleh pelanggan.
Jika
DATABASE_NAME
yang ditentukan dalam resource replikasi tidak ada, buat database.CREATE DATABASE DATABASE_NAME;
Opsional: Untuk tujuan pengujian, tambahkan tabel ke database dan masukkan beberapa data. Anda dapat menggunakan data ini untuk mengamati replikasi data dari penayang ke pelanggan.
$ psql -h localhost -U postgres DATABASE_NAME customer=# CREATE TABLE TABLE_NAME( customer(# ID INT PRIMARY KEY NOT NULL, customer(# NAME TEXT NOT NULL, customer(# AGE INT NOT NULL, customer(# SALARY REAL customer(# ); CREATE TABLE customer=# INSERT INTO TABLE_NAME (ID,NAME,AGE,SALARY) VALUES customer-# (1, 'Quinn', 25, 65000.00), customer-# (2, 'Kim', 22, 72250.00), customer-# (3, 'Bola', 31, 53000.00), customer-# (4, 'Sasha', 33, 105000.00), customer-# (5, 'Yuri', 27, 85000.00); INSERT 0 5 customer=# \dt List of relations Schema | Name | Type | Owner --------+---------+-------+---------- public | company | table | postgres (1 row) 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 (5 rows)
Ganti TABLE_NAME dengan tabel tempat Anda ingin menyimpan data dan yang dilanggani oleh subscriber.
Berikan izin:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO REPLICATION_USER; GRANT USAGE ON SCHEMA public TO REPLICATION_USER; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO REPLICATION_USER;
Buat publikasi dengan menjalankan perintah berikut:
CREATE PUBLICATION PUBLICATION_NAME; ALTER PUBLICATION PUBLICATION_NAME ADD TABLE TABLE_NAME;
Ganti kode berikut:
- PUBLICATION_NAME: nama publikasi yang akan digunakan pelanggan untuk berlangganan.
Setelah membuat publikasi, Anda dapat menyiapkan cluster pelanggan untuk replikasi logis atau mengonfigurasi aplikasi untuk mulai mereplikasi.
Batasan
Pembaruan pada konfigurasi slot replikasi tidak didukung. Untuk memperbarui konfigurasi, hapus slot replikasi, lalu buat ulang dengan konfigurasi yang diperbarui.
Untuk menghapus slot replikasi, jalankan perintah berikut:
kubectl delete replication.alloydbomni.dbadmin.goog REPLICATION_NAME -n NAMESPACE
Anda hanya dapat mengonfigurasi slot replikasi logis di database penayang. API replikasi tidak mendukung aplikasi atau DBCluster pelanggan replikasi logis.
Jika cluster database yang direferensikan oleh objek replikasi dikonfigurasi untuk ketersediaan tinggi, slot replikasi logis akan dibuat ulang di standby yang dipromosikan setelah failover. Setelah slot replikasi dibuat ulang, posisi streaming di slot tidak lagi tersedia, dan aplikasi apa pun yang berlangganan streaming harus terhubung kembali dan memutar ulang streaming.