Mengonfigurasi replika eksternal

Halaman ini menjelaskan cara mengonfigurasi instance Cloud SQL yang direplikasi ke replika di luar Cloud SQL menggunakan ekstensi pglogical dengan logical decoding.

Untuk mengetahui informasi selengkapnya tentang konfigurasi replika eksternal, lihat Tentang replikasi eksternal.

Menyiapkan konfigurasi replika eksternal

Sebelum memulai

Sebelum memulai tugas ini, Anda harus memiliki instance Cloud SQL dan instance PostgreSQL eksternal yang memenuhi persyaratan untuk replika eksternal.

Mengonfigurasi instance utama

  1. Buka halaman Instance Cloud SQL di konsol Google Cloud.
  2. Aktifkan akses pada instance utama untuk alamat IP replika eksternal.

    Untuk informasi tentang cara mengaktifkan akses IP, lihat Mengonfigurasi akses untuk koneksi IP.

  3. Catat alamat IP publik dan alamat IP publik keluar dari instance utama untuk digunakan nanti. Anda dapat menemukan nilai ini di halaman Overview instance.
  4. Klik ikon Cloud Shell di sudut kanan atas.
  5. Pada layar perintah Cloud Shell, gunakan klien PostgreSQL bawaan untuk terhubung ke instance utama Anda:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
       
       
  6. Masukkan sandi root Anda. Anda akan melihat perintah postgres.
  7. Buat pengguna PostgreSQL dengan atribut REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Menginstal dan mengonfigurasi ekstensi pglogical:

    Edit instance Cloud SQL untuk menambahkan dan menetapkan flag berikut:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Untuk mengetahui informasi selengkapnya tentang flag ini, lihat halaman Resource PostgreSQL.

    Mulai ulang database, lalu login, ubah ke replication_user, buat ekstensi pglogical:

    CREATE EXTENSION pglogical;
       
  9. Buat node pglogical:

    _node_ pglogical mewakili instance PostgreSQL fisik, dan menyimpan detail koneksi untuk instance tersebut.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. Jika Anda memulai dengan database baru, buat database dan tabel yang sama pada instance utama dan replika. Contoh:
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
  11. Jika sudah memiliki database pada instance utama, Anda harus membuat database yang sama pada replika. Untuk melakukannya, ekspor database dari instance utama ke bucket Cloud Storage dan impor ke dalam replika. Pelajari cara Mengekspor data dari Cloud SQL ke file dump SQL di Cloud Storage.
  12. Untuk mendukung replikasi set data yang berbeda ke tujuan yang berbeda, pglogical memiliki konsep set replikasi. Misalnya, untuk menambahkan tabel ke kumpulan replikasi default:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Mengonfigurasi replika eksternal

  1. Membuat pengguna khusus untuk replikasi dan memberikan hak istimewa replikasi:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Jika Anda memulai dengan database baru, gunakan REPLICATION_USER untuk membuat database dan tabel yang sama pada instance utama dan replika. Contoh:
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. Jika Anda melakukan seeding instance replika eksternal dengan file yang Anda ekspor dari instance utama, download file yang diekspor dari Cloud Storage. Jika replika eksternal Anda berada di instance Compute Engine, Anda dapat mendownload file tersebut menggunakan perintah gcloud storage:
    gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Impor file ke dalam database Anda.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Instal pglogical sesuai dengan OS Anda. Misalnya, pada sistem Debian yang menjalankan PostgreSQL versi 13, sudo apt-get install postgresql-13-pglogical.
  6. Login ke database sebagai replication_user dan tetapkan parameter berikut:
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. Buat node pglogical:
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. Buat langganan pglogical:
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. Periksa status langganan:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Jika statusnya muncul sebagai replicating, berarti penyiapan berhasil.
  11. Masukkan beberapa data ke dalam primer dan periksa replika untuk memastikan data juga muncul di sana.

Memecahkan masalah

Lihat Pemecahan masalah pglogical

Langkah selanjutnya