Membuat slot dan publikasi replikasi

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 pengguna postgres default, yang dienkode sebagai string base64—misalnya, Q2hhbmdlTWUxMjM= untuk ChangeMe123.

  • 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 menetapkan cpu ke 2 sebelumnya dalam manifes ini, sebaiknya tetapkan memory ke 16Gi.

  • 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 sebagai true. Nilai defaultnya adalah false, 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

  1. 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"
    
  2. 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.
  3. Jika DATABASE_NAME yang ditentukan dalam resource replikasi tidak ada, buat database.

    CREATE DATABASE DATABASE_NAME;
    
  4. 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.

  5. 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;
    
  6. 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.

Langkah berikutnya