Halaman ini juga memberikan langkah-langkah untuk mereplikasi data antara Google Cloud AlloyDB
dan AlloyDB Omni menggunakan ekstensi pglogical.
Komponen utama pglogical
Komponen utama ekstensi pglogical mencakup hal berikut:
- Node: referensi yang diberikan untuk database dalam cluster PostgreSQL.
Ekstensi
pglogicaldiinstal ke, dan berfungsi untuk sejumlah database dalam cluster, dan masing-masing bertindak sebagai node pglogical yang berbeda. Setiap node dapat berupa penyedia yang juga dikenal sebagai sumber replikasi atau pelanggan yang juga dikenal sebagai target replikasi, atau keduanya secara bersamaan. Hanya satu node yang diizinkan per database. - Kumpulan replikasi: ditentukan dalam database penyedia sebagai pengelompokan logis
tabel dan urutan yang akan dimigrasikan, serta pernyataan SQL seperti
INSERT, UPDATE, DELETE, TRUNCATEyang perlu direplikasi. Anda dapat menetapkan tabel ke lebih dari satu kumpulan replikasi. Secara default, tiga kumpulan replikasi yang telah dikonfigurasi sebelumnya sepertidefault,default_insert_only, danddl_sqldisediakan, dan Anda dapat menambahkan sejumlah kumpulan replikasi tambahan untuk memenuhi kebutuhan Anda. - Langganan: memberikan detail perubahan yang direplikasi dari database
penyedia dan perubahan yang direplikasi dari database penyedia, di database
pelanggan. Langganan menentukan database penyedia melalui string koneksi, dan secara opsional, kumpulan replikasi mana dari penyedia tersebut yang harus disalin. Selain itu, Anda juga dapat menentukan apakah akan menggunakan
apply delaysaat membuat langganan.
Dalam deployment ini, layanan Google Cloud AlloyDB adalah penyedia dan AlloyDB Omni lokal adalah pelanggan. Perhatikan bahwa konfigurasi yang berlawanan juga dapat dilakukan.
Metode autentikasi yang didukung
Anda harus mempertimbangkan jaringan dan keamanan antara node replikasi sebelum menerapkan ekstensi pglogical di AlloyDB Omni.
Dua metode autentikasi utama
yang digunakan dengan ekstensi pglogical adalah metode autentikasi sandi dan kepercayaan.
Metode autentikasi yang direkomendasikan adalah autentikasi kepercayaan karena dalam metode autentikasi sandi, sandi disimpan dalam format teks biasa di tabel database yang dimiliki oleh pglogical. Sandi ini terlihat dalam
teks biasa oleh siapa saja yang memiliki izin database untuk membuat kueri tabel ini, dalam cadangan non-biner,
dan dalam file log PostgreSQL.
Jika menggunakan metode autentikasi kepercayaan, Anda harus membuat entri tertentu dalam file autentikasi berbasis host, pg_hba.conf untuk keamanan maksimum. Anda dapat membatasi akses dengan menentukan database target, hanya mengizinkan opsi replikasi atau database tertentu, pengguna replikasi, dan hanya dari alamat IP tertentu pelanggan.
Sebelum memulai
Anda dapat menginstal pglogical sebagai ekstensi dalam database tertentu.
Sebelum menerapkan ekstensi pglogical di AlloyDB Omni, pastikan Anda memenuhi persyaratan sistem berikut:
- ClusterA Google Cloud AlloyDB, dan akses baca/tulis ke instance utama sebagai Admin Cloud AlloyDB. Untuk mengetahui petunjuk cara menyediakan cluster Google Cloud AlloyDB, lihat Membuat dan menghubungkan ke database.
- Server AlloyDB Omni, diinstal dan dikonfigurasi. Untuk mengetahui petunjuk cara menginstal AlloyDB Omni, lihat Menginstal AlloyDB Omni.
- Alamat IP untuk instance utama AlloyDB Google Cloud dan server host AlloyDB Omni.
- Jaringan yang dibuat dan diamankan antara Google Cloud AlloyDB dan server host AlloyDB Omni. Konektivitas TCP pada port PostgreSQL standar 5432 diperlukan.
Menyesuaikan parameter pada penyedia Google Cloud AlloyDB
Ekstensi pglogical memerlukan serangkaian penyesuaian parameter minimal pada
Google Cloud cluster penyedia AlloyDB. Anda harus menetapkan parameter
wal_level ke logical, dan menambahkan pglogical ke parameter shared_preload_libraries
dalam file postgresql.conf.
cp postgresql.conf postgresql.baksed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.confsed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.confsed -r -i "s|',|'|" postgresql.conf
Di layanan Google Cloud AlloyDB, Anda dapat menyesuaikan parameter dengan menetapkan flag cluster yang sesuai.
Anda harus menyesuaikan parameter untuk flag Google Cloud AlloyDB berikut:
alloydb.enable_pglogical = onalloydb.logical_decoding = on
Untuk mengetahui informasi tentang cara menetapkan flag database di Google Cloud AlloyDB, lihat Mengonfigurasi flag database instance.
Untuk parameter database node penyedia lain yang diperlukan, Anda harus menetapkan nilai default Google Cloud AlloyDB sebagai berikut:
max_worker_processes: satu per database penyedia dan setidaknya 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 keonjika resolusi konflik pembaruan terakhir atau pertama diperlukan.listen_addresses: harus menyertakan alamat IP AlloyDB Omni atau menyebutkan melalui blok CIDR yang mencakup.
Anda dapat memeriksa parameter ini menggunakan alat kueri apa pun, seperti psql.
Menyesuaikan parameter pada cluster pelanggan AlloyDB Omni
Ekstensi pglogical juga memerlukan serangkaian penyesuaian parameter minimal pada pelanggan AlloyDB Omni. Anda harus menambahkan pglogical ke parameter shared_preload_libraries dalam file /var/alloydb/config/postgresql.conf. Jika database apa pun dalam cluster 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'|" /var/alloydb/config/postgresql.confPastikan parameter ditetapkan dengan benar:
grep -iE 'shared_preload_libraries' /var/alloydb/config/postgresql.confMenggunakan AlloyDB Omni CLI, mulai ulang AlloyDB Omni agar perubahan parameter diterapkan:
sudo alloydb database-server stopsudo alloydb database-server startTetapkan 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 keonjika resolusi konflik pembaruan terakhir/pertama diperlukan.
Pastikan semua nilai parameter relevan:
docker exec pg-service 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 AlloyDB Omni /var/alloydb/config/pg_hba.conf.
Tambahkan entri autentikasi kepercayaan untuk server lokal, khusus untuk pengguna
pglogical_replicationbaru, ke file/var/alloydb/config/pg_hba.conf:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a /var/alloydb/config/pg_hba.confPastikan entri sudah benar:
tail -2 /var/alloydb/config/pg_hba.confMenggunakan AlloyDB Omni CLI, mulai ulang AlloyDB Omni agar perubahan autentikasi diterapkan:
sudo alloydb database-server stopsudo alloydb database-server start
Membuat 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 Google Cloud AlloyDB, buat pengguna dan berikan peran
alloydbsuperuser:CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; GRANT alloydbsuperuser TO pglogical_replication;Di cluster pelanggan AlloyDB Omni, buat pengguna dan berikan atribut
replicationdansuperuser:CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
Menambahkan pglogical dan node ke database penyedia Google Cloud AlloyDB
Berikan hak istimewa yang diperlukan.
Anda harus menginstal ekstensi
pglogicaldi setiap database dan memberikan izinusagekepada pengguna database pglogical. Di Google Cloud AlloyDB, Anda harus memberikan hak istimewa pada skemapglogical.Misalnya, jika database Anda adalah
my_test_db, jalankan perintah berikut terhadap Google Cloud database penyediaAlloyDB:\c my_test_db; CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication; -- For Google Cloud AlloyDB we also need to manually grant privileges: GRANT ALL PRIVILEGES ON ALL tables IN SCHEMA pglogical TO pglogical_replication;Buat node
pglogicaluntuk database penyedia.node_namebersifat arbitrer dan stringdsnharus merupakan koneksi TCP yang valid kembali ke database yang sama. Untuk Google Cloud AlloyDB, bagian host daridsnadalah alamat IP yang diberikan untuk instance utama.Untuk Google Cloud AlloyDB, autentikasi kepercayaan tidak diizinkan, dan argumen sandi harus disertakan dalam
dsn. parameter.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');
Membuat tabel dan menambahkannya ke kumpulan replikasi default
Buat tabel dan tambahkan ke kumpulan replikasi default di Google Cloud database penyedia AlloyDB.
Buat tabel pengujian bernama
test_table_1di database penyedia:CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);Berikan
SELECTpada tabel individual atau jalankan perintahGRANT SELECT ON ALL TABLES. Tabel apa pun yang akan menjadi bagian dari kumpulan replikasi harus memiliki izin kueri yang diberikan kepada pengguna replikasi,pglogical_replication.GRANT SELECT ON ALL TABLES IN SCHEMA public TO pglogical_replication;Tambahkan tabel pengujian secara manual ke kumpulan replikasi default. Anda dapat membuat kumpulan replikasi pglogical kustom, atau menggunakan kumpulan replikasi default. Beberapa kumpulan replikasi default seperti
default,default_insert_only, danddl_sqldibuat saat Anda membuat ekstensi. Anda dapat menambahkan tabel dan urutan ke kumpulan 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 tertentu, 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 kumpulan replikasi
default. Jika ada tabel dalam skema yang tidak memiliki kunci utama, Anda dapat menyiapkannya untuk replikasi INSERT saja atau menetapkan kolom yang secara unik mengidentifikasi baris menggunakan fiturREPLICA IDENTITYyang digunakan dengan perintahALTER TABLE. Jika Anda telah menambahkan tabel tersebut ke kumpulan replikasidefaultsecara otomatis menggunakan fungsireplication_set_add_all_tables, Anda harus menghapusnya secara manual dari kumpulan replikasi tersebut dan menambahkannya ke kumpulandefault_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');Secara opsional, jika Anda ingin menambahkan tabel yang baru dibuat ke kumpulan replikasi secara otomatis, tambahkan pemicu
pglogical_assign_repsetseperti yang disarankan di sumberpglogical.
Menyalin database ke cluster pelanggan AlloyDB Omni
Buat cadangan khusus skema database sumber menggunakan utilitas
pg_dump.Jalankan perintah
pg_dumpdari server pelanggan AlloyDB Omni menggunakan alamat IP instance utama Google Cloud AlloyDB.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sqlImpor cadangan ke database pelanggan di server AlloyDB Omni pelanggan:
docker exec -i pg-service psql -h localhost -U postgres < my_test_db.schema-only.sql
Abaikan error seperti alloydbsuperuser not existing. Peran ini khusus untuk
Google Cloud AlloyDB.
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:
docker exec pg-service 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 Google Cloud instance utama database penyedia AlloyDB.
docker exec pg-service 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 exec pg-service 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 dalam hitungan detik.
Pertimbangan deployment pglogical tambahan
Ekstensi pglogical memiliki banyak fitur lanjutan yang tidak dibahas dalam dokumen ini.
Banyak fitur ini berlaku untuk penerapan Anda. Anda dapat mempertimbangkan fitur lanjutan berikut:
- Resolusi konflik
- Replikasi dua arah dan multimaster
- Penyertaan urutan
- Prosedur peralihan dan failover
Langkah berikutnya
- Mereplikasi data antara AlloyDB Omni dan database lainnya
- Peralihan dan failover dengan replikasi
pglogical