Gunakan metode peningkatan di tempat untuk meningkatkan versi mesin utama instans ApsaraDB RDS for PostgreSQL secara langsung pada instans yang ada menggunakan pg_upgrade. Semua metadata, termasuk konfigurasi dan informasi penagihan, dipertahankan setelah peningkatan.
Untuk perbandingan semua metode peningkatan yang tersedia, lihat Pengenalan metode peningkatan versi utama.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans menjalankan ApsaraDB RDS for PostgreSQL 16 atau versi sebelumnya.
Jenis penyimpanan adalah cloud disk.
Metode penagihan adalah pay-as-you-go atau subscription.
Instans bukan read-only instance atau instans klaster khusus.
Babelfish tidak diaktifkan. Nomor versi mesin minor tidak diakhiri dengan
babelfish.
Penagihan
Gratis.
Catatan penggunaan
Tinjau hal-hal berikut sebelum memulai peningkatan.
Dampak layanan
Selama alih bencana, instans memasuki status read-only dan koneksi sementara yang berlangsung beberapa menit mungkin terjadi. Lakukan peningkatan selama jam sepi.
Durasi read-only bergantung pada jumlah objek basis data. Jalankan perintah berikut untuk memeriksa jumlahnya:
SELECT count(1) FROM pg_class;Jika jumlahnya mencapai jutaan, status read-only dapat berlangsung puluhan menit bahkan berjam-jam.
Jika tipe instans tidak memenuhi spesifikasi yang direkomendasikan, sistem akan secara otomatis meningkatkannya selama peningkatan versi. Hal ini menyebabkan status read-only tambahan selama beberapa menit dan koneksi sementara selama beberapa detik. Selesaikan semua peringatan terkait tipe instans dalam laporan pemeriksaan peningkatan versi utama sebelum melanjutkan.
Slot replikasi
Jika instans adalah publisher dengan slot replikasi, slot replikasi tersebut akan hilang setelah peningkatan.
Jika instans adalah subscriber dengan slot replikasi, preemption slot replikasi mungkin terjadi selama peningkatan, menyebabkan inkonsistensi data. Lihat Bagaimana cara mencegah inkonsistensi data akibat preemption slot replikasi selama peningkatan?
Perubahan parameter
Parameter yang tidak didukung oleh versi tujuan akan dihapus secara otomatis.
Parameter dengan nilai di luar rentang valid untuk versi tujuan akan diatur ulang ke nilai default dalam template parameter untuk versi tersebut.
Sistem sementara mengatur
statement_timeoutmenjadi0selama peningkatan dan mengembalikannya ke nilai asli setelah peningkatan selesai.
Pertimbangan lainnya
Tugas DTS: Jika instans merupakan sumber atau tujuan untuk Data Transmission Service (DTS), buat ulang tugas DTS setelah peningkatan.
Kompatibilitas plugin: Peningkatan secara otomatis memperbarui instans ke versi mesin minor terbaru, yang dapat menyebabkan masalah kompatibilitas plugin.
Cadangan instans: Cadangan penuh dilakukan sebelum dan sesudah peningkatan untuk mendukung pemulihan berbasis klon.
Langkah 1: Jalankan pemeriksaan pra-peningkatan
Masuk ke Konsol ApsaraDB RDS. Di bilah navigasi atas, pilih wilayah tempat instans berada. Temukan dan klik ID instans.
(Opsional) Jika instans memiliki instans read-only, ubah endpoint aplikasi dari endpoint instans read-only ke endpoint instans utama, lalu hapus instans read-only tersebut.
Catatan Ubah endpoint aplikasi selama jam sepi untuk meminimalkan dampak terhadap layanan.Di panel navigasi kiri, klik Major Version Upgrade.
Catatan Jika Major Version Upgrade tidak muncul, periksa versi dan konfigurasi instans Anda. Untuk informasi lebih lanjut, lihat Prasyarat.Di tab Upgrade Check, klik Create upgrade check report.
Pilih versi tujuan, atur Upgrade Mode ke Local Upgrade, lalu klik OK. Status instans berubah menjadi Maintaining Instance selama pemeriksaan berlangsung, lalu kembali ke Running setelah pemeriksaan selesai.
Tinjau hasil pemeriksaan:
Success atau Warning: lanjutkan ke Langkah 2.
Gagal: Klik View Information, perbaiki masalah yang diidentifikasi dalam laporan, lalu jalankan pemeriksaan ulang. Untuk informasi selengkapnya mengenai kesalahan umum, lihat Menafsirkan laporan pemeriksaan peningkatan versi utama ApsaraDB RDS untuk PostgreSQL.
Penting- Jika hasilnya Warning, perbaiki masalah tersebut dan jalankan kembali pemeriksaan hingga hasilnya Success. - Jika Anda membuat plugin pada instans utama setelah pemeriksaan berhasil, jalankan kembali pemeriksaan tersebut.
Langkah 2: Tingkatkan versi mesin utama
Klik tab Upgrade Instance. Baca peringatan, pilih versi peningkatan, lalu klik Create Upgrade Task.
Di kotak dialog, baca prompt lalu klik OK.
Di bagian Create Major Engine Version Upgrade Task, atur Upgrade Mode ke Local Upgrade dan konfigurasi Cutover End Time:
immediately: alih bencana terjadi segera setelah migrasi selesai.
Instance operation and maintenance time: alih bencana terjadi dalam jendela pemeliharaan yang dikonfigurasi.
Klik Create now. Status instans berubah menjadi Migration in Progress saat tugas peningkatan dimulai. Durasi peningkatan berbanding lurus dengan jumlah objek basis data. Lacak kemajuan di Task Hub.
Penting- Tugas peningkatan tidak dapat dimodifikasi atau dihapus setelah dibuat. - Selama instans berada dalam status Migration in Progress, operasi seperti memodifikasi parameter, me-restart, atau melepas instans tidak tersedia.
Peningkatan selesai ketika baik instans sumber maupun tujuan menunjukkan status Running.
Catatan Di tab Upgrade History, klik View Information di kolom Upgrade Log untuk melihat durasi read-only dan log peningkatan lengkap. Durasi read-only adalah waktu antara Cutover End Time dan Cutover End Time, tidak termasuk periode flush cache DNS.
Langkah selanjutnya
Jika Anda menghapus instans read-only sebelum peningkatan:
Buat instans read-only pada instans tujuan.
Di aplikasi Anda, perbarui endpoint agar mengarah ke instans read-only baru.
Referensi hasil peningkatan
Kolom Upgrade Result di tab Upgrade History menampilkan salah satu status berikut:
| Hasil peningkatan | Status instans | Makna |
|---|---|---|
| Running | Migration in Progress | Tugas peningkatan sedang berjalan. |
| Succeeded | Running | Tugas peningkatan berhasil diselesaikan. |
Referensi API
| Operasi API | Deskripsi |
|---|---|
| UpgradeDBInstanceMajorVersionPrecheck | Menjalankan pemeriksaan pra-peningkatan untuk peningkatan versi mesin utama. |
| DescribeUpgradeMajorVersionPrecheckTask | Mengkueri laporan pemeriksaan pra-peningkatan. |
| UpgradeDBInstanceMajorVersion | Meningkatkan versi mesin utama. |
| DescribeUpgradeMajorVersionTask | Mengkueri riwayat tugas peningkatan versi mesin utama. |
Referensi
FAQ
Apakah saya dapat memodifikasi instans selama peningkatan versi mesin utama?
Tidak. Tunggu hingga peningkatan selesai sebelum melakukan perubahan pada instans.
Apakah peningkatan versi mesin utama otomatis didukung?
Tidak. Peningkatan versi mesin utama harus dimulai secara manual.
Apakah penurunan versi mesin utama didukung?
Tidak. Untuk menjalankan versi yang lebih rendah, beli instans baru pada versi target dan gunakan DTS untuk melakukan migrasi data.
Setelah peningkatan, saya mendapatkan error konflik `raster_overviews` saat membuat view. Bagaimana cara memperbaikinya?
Hal ini memengaruhi versi PostGIS sebelum 2.5.2 pada PostgreSQL 10 atau 11 saat ditingkatkan ke PostgreSQL 12. Ikuti langkah-langkah berikut:
Pada instans sumber, tingkatkan plugin PostGIS. Jalankan perintah berikut dua kali untuk memastikan keberhasilannya:
SELECT PostGIS_Extensions_Upgrade(); SELECT PostGIS_Extensions_Upgrade();Pilih solusi berdasarkan apakah Anda menggunakan plugin PostGIS Raster atau tidak.
Jika Anda menggunakan PostGIS Raster:
Pada instans sumber, hapus view
raster_overviewsdari ekstensi dan ganti dengan placeholder:ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews; CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;Tingkatkan instans PostgreSQL ke PostgreSQL 12 atau lebih tinggi.
Pada instans tujuan, buat ulang view lengkap dan tambahkan kembali ke ekstensi:
CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, ( SELECT connamespace, conrelid, conkey, pg_get_constraintdef(oid) AS consrc FROM pg_constraint ) AS s WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY(ARRAY['r'::char, 'v'::char, 'm'::char, 'f'::char]) AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text); ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;
Jika Anda tidak menggunakan PostGIS Raster:
Pada instans sumber, hapus ekstensi:
DROP EXTENSION PostGIS_Raster;Tingkatkan instans PostgreSQL ke PostgreSQL 12 atau lebih tinggi.
Bagaimana cara mencegah inkonsistensi data akibat preemption slot replikasi selama peningkatan?
Pilih salah satu pendekatan berikut berdasarkan lokasi data subscription yang diinginkan setelah peningkatan.
Simpan data subscription di instans sumber:
Pastikan instans sumber tidak mati karena beban berlebih selama peningkatan. Jika hal ini terjadi, slot replikasi mungkin diambil alih oleh instans tujuan, menyebabkan inkonsistensi data. Setelah peningkatan, nonaktifkan subscription pada database tujuan:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;Pindahkan data subscription ke instans tujuan:
Sebelum peningkatan, nonaktifkan subscription pada instans sumber:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;Setelah peningkatan, aktifkan subscription pada instans tujuan:
\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;Bagaimana cara memperbaiki inkonsistensi data subscription setelah peningkatan?
Pada instans tujuan (versi lebih tinggi), hapus data tabel yang terpengaruh. Lalu buat ulang subscription dengan
copy_data=true. Untuk detailnya, lihat ALTER SUBSCRIPTION.Gunakan
ON CONFLICTuntuk mengimpor data dari instans sumber (versi lebih rendah) ke instans tujuan. Contoh polanya sebagai berikut:CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT); INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a'); INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b'); INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c'); -- Timestamp lebih baru: perbarui baris yang sudah ada INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Timestamp lebih lama: lewati baris INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Baris baru: masukkan INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t;
Mengapa saya perlu menghapus instans read-only sebelum peningkatan versi mesin utama?
Node hanya-baca dan slot replikasi mereka tetap terhubung ke instans sumber setelah peningkatan dan tidak secara otomatis dipindahkan ke instans tujuan. Hapus node dan slot tersebut sebelum peningkatan, lalu buat ulang di instans tujuan setelah peningkatan.