pglogical
.
Untuk mengetahui informasi selengkapnya, lihat Tentang ekstensi pglogical
dan
terminologi serta komponen dasar pglogical
.
Metode autentikasi yang didukung
Dua metode autentikasi utama yang digunakan dengan ekstensi pglogical
adalah metode autentikasi sandi dan kepercayaan.
Metode autentikasi yang direkomendasikan adalah metode autentikasi tepercaya. Untuk mengetahui informasi selengkapnya, lihat Metode autentikasi yang didukung.
Sebelum memulai
Anda dapat menginstal pglogical
sebagai ekstensi dalam database tertentu.
Sebelum menerapkan ekstensi pglogical
di AlloyDB Omni, pastikan Anda memenuhi persyaratan sistem berikut:
- Akses ke cluster PostgreSQL non-AlloyDB Anda sebagai
superuser
. - Ekstensi
pglogical
diinstal di cluster PostgreSQL non-AlloyDB Anda. Untuk petunjuk penginstalan khusus rilis dan distribusi, lihat pglogical. - Server AlloyDB Omni diinstal dan dikonfigurasi. Untuk petunjuk cara menginstal AlloyDB Omni, lihat Menginstal AlloyDB Omni.
- Alamat IP untuk cluster PostgreSQL non-AlloyDB dan server host AlloyDB Omni.
- Jaringan yang sudah dibuat dan diamankan antara cluster PostgreSQL non-AlloyDB dan server host AlloyDB Omni. Konektivitas TCP di port PostgreSQL standar 5432 diperlukan.
Menyesuaikan parameter di penyedia non-AlloyDB
Tetapkan parameter
wal_level
kelogical
, dan tambahkanpglogical
ke parametershared_preload_libraries
dalam filepostgresql.conf
. Ekstensipglogical
memerlukan serangkaian penyesuaian parameter minimal pada cluster penyedia non-AlloyDB.cp postgresql.conf postgresql.bak
sed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.conf
sed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.conf
sed -r -i "s|',|'|" postgresql.conf
Pastikan parameter sudah ditetapkan dengan benar:
grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
Mulai ulang cluster non-AlloyDB agar perubahan parameter diterapkan.
Parameter lain mungkin sudah ditetapkan ke nilai yang memadai atau mungkin memerlukan penyesuaian, bergantung pada distribusi dan versi non-AlloyDB Anda.
Periksa parameter berikut:
max_worker_processes
: satu per database penyedia dan minimal satu per node pelanggan. Setidaknya 10 adalah standar untuk parameter ini.max_replication_slots
: satu per node di node penyedia.max_wal_senders
: satu per node di node penyedia.track_commit_timestamp
: ditetapkan keon
jika resolusi konflik diperlukan untuk pembaruan terakhir atau pertama.listen_addresses
: harus menyertakan alamat IP AlloyDB Omni atau menyebutkannya melalui blok CIDR yang mencakupnya.
(Opsional) Jika penyedia non-AlloyDB Anda adalah Amazon RDS atau Aurora, ekstensi pglogical harus diaktifkan dan parameter yang diperlukan disesuaikan melalui penyesuaian
cluster parameter group
.Dalam grup parameter cluster yang ada atau baru, tetapkan parameter berikut:
rds.logical_replication
ke1
max_replication_slots
ke50
max_wal_senders
ke50
max_worker_processes
ke64
shared_preload_libraries
kepg_stat_statements, pglogical
Mulai ulang cluster Amazon RDS atau Aurora agar penyesuaian grup parameter cluster diterapkan.
Pastikan semua nilai parameter relevan:
SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name;
Penyesuaian autentikasi berbasis host ke cluster penyedia non-AlloyDB Omni
pglogical
membuat koneksi TCP lokal ke database penyedia. Oleh karena itu, Anda harus menambahkan alamat IP server host ke file DATA_DIR/pg_hba.conf
AlloyDB Omni, dengan DATA_DIR
adalah jalur sistem file ke direktori data Anda—misalnya, /home/$USER/alloydb-data
.
Tambahkan entri autentikasi tepercaya untuk server lokal, khusus untuk pengguna
pglogical_replication
baru, ke fileDATA_DIR/pg_hba.conf
.Selain itu, node pelanggan harus dapat mengautentikasi node penyedia. Tambahkan alamat IP setiap node pelanggan atau rentang IP blok CIDR yang sesuai ke file
DATA_DIR/pg_hba.conf
:echo -e "# pglogical entries: host all pglogical_replication samehost trust host all pglogical_replication SERVER_IP_ADDRESS/32 trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Ganti
SERVER_IP_ADDRESS
dengan alamat IP instance AlloyDB Omni utama yang akan direplikasi.Pastikan entri sudah benar:
tail -3 DATA_DIR/pg_hba.conf
Mulai ulang cluster non-AlloyDB agar perubahan parameter diterapkan.
Menyesuaikan parameter ke cluster pelanggan AlloyDB Omni
pglogical
juga memerlukan penyesuaian parameter minimal pada cluster pelanggan
AlloyDB Omni. Anda harus menambahkan pglogical
ke parameter shared_preload_libraries
dalam file DATA_DIR/postgresql.conf
. Jika ada database dalam cluster yang bertindak sebagai database penyedia, lakukan perubahan parameter yang diperlukan untuk database penyedia.
Sesuaikan parameter:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
Pastikan parameter ditetapkan dengan benar:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
Mulai ulang AlloyDB Omni agar perubahan parameter diterapkan:
Docker
docker container restart CONTAINER_NAME
Ganti
CONTAINER_NAME
dengan nama yang Anda tetapkan ke container AlloyDB Omni saat Anda memulainya.Podman
podman container restart CONTAINER_NAME
Ganti
CONTAINER_NAME
dengan nama yang Anda tetapkan ke container AlloyDB Omni saat Anda memulainya.Tetapkan nilai default AlloyDB Omni untuk parameter database penyedia lainnya:
max_worker_processes
: Satu per database penyedia dan satu per node pelanggan.track_commit_timestamp
: Ditetapkan keon
jika resolusi konflik diperlukan untuk pembaruan terakhir/pertama.
Pastikan semua nilai parameter relevan:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "
Penyesuaian autentikasi berbasis host ke cluster pelanggan AlloyDB Omni
pglogical
membuat koneksi TCP lokal ke database pelanggan AlloyDB Omni. Oleh karena itu, Anda harus menambahkan alamat IP server host pelanggan ke file DATA_DIR/pg_hba.conf
AlloyDB Omni.
Tambahkan entri autentikasi tepercaya untuk server lokal, khusus untuk pengguna
pglogical_replication
baru, ke fileDATA_DIR/pg_hba.conf
:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Pastikan entri sudah benar:
tail -2 DATA_DIR/pg_hba.conf
Mulai ulang AlloyDB Omni agar perubahan autentikasi diterapkan:
docker container restart CONTAINER_NAME
Buat pengguna pglogical
di cluster penyedia dan pelanggan
Anda harus membuat pengguna baru di cluster penyedia dan pelanggan.
pglogical
mengharuskan pengguna memiliki atribut superuser
dan replication
.
Di cluster penyedia AlloyDB untuk PostgreSQL, buat peran pengguna:
CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
(Opsional) Jika penyedia non-AlloyDB Anda adalah Amazon RDS atau Aurora, maka Anda harus memberikan peran berikut:
GRANT rds_superuser TO replication_user;
Tambahkan pglogical
dan node ke database penyedia non-AlloyDB
Berikan hak istimewa yang diperlukan.
Anda harus menginstal ekstensi
pglogical
di setiap database dan memberikan izinusage
kepada pengguna database pglogical.Misalnya, jika database Anda adalah
my_test_db
, jalankan perintah berikut:CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication;
Buat node
pglogical
untuk database penyedia.node_name
bersifat arbitrer dan stringdsn
harus berupa koneksi TCP yang valid kembali ke database yang sama.Misalnya, untuk database
my_test_db
, jalankan perintah berikut:SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
Buat tabel dan tambahkan ke kumpulan replikasi default
Buat tabel dan tambahkan ke set replikasi default di database penyedia non-AlloyDB.
Buat tabel pengujian bernama
test_table_1
di database penyedia:CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);
Tambahkan tabel pengujian ke set replikasi default secara manual. Anda dapat membuat set replikasi pglogical kustom, atau menggunakan set replikasi default. Beberapa set replikasi default seperti
default
,default_insert_only
, danddl_sql
dibuat saat Anda membuat ekstensi. Anda dapat menambahkan tabel dan urutan ke set replikasi satu per satu, atau sekaligus untuk skema tertentu.-- Add the specified table to the default replication set: SELECT pglogical.replication_set_add_table(set_name := 'default', relation := 'test_table_1', synchronize_data := TRUE); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table;
(Opsional) Tambahkan semua tabel dalam skema yang ditentukan, seperti
public
:-- Add all "public" schema tables to the default replication set: SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table; -- Add all "public" schema sequences to the default replication: SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']); -- Check which sequences have been added to all replication sets: SELECT * FROM pglogical.replication_set_seq;
Hapus tabel dari set replikasi
default
. Jika ada tabel dalam skema yang tidak memiliki kunci utama atau identitas replika, hanya pernyataanINSERT
yang dapat direplikasi. Jika Anda telah menambahkan tabel tersebut ke set replikasidefault
secara otomatis melalui fungsireplication_set_add_all_tables
, Anda harus menghapusnya dari set replikasi tersebut secara manual dan menambahkannya ke setdefault_insert_only
.-- Remove the table from the **default** replication set: SELECT pglogical.replication_set_remove_table(set_name := 'default', relation := 'test_table_2'); -- Manually add to the **default_insert_only** replication set: SELECT pglogical.replication_set_add_table(set_name := 'default_insert_only', relation := 'test_table_2');
Jika ingin, Anda dapat menambahkan tabel yang baru dibuat ke set replikasi secara otomatis dengan menambahkan pemicu
pglogical_assign_repset
seperti yang disarankan di sumberpglogical
.
Menyalin database ke cluster pelanggan AlloyDB Omni
Buat cadangan hanya skema database sumber menggunakan utilitas
pg_dump
.Jalankan perintah
pg_dump
dari server pelanggan AlloyDB Omni Anda menggunakan alamat IP atau endpoint server non-AlloyDB Anda.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
Impor cadangan ke database pelanggan di server AlloyDB Omni pelanggan:
Docker
docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Podman
podman exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Tindakan ini akan membuat database dan skema, tanpa data baris apa pun. Data
baris direplikasi oleh ekstensi pglogical
. Salin atau buat ulang pengguna atau peran lain yang diperlukan secara manual.
Membuat node dan langganan di database pelanggan AlloyDB Omni
Buat node di database pelanggan AlloyDB Omni. Tambahkan sandi ke
dsn
Anda jika Anda memilih untuk menggunakan autentikasi sandi.Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "
Buat langganan di database pelanggan, yang mengarah kembali ke database penyedia di server penyedia AlloyDB Omni.
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "
Dalam beberapa detik atau menit, data awal akan direplikasi dari penyedia ke pelanggan:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT * FROM test_table_1 ORDER BY 1; "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT * FROM test_table_1 ORDER BY 1; "
Baris tambahan yang ditambahkan ke database penyedia juga direplikasi secara real time dalam hitungan detik.
Pertimbangan tambahan untuk deployment pglogical
Ekstensi pglogical
memiliki banyak fitur lanjutan yang tidak dibahas dalam dokumen ini. Banyak fitur ini dapat diterapkan pada implementasi Anda. Anda dapat
mempertimbangkan fitur lanjutan berikut:
- Penyelesaian konflik
- Replikasi dua arah dan multimaster
- Penyertaan urutan
- Prosedur peralihan dan failover
Langkah berikutnya
- Mereplikasi data antara AlloyDB untuk PostgreSQL dan AlloyDB Omni
- Switchover dan failover dengan replikasi
pglogical