Ringkasan
Database Migration Service mendukung migrasi berkelanjutan dari database sumber ke database tujuan Cloud SQL.
Database sumber yang didukung untuk PostgreSQL meliputi:
- Amazon RDS 9.6.10+, 10.5+, 11.1+, 12, 13, 14, 15, 16, 17.
- Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14.6+, 15.2+, 16, 17.
- PostgreSQL yang dikelola sendiri (di lokasi atau di VM cloud apa pun yang Anda kontrol sepenuhnya) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17.
- Cloud SQL untuk PostgreSQL 9.6, 10, 11, 12, 13, 14, 15, 16, 17.
- Microsoft Azure Database untuk Server Fleksibel PostgreSQL: 11+
Mengonfigurasi sumber memerlukan konfigurasi instance sumber dan database sumber yang mendasarinya.
Mengonfigurasi instance sumber
Untuk mengonfigurasi instance sumber, ikuti langkah-langkah berikut:
- Untuk sumber Cloud SQL: Jika Anda bermigrasi dari instance Cloud SQL yang menggunakan koneksi IP Pribadi ke instance Cloud SQL yang menggunakan rentang IP alamat non-RFC 1918, tambahkan rentang non-RFC 1918 ke konfigurasi jaringan instance Cloud SQL sumber Anda. Lihat Mengonfigurasi jaringan yang diizinkan dalam dokumentasi Cloud SQL.
- Instance sumber Anda harus menyertakan database
postgres
. Jika Anda tidak memiliki database ini, buat database. Instal paket
pglogical
pada instance sumber dan pastikan paket tersebut disertakan dalam variabelshared_preload_libraries
. Lihat Menginstal paketpglogical
pada instance sumber untuk lingkungan Anda.Verifikasi ekstensi di instance sumber Anda. Database Migration Service tidak memigrasikan ekstensi yang tidak didukung oleh Cloud SQL. Kehadiran ekstensi ini tidak memblokir migrasi, tetapi untuk memastikan proses migrasi yang lancar, pastikan objek atau aplikasi Anda tidak mereferensikan ekstensi yang tidak didukung. Sebaiknya hapus ekstensi dan referensi ini dari database sumber sebelum melanjutkan.
Untuk sumber yang menggunakan ekstensi
pg_cron
: Ekstensipg_cron
(atau setelancron
apa pun yang terkait dengan ekstensi) tidak dimigrasikan oleh Database Migration Service, tetapi didukung di tujuan Cloud SQL untuk PostgreSQL. Jika menggunakan ekstensipg_cron
di database sumber, Anda dapat menginstalnya kembali di instance tujuan setelah migrasi selesai.
Mengonfigurasi database sumber
Database Migration Service memigrasikan semua database pada instance sumber Anda, kecuali database berikut:
- Untuk sumber PostgreSQL lokal: database template
template0
dantemplate1
- Untuk sumber Amazon RDS:
template0
,template1
, danrdsadmin
- Untuk sumber Cloud SQL: database template
template0
dantemplate1
- Untuk sumber Microsoft Azure:
azure_maintenance
,azure_sys
,template0
,template1
Lakukan hal berikut pada setiap database dalam instance sumber yang tidak disebutkan di atas:
Khusus untuk sumber PostgreSQL versi 9.4, instal ekstensi
pglogical
berikut di setiap database di instance sumber Anda:CREATE EXTENSION IF NOT EXISTS pglogical;
CREATE EXTENSION IF NOT EXISTS pglogical_origin;
Untuk semua versi lainnya, hanya instal ekstensi
pglogical
di setiap database di instance sumber Anda:CREATE EXTENSION IF NOT EXISTS pglogical
.Untuk tabel yang tidak memiliki kunci utama, Database Migration Service mendukung migrasi snapshot awal dan pernyataan
INSERT
selama fase CDC. Anda harus memigrasikan pernyataanUPDATE
danDELETE
secara manual.USER yang Anda gunakan untuk terhubung ke instance sumber (yang akan dikonfigurasi sebagai pengguna di halaman Connection Profiles) harus memiliki hak istimewa tertentu di setiap database yang dimigrasikan, serta database
postgres
default. Anda dapat membuat pengguna baru atau menggunakan kembali pengguna yang sudah ada. Untuk menetapkan hak istimewa ini, hubungkan ke instance dan jalankan perintah berikut:GRANT USAGE on SCHEMA SCHEMA to USER
di semua skema (selain skema informasi dan skema yang dimulai dengan "pg_") di setiap database yang akan dimigrasikan.GRANT USAGE on SCHEMA pglogical to PUBLIC;
di setiap database yang akan dimigrasikan.GRANT SELECT on ALL TABLES in SCHEMA pglogical to USER
di semua database untuk mendapatkan informasi replikasi dari database sumber.GRANT SELECT on ALL TABLES in SCHEMA SCHEMA to USER
di semua skema (selain skema informasi dan skema yang dimulai dengan "pg_") di setiap database yang akan dimigrasikan.GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA to USER
di semua skema (selain skema informasi dan skema yang dimulai dengan "pg_") di setiap database yang akan dimigrasikan.- Jika sumber Anda adalah Amazon RDS, jalankan perintah berikut:
GRANT rds_replication to USER
- Jika sumber Anda bukan Amazon RDS, jalankan perintah berikut:
- Peran
ALTER USER USER with REPLICATION
- Peran
Menginstal paket pglogical
di instance sumber
Bagian ini menjelaskan cara mengonfigurasi paket pglogical
dan
parameter yang berlaku, bergantung pada instance sumber Anda.
PostgreSQL di lokasi atau yang dikelola sendiri
- Instal paket pglogical di server.
- Hubungkan ke instance dan tetapkan parameter berikut, sesuai kebutuhan:
shared_preload_libraries
harus menyertakanpglogical
.Untuk menetapkan parameter ini, jalankan perintah
ALTER SYSTEM SET shared_preload_libraries = 'pglogical,[any other libraries in your instance]';
.- Tetapkan
wal_level
kelogical
.Untuk menetapkan parameter ini, jalankan perintah
ALTER SYSTEM SET wal_level = 'logical';
. Tetapkan
wal_sender_timeout
ke0
.Untuk menetapkan parameter ini, jalankan perintah
ALTER SYSTEM SET wal_sender_timeout = 0;
, dengan0
menonaktifkan mekanisme waktu tunggu yang digunakan untuk menghentikan koneksi replikasi tidak aktif.max_replication_slots menentukan jumlah maksimum slot replikasi yang dapat didukung instance sumber. Nilai ini harus disetel setidaknya ke jumlah langganan yang diharapkan akan terhubung, ditambah beberapa cadangan untuk sinkronisasi tabel.
Database Migration Service memerlukan satu slot untuk setiap database yang dimigrasikan (yaitu semua database dalam instance sumber).
Misalnya, jika ada 5 database di instance sumber dan jika ada 2 tugas migrasi yang dibuat untuk sumber tersebut, jumlah slot replikasi harus minimal 5 * 2 = 10, ditambah jumlah slot replikasi yang sudah Anda gunakan. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah slot replikasi dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
Untuk menetapkan parameter ini, jalankan perintah
ALTER SYSTEM SET max_replication_slots = #;
, dengan # mewakili jumlah maksimum slot replikasi.max_wal_senders harus disetel minimal ke jumlah yang sama dengan
max_replication_slots
, ditambah jumlah pengirim yang sudah digunakan di instance Anda.Misalnya, jika parameter
Untuk menetapkan parameter ini, jalankan perintahmax_replication_slots
ditetapkan ke10
, dan Anda sudah menggunakan 2 pengirim, jumlah proses pengirim WAL yang berjalan pada saat yang sama adalah 10 + 2 = 12. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah pengirim dan verifikasi konfigurasi Anda dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.ALTER SYSTEM SET max_wal_senders = #;
, dengan # mewakili jumlah proses pengirim WAL yang berjalan secara bersamaan.- max_worker_processes harus disetel minimal ke jumlah database yang sama dengan yang akan dimigrasikan oleh Database Migration Service (yaitu semua database dalam instance sumber), ditambah jumlah
max_worker_processes
yang sudah digunakan di instance Anda.Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah proses pekerja dan verifikasi konfigurasi Anda dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
Untuk menetapkan parameter ini, jalankan perintah
ALTER SYSTEM SET max_worker_processes = #;
, dengan # mewakili jumlah database yang akan dimigrasikan.
- Untuk menerapkan perubahan konfigurasi, mulai ulang instance sumber.
Microsoft Azure Database untuk PostgreSQL
Untuk mengonfigurasi sumber Microsoft Azure Database for PostgreSQL, ikuti langkah-langkah berikut:
- Instal paket pglogical di server Anda.
Khusus untuk sumber PostgreSQL versi 9.4, instal ekstensi
pglogical
berikut di setiap database di instance sumber Anda:CREATE EXTENSION IF NOT EXISTS pglogical;
CREATE EXTENSION IF NOT EXISTS pglogical_origin;
Untuk semua versi lainnya, instal ekstensi
pglogical
di setiap database di instance sumber Anda:CREATE EXTENSION IF NOT EXISTS pglogical
.Konfigurasikan parameter server yang diperlukan di sumber Anda menggunakan portal Microsoft Azure. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi parameter server di Azure Database untuk PostgreSQL dan Parameter server di Azure Database untuk PostgreSQL dalam dokumentasi Microsoft.
Konfigurasikan parameter berikut:
- Tetapkan
shared_preload_libraries
untuk menyertakanpglogical
. - Tetapkan
azure.extensions
untuk menyertakanpglogical
. - Tetapkan
wal_level
kelogical
. Tetapkan
max_replication_slots
setidaknya ke jumlah langganan yang diharapkan akan terhubung, ditambah beberapa cadangan untuk sinkronisasi tabel.Parameter
max_replication_slots
menentukan jumlah maksimum slot replikasi yang dapat didukung instance sumber.Database Migration Service memerlukan satu slot untuk setiap database yang dimigrasikan (yaitu semua database dalam instance sumber).
Misalnya, jika ada 5 database di instance sumber dan jika ada 2 tugas migrasi yang dibuat untuk sumber tersebut, jumlah slot replikasi harus minimal 5 * 2 = 10, ditambah jumlah slot replikasi yang sudah Anda gunakan. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah slot replikasi dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
Tetapkan
max_wal_senders
agar setidaknya sama denganmax_replication_slots
, ditambah jumlah pengirim yang sudah digunakan di instance Anda.Misalnya, jika parameter
max_replication_slots
ditetapkan ke10
, dan Anda sudah menggunakan 2 pengirim, jumlah proses pengirim WAL yang berjalan pada saat yang sama adalah 10 + 2 = 12.Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah pengirim dan verifikasi konfigurasi Anda dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
Tetapkan
max_worker_processes
ke setidaknya jumlah database yang sama dengan yang akan dimigrasikan oleh Database Migration Service (yaitu semua database dalam instance sumber), ditambah jumlahmax_worker_processes
yang sudah digunakan di instance Anda.Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah proses pekerja dan verifikasi konfigurasi Anda dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
- Tetapkan
Periksa nilai setelan
require_secure_transport
Anda.Secara default, database Microsoft Azure memerlukan enkripsi SSL/TLS untuk semua koneksi masuk. Bergantung pada nilai
require_secure_transport
, gunakan salah satu setelan enkripsi berikut saat Anda membuat profil koneksi sumber:- Jika
require_secure_transport
ditetapkan keon
, pilih Dasar, TLS, atau mTLS. - Jika
require_secure_transport
ditetapkan keoff
, pilih None.
- Jika
- Untuk menerapkan perubahan konfigurasi, mulai ulang instance sumber.
Amazon RDS PostgreSQL
Instal ekstensi
pglogical
di database sumber Anda.Untuk informasi selengkapnya, lihat Menggunakan ekstensi PostgreSQL dengan Amazon RDS for PostgreSQL dalam dokumentasi Amazon RDS.
Konfigurasikan instance sumber menggunakan grup parameter.
- Buat grup parameter baru. Di grup parameter:
- Pastikan parameter
shared_preload_libraries
menyertakanpglogical
. - Tetapkan parameter
rds.logical_replication
ke 1. Tindakan ini akan mengaktifkan log WAL di tingkat 'logika'. - Tetapkan parameter
wal_sender_timeout
ke 0. Tindakan ini akan menonaktifkan mekanisme waktu tunggu yang digunakan untuk menghentikan koneksi replikasi tidak aktif. Tetapkan parameter max_replication_slots. Parameter ini menentukan jumlah maksimum slot replikasi yang dapat didukung instance sumber. Nilai ini harus disetel setidaknya ke jumlah langganan yang diharapkan akan terhubung, ditambah beberapa cadangan untuk sinkronisasi tabel.
Database Migration Service memerlukan satu slot untuk setiap database yang dimigrasikan (yaitu semua database dalam instance sumber).
Misalnya, jika ada 5 database di instance sumber dan jika akan ada 2 tugas migrasi yang dibuat untuk sumber tersebut, jumlah slot replikasi harus minimal 5 * 2 = 10, ditambah jumlah slot replikasi yang sudah Anda gunakan. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah slot replikasi dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat Anda membuat tugas migrasi.
Nilai default untuk parameter ini adalah 10.
Tetapkan parameter max_wal_senders setidaknya sama dengan
max_replication_slots
, ditambah jumlah pengirim yang sudah digunakan di instance Anda.Misalnya, jika parameter
max_replication_slots
ditetapkan ke10
, dan Anda sudah menggunakan 2 pengirim, jumlah proses pengirim WAL yang berjalan pada saat yang sama adalah 10 + 2 = 12. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah pengirim dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.Nilai default untuk parameter ini adalah 10.
Tetapkan parameter sumber max_worker_processes setidaknya ke jumlah database yang sama dengan yang akan dimigrasikan oleh Database Migration Service (yaitu semua database dalam instance sumber), ditambah jumlah
max_worker_processes
yang sudah digunakan di instance Anda. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah proses pekerja dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.Nilai default untuk parameter ini adalah 8.
Lampirkan grup parameter ke instance. Jika membuat instance baru, Anda dapat menemukan opsi ini di bagian Konfigurasi Tambahan.
Jika tidak, ubah instance untuk melampirkan grup parameter.
Untuk menerapkan perubahan konfigurasi, mulai ulang instance sumber.
Cloud SQL untuk PostgreSQL
Aktifkan replikasi dan decoding logis untuk database sumber dengan mengonfigurasi flag berikut:
- Tetapkan flag
cloudsql.logical_decoding
dancloudsql.enable_pglogical
keon
. Tetapkan flag max_replication_slots. Flag ini menentukan jumlah maksimum slot replikasi yang dapat didukung oleh instance sumber. Nilai ini harus disetel setidaknya ke jumlah langganan yang diharapkan akan terhubung, ditambah beberapa cadangan untuk sinkronisasi tabel.
Database Migration Service memerlukan satu slot untuk setiap database yang dimigrasikan (yaitu semua database dalam instance sumber).
Misalnya, jika ada 5 database di instance sumber dan jika akan ada 2 tugas migrasi yang dibuat untuk sumber tersebut, jumlah slot replikasi harus minimal 5 * 2 = 10, ditambah jumlah slot replikasi yang sudah Anda gunakan. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah slot replikasi dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.
Nilai default untuk flag ini adalah 10.
Tetapkan flag max_wal_senders agar setidaknya sama dengan
max_replication_slots
, ditambah jumlah pengirim yang sudah digunakan di instance Anda.Misalnya, jika flag
max_replication_slots
ditetapkan ke10
, dan Anda sudah menggunakan 2 pengirim, jumlah proses pengirim WAL yang berjalan secara bersamaan adalah 10 + 2 = 12. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah pengirim dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.Nilai default untuk flag ini adalah 10.
Tetapkan flag sumber max_worker_processes ke setidaknya jumlah database yang sama dengan yang akan dimigrasikan oleh Database Migration Service (yaitu semua database dalam instance sumber), ditambah jumlah
max_worker_processes
yang sudah digunakan di instance Anda. Jika Anda berencana menggunakan setelan paralelisme dump data yang disesuaikan, pastikan untuk meningkatkan jumlah proses pekerja dan memverifikasi konfigurasi dengan menjalankan pengujian tugas migrasi saat membuat tugas migrasi.Nilai default untuk flag ini adalah 8.
Tetapkan parameter
wal_sender_timeout
ke0
:ALTER SYSTEM SET wal_sender_timeout = 0;
Nilai
0
menonaktifkan mekanisme waktu tunggu yang menghentikan koneksi replikasi tidak aktif.- Mulai ulang instance sumber sehingga perubahan konfigurasi yang Anda buat pada flag dapat diterapkan.
Mengaktifkan pemantauan penundaan replikasi untuk versi PostgreSQL sebelum 9.6
Jika Anda bermigrasi dari versi PostgreSQL yang lebih lama dari 9.6, metrik penundaan replikasi tidak tersedia secara default. Alternatif berikut memungkinkan Anda melacak metrik ini untuk memastikan periode nonaktif minimal saat mempromosikan database:
Opsi 1: Aktifkan Database Migration Service untuk melacak penundaan replikasi dengan memberikan akses ke kueri tertentu. Dengan menggunakan pengguna dengan hak istimewa
SUPERUSER
, lakukan hal berikut:Tentukan fungsi berikut untuk memungkinkan Database Migration Service mengkueri penundaan replikasi.
CREATE OR REPLACE FUNCTION pg_stat_replication_user() RETURNS TABLE ( pid integer , usesysid oid , username name , application_name text , client_addr inet , client_hostname text , client_port integer , backend_start timestamp with time zone , backend_xmin xid , state text , sent_location pg_lsn , write_location pg_lsn , flush_location pg_lsn , replay_location pg_lsn , sync_priority integer , sync_state text ) LANGUAGE SQL SECURITY DEFINER AS $$ SELECT * FROM pg_catalog.pg_stat_replication; $$;
Berikan izin
EXECUTE
ke USER dengan menjalankan perintah berikut:REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;
GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
Opsi 2: Memberikan hak istimewa
SUPERUSER
secara langsung ke USER yang digunakan untuk terhubung ke instance sumber. Tindakan ini akan memungkinkan Database Migration Service membaca penundaan replikasi secara langsung.Opsi 3: Lacak penundaan replikasi secara independen menggunakan kueri berikut:
SELECT current_timestamp, application_name, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag FROM pg_stat_replication WHERE application_name like 'cloudsql%';
Dalam opsi ini, Layanan Migrasi Database tidak akan mencerminkan metrik penundaan replikasi dalam grafik atau respons API.