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
- Buka halaman Instance Cloud SQL di konsol Google Cloud.
- Aktifkan akses pada instance utama untuk alamat IP replika eksternal.
Untuk informasi tentang cara mengaktifkan akses IP, lihat Mengonfigurasi akses untuk koneksi IP.
- Catat alamat IP publik dan alamat IP publik keluar dari instance utama untuk digunakan nanti. Anda dapat menemukan nilai ini di halaman Overview instance.
- Klik ikon Cloud Shell di sudut kanan atas.
- Pada layar perintah Cloud Shell, gunakan klien PostgreSQL bawaan untuk
terhubung ke instance utama Anda:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Masukkan sandi root Anda. Anda akan melihat perintah postgres.
- Buat pengguna PostgreSQL dengan atribut
REPLICATION
.CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- 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;
- 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' );
- 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;
- 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.
-
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
- Membuat pengguna khusus untuk replikasi dan memberikan hak istimewa replikasi:
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- 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');
- 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
gsutil
:gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Impor file ke dalam database Anda.
psql --user=postgres --password < DUMP_FILE_NAME.
- Instal
pglogical
sesuai dengan OS Anda. Misalnya, pada sistem Debian yang menjalankan PostgreSQL versi 13,sudo apt-get install postgresql-13-pglogical
. - 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 # executeCREATE 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.
- 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' );
- 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' );
- Periksa status langganan:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Jika statusnya muncul sebagai
replicating
, berarti penyiapan berhasil. - Masukkan beberapa data ke dalam primer dan periksa replika untuk memastikan data juga muncul di sana.
Memecahkan masalah
Lihat Pemecahan masalah pglogicalLangkah selanjutnya
- Pelajari cara mengelola replika.
- Pelajari persyaratan dan praktik terbaik untuk mengonfigurasi replika eksternal.
- Pelajari lebih lanjut replikasi PostgreSQL.
- Pelajari opsi replikasi lebih lanjut.
- Pelajari lebih lanjut tentang memeriksa status replikasi.
- Pelajari lebih lanjut tentang mereplikasi dari server eksternal.