Topik ini menjelaskan laporan penilaian migrasi cloud dari instance PostgreSQL yang dikelola sendiri ke instance ApsaraDB RDS for PostgreSQL. Topik ini juga mencakup kesalahan umum dalam laporan dan solusi untuk mengatasinya.
Jika status laporan penilaian migrasi cloud adalah failure, Anda dapat mengklik View report di kolom operation untuk melihat detail laporan. Laporan tersebut mencakup informasi berikut:
Periksa rds kosong (Periksa apakah database dalam instance ApsaraDB RDS for PostgreSQL kosong)
Periksa versi sumber (Periksa versi mesin utama instance PostgreSQL yang dikelola sendiri)
Periksa versi glibc sumber (Periksa versi GNU C Library instance PostgreSQL yang dikelola sendiri)
Periksa ukuran wal keep (Periksa nilai parameter wal_keep_size)
Periksa parameter spesifikasi (Periksa pengaturan parameter terkait spesifikasi)
Periksa katalog sistem Postgres (Periksa katalog sistem instance ApsaraDB for PostgreSQL)
Periksa izin peran yang disimpan (Periksa izin peran yang disimpan)
Untuk informasi lebih lanjut tentang migrasi cloud ke instance ApsaraDB RDS for PostgreSQL, lihat Gunakan fitur migrasi cloud untuk instance ApsaraDB RDS for PostgreSQL.
Periksa rds kosong (Periksa apakah database dalam instance ApsaraDB RDS for PostgreSQL kosong)
Check item:
Periksa database rds
Common error:
error:postgres tidak kosong, periksa apakah ada tabel yang adaDescription:
Database telah dibuat dalam instance ApsaraDB RDS for PostgreSQL, dan database tersebut berisi data.
Solution:
Hapus semua database kecuali database template0, template1, dan postgres dari instance ApsaraDB RDS for PostgreSQL. Selain itu, hapus semua tabel kecuali tabel ha_health_check dari database postgres.
Periksa konektivitas sumber (Periksa apakah komunikasi antara instance PostgreSQL yang dikelola sendiri dan instance ApsaraDB RDS for PostgreSQL normal)
Check item 1:
Periksa ip dapat dihubungi
Common error:
error:XX.XX.XX.XX tidak dapat dijangkauDescription:
Alamat IP server tempat instance PostgreSQL yang dikelola sendiri berada atau alamat IP server DNS tidak dapat diakses.
Solution:
Jika instance PostgreSQL yang dikelola sendiri berada pada instance Elastic Compute Service (ECS), masukkan private IP address instance ECS saat Anda mengonfigurasi informasi database sumber. Untuk informasi lebih lanjut tentang cara mendapatkan alamat IP privat instance ECS, lihat Lihat alamat IP.
Jika instance PostgreSQL yang dikelola sendiri berada di pusat data, masukkan alamat IP server DNS host tempat instance PostgreSQL yang dikelola sendiri berada saat Anda mengonfigurasi informasi database sumber.
Check item 2:
Periksa port dapat dihubungi
Common error:
error:5432 tidak dapat dijangkauDescription:
Instance PostgreSQL yang dikelola sendiri tidak dikonfigurasi untuk mendengarkan koneksi jarak jauh.
Firewall yang dikonfigurasi untuk instance PostgreSQL yang dikelola sendiri tidak mengizinkan akses ke port instance PostgreSQL yang dikelola sendiri.
Solution:
Tambahkan konten berikut ke file postgresql.conf instance PostgreSQL yang dikelola sendiri:
listen_addresses = '*'. Untuk informasi lebih lanjut, lihat Konfigurasikan file postgresql.conf instance PostgreSQL yang dikelola sendiri.Konfigurasikan firewall untuk mengizinkan akses ke port 5432. Atau, nonaktifkan firewall sebelum Anda memulai migrasi cloud. Untuk informasi lebih lanjut, lihat Konfigurasikan firewall server.
Check item 3:
Periksa database dapat dihubungkan
Common error:
error:tidak dapat terhubung ke database sumber oleh migratetest:123456Description:
Kata sandi yang Anda masukkan salah.
Konfigurasi dalam file pg_hba.conf instance PostgreSQL yang dikelola sendiri salah.
Solution:
Periksa apakah Anda dapat terhubung ke instance PostgreSQL yang dikelola sendiri menggunakan nama pengguna dan kata sandi yang Anda masukkan. Jika koneksi gagal, Anda dapat memperbarui kata sandi. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memperbarui kata sandi akun migratetest:
ALTER USER migratetest WITH PASSWORD '123456';Ubah file pg_hba.conf instance PostgreSQL yang dikelola sendiri. Misalnya, jika Anda menggunakan akun migratetest, tambahkan konten berikut ke file:
host all migratetest <Blok CIDR VPC tempat instance ApsaraDB RDS for PostgreSQL berada> md5CatatanUntuk informasi lebih lanjut, lihat Perbarui file pg_hba.conf.
Check item 4:
Periksa hak replikasi akun
Common error:
error:migratetest tidak memiliki hak replikasiDescription:
Akun yang Anda gunakan tidak memiliki izin REPLICATION.
Konfigurasi dalam file pg_hba.conf instance PostgreSQL yang dikelola sendiri salah.
Solution:
Berikan izin REPLICATION kepada akun yang Anda gunakan. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin REPLICATION kepada akun migratetest:
ALTER ROLE migratetest REPLICATION;Ubah file pg_hba.conf instance PostgreSQL yang dikelola sendiri. Misalnya, jika Anda menggunakan akun migratetest, tambahkan konten berikut ke file:
host replication migratetest <Blok CIDR VPC tempat instance ApsaraDB RDS for PostgreSQL berada> md5CatatanUntuk informasi lebih lanjut, lihat Perbarui file pg_hba.conf.
Check item 5:
Periksa hak createrole akun
Common error:
error:migratetest tidak memiliki hak createroleDescription:
Akun yang Anda gunakan tidak memiliki izin CREATEROLE.
Solution:
Berikan izin CREATEROLE kepada akun yang Anda gunakan. Misalnya, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin CREATEROLE kepada akun migratetest:
ALTER ROLE migratetest CREATEROLE;Check item 6:
Periksa hak monitor akun
Common error:
error:migratetest harus menjadi anggota pg_monitor untuk memantau status replikasiDescription:
Akun yang Anda gunakan tidak memiliki izin pg_monitor. Izin pg_monitor digunakan untuk menanyakan tampilan sistem seperti pg_stat_replication dan pg_stat_wal_receiver serta mendapatkan informasi tentang tautan replikasi.
CatatanIzin pg_monitor digunakan untuk menanyakan tampilan sistem seperti pg_stat_replication dan pg_stat_wal_receiver, serta mendapatkan informasi tentang tautan replikasi.
Solution:
Berikan izin pg_monitor kepada akun yang Anda gunakan. Sebagai contoh, jika Anda menggunakan akun migratetest, jalankan perintah berikut untuk memberikan izin pg_monitor kepada akun tersebut:
GRANT pg_monitor TO migratetest;
Periksa versi sumber (Periksa versi mesin utama instance PostgreSQL yang dikelola sendiri)
Check item:
Periksa konsistensi versi utama.
Common error:
error:versi tidak cocok, versi sumber:10, versi saat ini:13.0Description:
Instance PostgreSQL yang dikelola sendiri dan instance ApsaraDB RDS for PostgreSQL menjalankan versi mesin utama yang berbeda.
Solution:
Beli instance ApsaraDB RDS for PostgreSQL dengan versi mesin utama yang sama seperti instance PostgreSQL yang dikelola sendiri.
Periksa versi glibc sumber (Periksa versi GNU C Library instance PostgreSQL yang dikelola sendiri)
Check item:
Periksa versi glibc sumber kompatibel
Common error:
warning:versi glibc sumber tidak kompatibel dengan rds pgDescription:
Versi GNU C Library pada instance PostgreSQL yang dikelola sendiri tidak kompatibel dengan versi GNU C Library pada instance ApsaraDB RDS for PostgreSQL.
GNU C Library versi 2.28 menggunakan beberapa collation berbeda untuk mengurutkan set karakter dalam pengkodean UTF-8. Jika versi GNU C Library pada instance PostgreSQL yang dikelola sendiri tidak kompatibel dengan versi GNU C Library pada instance ApsaraDB RDS for PostgreSQL, set karakter dalam instance ApsaraDB RDS for PostgreSQL mungkin berada dalam urutan yang tidak terduga setelah migrasi cloud.
Solution:
Ikuti langkah-langkah berikut:
Periksa collation tabel.
begin; create temp table testcollation(id varchar(20) collate "en_US.utf8") on commit drop; insert into testcollation values('-1'),('1'); select id='1' from testcollation order by id limit 1; rollback;Hasil berikut dapat diperoleh:
Jika nilai true dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.
Jika nilai false dikembalikan, lanjutkan ke langkah berikutnya.
Periksa collation database.
SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');Hasil berikut dapat diperoleh:
Jika tidak ada hasil yang dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.
Jika hasil dikembalikan, lanjutkan ke langkah berikutnya.
Periksa semua database untuk menemukan indeks dengan collation selain
CatauPOSIX.WITH result AS ( WITH defcoll AS ( SELECT datcollate AS coll FROM pg_database WHERE datname = current_database() ) SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname, CASE WHEN c.collname = 'default' THEN defcoll.coll ELSE c.collname END AS collation FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s JOIN pg_collation c ON coll=c.oid CROSS JOIN defcoll WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX') ) SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX');Hasil berikut dapat diperoleh:
Jika tidak ada hasil yang dikembalikan, tidak ada tindakan lebih lanjut yang diperlukan. Migrasi cloud tidak memiliki risiko.
Jika hasil dikembalikan, migrasi cloud memiliki risiko.
Periksa ukuran disk (Periksa apakah penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL mencukupi)
Check item:
Memeriksa apakah ukuran disk mencukupi
Common error:
error:source_db_size > disk_size * 0.95Description:
Penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri lebih besar dari 95% penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL. Hal ini menunjukkan bahwa penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL tidak memadai.
Solution:
Jalankan perintah berikut untuk melihat penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri:
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;CatatanPenyimpanan yang digunakan yang dikembalikan diukur dalam satuan MB.
Hitung penyimpanan yang tersedia yang harus disediakan oleh instance ApsaraDB RDS for PostgreSQL untuk memastikan migrasi cloud berhasil.
Sebagai contoh, jika penyimpanan yang digunakan oleh instance PostgreSQL yang dikelola sendiri adalah 100 GB, penyimpanan yang tersedia pada instance ApsaraDB RDS for PostgreSQL harus setidaknya 110 GB.
Ubah spesifikasi instance ApsaraDB RDS for PostgreSQL untuk memperluas kapasitas penyimpanan. Untuk informasi lebih lanjut, lihat Ubah Spesifikasi Instance.
Periksa ukuran wal keep (Periksa nilai parameter wal_keep_size)
Check item:
Periksa apakah ukuran wal keep cukup besar.
Common error:
warning:wal_keep_size X MB terlalu kecil. Cobalah atur wal_keep_segments atau wal_keep_size cukup besar untuk memastikan keberhasilan pg_basebackupDescription:
Nilai parameter wal_keep_size atau wal_keep_segments terlalu kecil.
Solution:
Jika instance PostgreSQL yang dikelola sendiri menjalankan PostgreSQL 13 atau versi lebih baru, tingkatkan nilai parameter wal_keep_size untuk instance ApsaraDB RDS for PostgreSQL. Dengan demikian, Anda dapat meningkatkan tingkat keberhasilan cadangan penuh dan cadangan inkremental selama migrasi cloud.
Jika instance PostgreSQL yang dikelola sendiri menjalankan versi lebih awal dari PostgreSQL 13, tingkatkan nilai parameter wal_keep_segments untuk instance ApsaraDB RDS for PostgreSQL. Dengan demikian, Anda dapat meningkatkan tingkat keberhasilan cadangan penuh dan cadangan inkremental selama migrasi cloud.
CatatanJika Anda menggunakan versi PostgreSQL yang lebih awal dari PostgreSQL 13, nilai parameter wal_keep_size sama dengan nilai parameter wal_keep_segments dikalikan dengan nilai parameter wal_segment_size.
Periksa parameter spesifikasi (Periksa pengaturan parameter terkait spesifikasi)
Check item:
Periksa apakah parameter spesifikasi terlalu besar.
Common error:
error:max_connections terlalu besar, value=XXX
error:max_prepared_transactions terlalu besar, value=XXXDescription:
Nilai parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri lebih besar dari 100 kali nilai parameter ini pada instance ApsaraDB RDS for PostgreSQL. Dalam situasi ini, instance ApsaraDB RDS for PostgreSQL mungkin gagal memulai selama pembentukan tautan replikasi.
Solution:
Kurangi nilai parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri.
Setelah mengonfigurasi ulang parameter max_connections dan max_prepared_transactions untuk instance PostgreSQL yang dikelola sendiri, Anda harus memulai ulang instance tersebut.
Periksa pengguna rds (Periksa apakah akun sistem instance ApsaraDB RDS for PostgreSQL digunakan dalam instance PostgreSQL yang dikelola sendiri)
Check item:
Periksa apakah pengguna sistem RDS digunakan.
Common error:
warning:Periksa apakah pengguna sistem rds digunakan ...XXX akan digunakan kembali di rdsDescription:
Akun sistem aurora, replicator, dan pgxxx dari instance ApsaraDB RDS for PostgreSQL digunakan dalam instance PostgreSQL yang dikelola sendiri.
Solution:
Pastikan Anda tidak menggunakan akun-akun tersebut dalam instance PostgreSQL yang dikelola sendiri.
Periksa ekstensi (Periksa kompatibilitas plugin)
Check item 1:
Periksa ekstensi yang didukung sumber.
Common error:
error:Periksa ekstensi yang didukung sumber XXX tidak didukungDescription:
Plugin instance ApsaraDB RDS for PostgreSQL tidak kompatibel dengan plugin instance PostgreSQL yang dikelola sendiri.
Solution:
Hapus plugin yang tidak kompatibel dari instance PostgreSQL yang dikelola sendiri.
Check item 2:
Periksa ekstensi sumber dengan versi lebih tinggi.
Common error:
error:Periksa ekstensi sumber dengan versi lebih tinggi XXXDescription:
Versi plugin tertentu dalam instance PostgreSQL yang dikelola sendiri lebih baru daripada versi plugin ini dalam instance ApsaraDB RDS for PostgreSQL.
Solution:
Instal ulang plugin ini dalam instance PostgreSQL yang dikelola sendiri dan pastikan bahwa versi plugin dalam instance PostgreSQL yang dikelola sendiri sama dengan versi plugin dalam instance ApsaraDB RDS for PostgreSQL.
Check item 3:
Periksa ekstensi sumber dengan versi lebih rendah.
Common error:
warning:Periksa ekstensi sumber dengan versi lebih rendah XXXDescription:
Versi plugin tertentu dalam instance PostgreSQL yang dikelola sendiri lebih lama daripada versi plugin ini dalam instance ApsaraDB RDS for PostgreSQL.
Solution:
Tidak diperlukan tindakan. Versi plugin akan diperbarui secara otomatis setelah migrasi cloud.
Periksa katalog sistem Postgres (Periksa katalog sistem instance ApsaraDB for PostgreSQL)
Item Pemeriksaan 1:
Periksa apakah instance sumber menggunakan bahasa (pg_language) yang tidak didukung oleh instance tujuan.
Kesalahan Umum:
error: bahasa yang tidak diizinkan ada di database [xxx, xxx], bahasa yang diizinkan adalah [c, internal, sql, plpgsql, pltcl, plperl].Deskripsi:
Instance ApsaraDB RDS for PostgreSQL hanya mendukung bahasa berikut: C, internal, SQL, PL/pgSQL, PL/Tcl, dan PL/Perl. Bahasa yang tidak didukung yang digunakan dalam instance sumber tidak dapat digunakan dalam instance tujuan.
Solusi:
Hapus bahasa yang tidak didukung oleh instance tujuan dari instance sumber.
Item Pemeriksaan 2:
Periksa apakah instance sumber berisi objek besar.
Kesalahan Umum:
error: objek besar ada di database [xxx, xxx].Deskripsi:
Instance ApsaraDB RDS for PostgreSQL tidak mendukung objek besar. Oleh karena itu, objek besar dalam instance sumber tidak dapat digunakan dalam instance tujuan.
Solusi:
Hapus objek besar dalam instance sumber.
Item Pemeriksaan 3:
Periksa apakah izin default diberikan ke instance sumber dengan menjalankan pernyataan
ALTER DEFAULT PRIVILEGES ... GRANT .... Pemeriksaan ini dilakukan dengan memastikan apakah instance sumber berisi database yang tabel sistem pg_catalog.pg_default_acl tidak kosong.Kesalahan Umum:
error: pengaturan acl default ada di database [xxx, xxx].Deskripsi:
Jika pernyataan
ALTER DEFAULT PRIVILEGES ... GRANT ...telah dijalankan pada database instance sumber, tabel sistem pg_catalog.pg_default_acl dari database tersebut tidak kosong.Solusi:
Jalankan pernyataan
ALTER DEFAULT PRIVILEGES ... REVOKE ...pada semua database instance sumber untuk memastikan bahwa tabel sistem pg_catalog.pg_default_acl dari semua database kosong. Setelah migrasi selesai, jalankan pernyataanALTER DEFAULT PRIVILEGES ... GRANT ...pada database untuk mengembalikan izin default.Item Pemeriksaan 4:
Periksa apakah tabel sistem (pg_parameter_acl dan pg_db_role_setting) tidak kosong.
Kesalahan Umum:
warning: Tabel sistem tidak valid: [pg_parameter_acl, pg_db_role_setting], tabel sistem ini harus kosong.Deskripsi:
Tabel sistem pg_parameter_acl mencatat izin akses pengguna pada parameter kernel. ApsaraDB RDS for PostgreSQL tidak mendukung modifikasi parameter ini. Tabel sistem pg_db_role_setting mencatat izin default pengguna pada database yang berbeda.
Solusi:
Jalankan pernyataan berikut dalam instance sumber untuk menghapus data dalam tabel pg_parameter_acl dan pg_db_role_setting:
DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting;Setelah penyebaran DR selesai, konfigurasikan izin default pengguna pada database yang berbeda dalam instance tujuan.
Periksa izin peran yang disimpan (Periksa izin peran yang disimpan)
Item Pemeriksaan:
Periksa apakah izin peran yang disimpan, yang tidak diizinkan oleh instance tujuan, diberikan kepada akun dalam instance sumber.
Kesalahan Umum:
error: beberapa peran yang disimpan tidak diizinkan [pg_write_server_files] diberikan kepada pengguna. Anda harus mencabut peran ini dari anggotanyaDeskripsi:
Dalam ApsaraDB RDS for PostgreSQL, akun tidak diizinkan untuk diberikan izin peran yang disimpan seperti pg_write_server_files. Jika pernyataan seperti GRANT pg_write_server_files TO "user"; dijalankan untuk memberikan izin dalam instance sumber, Anda harus menjalankan pernyataan REVOKE untuk mencabut izin tersebut.
Solusi:
Jalankan pernyataan REVOKE untuk mencabut izin yang diberikan kepada akun dalam instance sumber. Contoh: REVOKE pg_write_server_files FROM "user";